@@ -184,6 +184,17 @@ module('FlashMessagesService', function(hooks) {
184
184
) ;
185
185
} ) ;
186
186
187
+ test ( 'when preventDuplicates is `false` but flashInstance preventDuplicates is `true` setting a message is not required' , function ( assert ) {
188
+ set ( service , 'defaultPreventDuplicates' , false ) ;
189
+
190
+ assert . throws ( ( ) => {
191
+ service . add ( { preventDuplicates : true } ) ;
192
+ } ,
193
+ new EmberError ( 'Assertion Failed: The flash message cannot be empty when preventDuplicates is enabled.' ) ,
194
+ 'Error is thrown'
195
+ ) ;
196
+ } ) ;
197
+
187
198
test ( 'it adds duplicate messages to the queue if preventDuplicates is `false`' , function ( assert ) {
188
199
set ( service , 'defaultPreventDuplicates' , false ) ;
189
200
const expectedResult = emberArray ( [ 'foo' , 'foo' , 'bar' ] ) ;
@@ -205,6 +216,43 @@ module('FlashMessagesService', function(hooks) {
205
216
assert . equal ( get ( service , 'queue' ) . length , 2 , 'it does not add duplicate messages to the queue' ) ;
206
217
} ) ;
207
218
219
+ test ( 'it does not add duplicate messages to the queue if flashInstance preventDuplicates is `true`' , function ( assert ) {
220
+ set ( service , 'defaultPreventDuplicates' , false ) ;
221
+ const messages = emberArray ( [ 'foo' , 'foo' , 'bar' ] ) ;
222
+ const expectedResult = messages . uniq ( ) ;
223
+ messages . forEach ( ( message ) => service . success ( message , { preventDuplicates : true } ) ) ;
224
+ const result = get ( service , 'queue' ) . mapBy ( 'message' ) ;
225
+
226
+ assert . deepEqual ( result , expectedResult , 'it does not add duplicate messages to the queue' ) ;
227
+ assert . equal ( get ( service , 'queue' ) . length , 2 , 'it does not add duplicate messages to the queue' ) ;
228
+ } ) ;
229
+
230
+ test ( 'flashInstance preventDuplicates prefers instance preventDuplicates over global' , function ( assert ) {
231
+ set ( service , 'defaultPreventDuplicates' , true ) ;
232
+ const messages = emberArray ( [ 'foo' , 'foo' , 'bar' ] ) ;
233
+ const expectedResult = [ 'foo' , 'foo' , 'bar' ] ;
234
+ messages . forEach ( ( message ) => service . success ( message , { preventDuplicates : false } ) ) ;
235
+ const result = get ( service , 'queue' ) . mapBy ( 'message' ) ;
236
+
237
+ assert . deepEqual ( result , expectedResult , 'it adds duplicate messages to the queue' ) ;
238
+ assert . equal ( get ( service , 'queue' ) . length , 3 , 'it adds duplicate messages to the queue' ) ;
239
+ } ) ;
240
+
241
+ test ( 'it does use the global preventDuplicates if the instance option isn\'t set' , function ( assert ) {
242
+ set ( service , 'defaultPreventDuplicates' , false ) ;
243
+ service . success ( 'foo' ) ;
244
+ service . success ( 'foo' ) ;
245
+ service . success ( 'bar' , { preventDuplicates : true } ) ;
246
+ service . success ( 'bar' , { preventDuplicates : true } ) ;
247
+ service . success ( 'foo' ) ;
248
+ service . success ( 'baz' , { preventDuplicates : true } ) ;
249
+
250
+ const result = get ( service , 'queue' ) . mapBy ( 'message' ) ;
251
+
252
+ assert . deepEqual ( result , [ 'foo' , 'foo' , 'bar' , 'foo' , 'baz' ] , 'it adds duplicated messages if preventDuplicates isn\'t set' ) ;
253
+ assert . equal ( get ( service , 'queue' ) . length , 5 , 'it handles duplicates where preventDuplicates is false' ) ;
254
+ } ) ;
255
+
208
256
test ( 'it supports chaining' , function ( assert ) {
209
257
service
210
258
. registerTypes ( [ 'meow' ] )
0 commit comments