@@ -7,6 +7,7 @@ import Test.HUnit
7
7
import Turtle
8
8
import Prelude hiding (FilePath )
9
9
import qualified Data.List as List (sort )
10
+ import qualified Data.Text as T
10
11
11
12
import TestHelpers
12
13
import Hledger.Flow.Common
@@ -49,6 +50,23 @@ testDirOrPwd = TestCase (
49
50
)
50
51
)
51
52
53
+ assertSubDirsForDetermineBaseDir :: FilePath -> [FilePath ] -> IO ()
54
+ assertSubDirsForDetermineBaseDir expectedBaseDir importDirs = do
55
+ _ <- sequence $ map (assertDetermineBaseDir expectedBaseDir) importDirs
56
+ return ()
57
+
58
+ assertDetermineBaseDir :: FilePath -> FilePath -> IO ()
59
+ assertDetermineBaseDir expectedBaseDir subDir = do
60
+ initialPwd <- pwd
61
+ bd1 <- determineBaseDir $ Just subDir
62
+ cd subDir
63
+ bd2 <- determineBaseDir Nothing
64
+ bd3 <- determineBaseDir $ Just " ."
65
+ cd initialPwd
66
+ let msg = format (" determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - " % fp) subDir
67
+ _ <- sequence $ map (assertEqual (T. unpack msg) expectedBaseDir) [bd1, bd2, bd3]
68
+ return ()
69
+
52
70
testDetermineBaseDir :: Test
53
71
testDetermineBaseDir = TestCase (
54
72
sh (
@@ -63,51 +81,29 @@ testDetermineBaseDir = TestCase (
63
81
bdUnrelated <- liftIO $ determineBaseDir'' unrelatedDir unrelatedDir
64
82
liftIO $ assertEqual " determineBaseDir produces an error message when it cannot find a baseDir" (Left $ errorMessageBaseDir unrelatedDir) bdUnrelated
65
83
66
- currentDir <- pwd
67
- let baseDir = forceTrailingSlash $ collapse $ currentDir </> tmpdir </> " bd1"
68
-
84
+ let baseDir = " bd1"
69
85
let importDir = baseDir </> " import"
70
86
let ownerDir = importDir </> " john"
71
87
let bankDir = ownerDir </> " mybank"
72
88
let accDir = bankDir </> " myacc"
73
89
let inDir = accDir </> " 1-in"
74
90
let yearDir = inDir </> " 2019"
75
- mktree yearDir
76
-
77
- let reportDir = baseDir </> " report"
78
- mkdir reportDir
91
+ let subDirs = [yearDir, inDir, accDir, bankDir, ownerDir, importDir, baseDir]
79
92
80
- cd baseDir
81
- bd <- liftIO $ determineBaseDir Nothing
82
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - in the base dir" baseDir bd
93
+ mktree $ tmpdir </> yearDir
83
94
84
- cd reportDir
85
- bdReport <- liftIO $ determineBaseDir Nothing
86
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - report dir" baseDir bdReport
95
+ let subDirsRelativeToTop = map (tmpdir </> ) subDirs
87
96
88
- cd yearDir
89
- bdYear <- liftIO $ determineBaseDir Nothing
90
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - year dir" baseDir bdYear
91
-
92
- cd inDir
93
- bdIn <- liftIO $ determineBaseDir Nothing
94
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - input dir" baseDir bdIn
95
-
96
- cd accDir
97
- bdAcc <- liftIO $ determineBaseDir Nothing
98
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - account dir" baseDir bdAcc
99
-
100
- cd bankDir
101
- bdBank <- liftIO $ determineBaseDir Nothing
102
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - bank dir" baseDir bdBank
97
+ currentDir <- pwd
98
+ let absoluteTempDir = forceTrailingSlash $ collapse $ currentDir </> tmpdir
99
+ let absoluteSubDirs = map (absoluteTempDir </> ) subDirs
103
100
104
- cd ownerDir
105
- bdOwner <- liftIO $ determineBaseDir Nothing
106
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - owner dir " baseDir bdOwner
101
+ let absoluteBaseDir = forceTrailingSlash $ absoluteTempDir </> baseDir
102
+ liftIO $ assertSubDirsForDetermineBaseDir absoluteBaseDir absoluteSubDirs
103
+ liftIO $ assertSubDirsForDetermineBaseDir absoluteBaseDir subDirsRelativeToTop
107
104
108
- cd importDir
109
- bdImport <- liftIO $ determineBaseDir Nothing
110
- liftIO $ assertEqual " determineBaseDir searches from pwd upwards until it finds a dir containing 'import' - import dir" baseDir bdImport
105
+ cd absoluteTempDir
106
+ liftIO $ assertSubDirsForDetermineBaseDir absoluteBaseDir subDirs
111
107
)
112
108
)
113
109
0 commit comments