11' use strict'
22
33describe ' CommentProvider' , ->
4- beforeEach ->
5- # TODO: remove promises api polyfill when phantomjs supports it
6- window . Promise = ( f ) ->
7- # Don't actually call f
8- window . Promise . prototype . then = ( f ) -> this
9- window . Promise . prototype . catch = ( f ) -> this
10- window . Promise . resolve = ( f ) -> new Promise ()
4+ xhr = null
5+ phonyParser = null
6+ beforeAll ->
7+ xhr = sinon . useFakeXMLHttpRequest ()
8+ phonyParser =
9+ parseOne : ( item ) -> item
10+ parseMany : ( items ) -> items
1111
1212 it ' has constants' , ->
1313 expect (CommentProvider .SOURCE_XML ).toBe ' XML'
@@ -61,7 +61,7 @@ describe 'CommentProvider', ->
6161 describe ' .addStaticSource' , ->
6262 it ' accepts static source' , ->
6363 promise = {}
64- provider .addStaticSource ( promise, CommentProvider .SOURCE_XML )
64+ provider .addStaticSource promise, CommentProvider .SOURCE_XML
6565 expect (provider ._staticSources [CommentProvider .SOURCE_XML ][0 ]).toBe promise
6666
6767 it ' rejects if provider is shut down' , ->
@@ -70,6 +70,94 @@ describe 'CommentProvider', ->
7070 expect ( => provider .addStaticSource ({}, CommentProvider .SOURCE_XML )).toThrow ()
7171
7272 describe ' .addDynamicSource' , ->
73+ it ' accepts dynamic source' , ->
74+ dynamicSource =
75+ addEventListner : sinon .stub ()
76+ provider .addDynamicSource dynamicSource, CommentProvider .SOURCE_XML
77+ expect (provider ._dynamicSources [CommentProvider .SOURCE_XML ][0 ]).toBe dynamicSource
7378
74-
75-
79+ it ' rejects if provider is shut down' , ->
80+ provider = new CommentProvider ()
81+ provider .destroy ()
82+ expect ( => provider .addDynamicSource ({}, CommentProvider .SOURCE_XML )).toThrow ()
83+
84+ describe ' .addParser' , ->
85+ it ' accepts parser' , ->
86+ parser = {}
87+ provider .addParser parser, CommentProvider .SOURCE_JSON
88+ expect (provider ._parsers [CommentProvider .SOURCE_JSON ][0 ]).toBe parser
89+
90+ it ' rejects if provider is shut down' , ->
91+ provider = new CommentProvider ()
92+ provider .destroy ()
93+ expect ( => provider .addParser ({}, CommentProvider .SOURCE_XML )).toThrow ()
94+
95+ describe ' .addTarget' , ->
96+ commentManager = null
97+ beforeAll ->
98+ commentManager = new CommentManager (document .createElement ' div' )
99+
100+ it ' accepts target' , ->
101+ provider .addTarget commentManager, CommentProvider .SOURCE_JSON
102+ expect (provider ._targets .length ).toBe 1
103+ expect (provider ._targets [0 ]).toBe commentManager
104+
105+ it ' rejects if target is not CommentManager' , ->
106+ expect ( => provider .addTarget {}).toThrow ()
107+
108+ it ' rejects if provider is shut down' , ->
109+ provider = new CommentProvider ()
110+ provider .destroy ()
111+ expect ( => provider .addTarget (commentManager)).toThrow ()
112+
113+ describe ' .load' , ->
114+ it ' requests static sources' , (done ) ->
115+ provider .addStaticSource (Promise .resolve ' Foo' ), CommentProvider .SOURCE_TEXT
116+ provider .addParser phonyParser, CommentProvider .SOURCE_TEXT
117+ spy = sinon .spy phonyParser, ' parseMany'
118+ provider .load ().then () ->
119+ expect (spy).toHaveBeenCalledWith ' Foo'
120+ done ()
121+
122+ it ' fails if provider is shut down' , ->
123+ provider = new CommentProvider ()
124+ provider .destroy ()
125+ expect ( => provider .load ()).toThrow ()
126+
127+ it ' fails if no sources are available' , (done ) ->
128+ provider .addStaticSource (Promise .reject ' Error' ), CommentProvider .SOURCE_TEXT
129+ provider .load ().catch (e) ->
130+ expect (e).toBe ' Error'
131+ done ()
132+
133+ describe ' .start' , ->
134+ dynamicSource = null
135+ spy = null
136+
137+ beforeEach ->
138+ dynamicSource =
139+ addEventListener : () ->
140+ spy = sinon .spy dynamicSource, " addEventListener"
141+
142+ it ' calls load' , ->
143+ loadspy = sinon .spy provider, ' load'
144+ provider .start ()
145+ expect (loadspy).toHaveBeenCalled true
146+
147+ it ' binds dynamic sources' , (done ) ->
148+ provider .addDynamicSource dynamicSource, CommentProvider .SOURCE_XML
149+ provider .start ().then () ->
150+ expect (spy).toHaveBeenCalled true
151+ done ()
152+
153+ it ' does not bind dynamic if the static sources fail' , (done ) ->
154+ provider .addDynamicSource dynamicSource, CommentProvider .SOURCE_XML
155+ provider .addStaticSource (Promise .reject ' Error' ), CommentProvider .SOURCE_XML
156+ provider .start ().catch () ->
157+ expect (spy .callCount ).toBe 0
158+ done ()
159+
160+ describe ' .destory' , ->
161+ it ' sets destroyed flag' , ->
162+ provider .destroy ()
163+ expect (provider ._destroyed ).toBe true
0 commit comments