@@ -7,43 +7,91 @@ CouchBuilder = require '../../src/CouchBuilder'
77describe ' CouchBuilder' , ->
88
99 beforeEach ->
10- @handlers = [
11- (filePath ) -> new Promise (resolve , reject ) ->
12- return resolve null unless path .basename (filePath).match / ^ file-a/
13-
14- fs .readFile filePath, (error , data ) ->
15- return reject error if error
16-
17- resolve [path .basename (filePath), " (handler a) #{ data .toString ()} " ]
18-
19- (filePath ) -> new Promise (resolve , reject ) ->
20- return resolve null unless path .basename (filePath).match / ^ file-b/
21-
22- fs .readFile filePath, (error , data ) ->
23- return reject error if error
24-
25- resolve [path .basename (filePath), " (handler b) #{ data .toString ()} " ]
26- ]
27- @subject = new CouchBuilder @handlers
28-
29- it ' builds a result using the correct handlers' , ->
30- filePath = " #{ __dirname } /../fixture/tree"
31- expected =
32- ' directory-a' :
33- ' directory-a-a' :
34- ' file-a-a-a' : ' (handler a) a-a-a\n '
35- ' file-a-a-b' : ' (handler a) a-a-b\n '
36- ' directory-a-b' :
37- ' file-a-b-a' : ' (handler a) a-b-a\n '
38- ' file-a-b-b' : ' (handler a) a-b-b\n '
39- ' file-a-a' : ' (handler a) a-a\n '
40- ' file-a-b' : ' (handler a) a-b\n '
41- ' directory-b' :
42- ' file-b-a' : ' (handler b) b-a\n '
43- ' file-b-b' : ' (handler b) b-b\n '
44- ' file-a' : ' (handler a) a\n '
45- ' file-b' : ' (handler b) b\n '
46-
47- return @subject .build filePath
48- .then (actual) ->
49- assert .deepEqual actual, expected
10+ @ handlerA = (filePath ) -> new Promise (resolve , reject ) ->
11+ return resolve null unless path .basename (filePath).match / ^ file-a/
12+
13+ fs .readFile filePath, (error , data ) ->
14+ return reject error if error
15+
16+ resolve [path .basename (filePath), " (handler a) #{ data .toString ()} " ]
17+
18+ @ handlerB = (filePath ) -> new Promise (resolve , reject ) ->
19+ return resolve null unless path .basename (filePath).match / ^ file-b/
20+
21+ fs .readFile filePath, (error , data ) ->
22+ return reject error if error
23+
24+ resolve [path .basename (filePath), " (handler b) #{ data .toString ()} " ]
25+
26+ @filePath = " #{ __dirname } /../fixture/tree"
27+
28+ describe ' under normal conditions' , ->
29+
30+ beforeEach ->
31+ @subject = new CouchBuilder [@handlerA , @handlerB ]
32+
33+ it ' builds a result using the correct handlers' , ->
34+ expected =
35+ ' directory-a' :
36+ ' directory-a-a' :
37+ ' file-a-a-a' : ' (handler a) a-a-a\n '
38+ ' file-a-a-b' : ' (handler a) a-a-b\n '
39+ ' directory-a-b' :
40+ ' file-a-b-a' : ' (handler a) a-b-a\n '
41+ ' file-a-b-b' : ' (handler a) a-b-b\n '
42+ ' file-a-a' : ' (handler a) a-a\n '
43+ ' file-a-b' : ' (handler a) a-b\n '
44+ ' directory-b' :
45+ ' file-b-a' : ' (handler b) b-a\n '
46+ ' file-b-b' : ' (handler b) b-b\n '
47+ ' file-a' : ' (handler a) a\n '
48+ ' file-b' : ' (handler b) b\n '
49+
50+ return @subject .build @filePath
51+ .then (actual) ->
52+ assert .deepEqual actual, expected
53+
54+ describe ' under handler error conditions' , ->
55+
56+ beforeEach ->
57+ @error = ' error'
58+ @ handlerX = (filePath ) => new Promise (resolve , reject ) =>
59+ return reject @error
60+ @subject = new CouchBuilder [@handlerA , @handlerX ]
61+
62+ it ' handles the handler error' , ->
63+ return @subject .build @filePath
64+ .catch (actual) =>
65+ assert .deepEqual actual, @error
66+
67+ describe ' under file tree traversal error conditions' , ->
68+
69+ beforeEach ->
70+ @streamHandlers = {}
71+ @stream =
72+ on : (event , handler ) => @streamHandlers [event] = handler
73+ destroy : => @streamHandlers .close ()
74+ @readdirp = sinon .stub ()
75+ @readdirp .returns @stream
76+
77+ @subject = new CouchBuilder [], @readdirp
78+
79+ it ' handles warnings' , ->
80+ expected = ' warning'
81+ promise = @subject .build ' filePath'
82+ .catch (actual) ->
83+ assert .strictEqual actual, expected
84+
85+ @streamHandlers .warn expected
86+
87+ return promise
88+
89+ it ' handles errors' , ->
90+ expected = ' error'
91+ promise = @subject .build ' filePath'
92+ .catch (actual) ->
93+ assert .strictEqual actual, expected
94+
95+ @streamHandlers .error expected
96+
97+ return promise
0 commit comments