@@ -16,13 +16,21 @@ module('Integration | Modifier | did-intersect', function (hooks) {
16
16
this . _admin = { } ;
17
17
}
18
18
19
- observe = sinon . stub ( ) ;
20
- unobserve = sinon . stub ( ) ;
19
+ observe = sinon . stub ( ) . callsFake ( ( ) => {
20
+ this . isObserving = true ;
21
+ } ) ;
22
+ unobserve = sinon . stub ( ) . callsFake ( ( ) => {
23
+ this . isObserving = false ;
24
+ } ) ;
21
25
addEnterCallback = sinon . stub ( ) . callsFake ( ( element , callback ) => {
22
- this . onEnterCallback = sinon . spy ( callback ) ;
26
+ this . onEnterCallback = sinon . spy ( ( ) => {
27
+ if ( this . isObserving ) callback ( ) ;
28
+ } ) ;
23
29
} ) ;
24
30
addExitCallback = sinon . stub ( ) . callsFake ( ( element , callback ) => {
25
- this . onExitCallback = sinon . spy ( callback ) ;
31
+ this . onExitCallback = sinon . spy ( ( ) => {
32
+ if ( this . isObserving ) callback ( ) ;
33
+ } ) ;
26
34
} ) ;
27
35
}
28
36
@@ -344,4 +352,46 @@ module('Integration | Modifier | did-intersect', function (hooks) {
344
352
345
353
assert . equal ( this . newExitStub . callCount , 1 , 'new exit callback is called' ) ;
346
354
} ) ;
355
+
356
+ module ( 'modifier accepts `isObserving` argument' , function ( ) {
357
+ test ( 'with a truth(y) value' , async function ( assert ) {
358
+ assert . expect ( 2 ) ;
359
+
360
+ await render ( hbs `
361
+ <div
362
+ {{did-intersect
363
+ isObserving=true
364
+ onEnter=this.enterStub
365
+ onExit=this.exitStub
366
+ }}
367
+ ></div>
368
+ ` ) ;
369
+
370
+ this . observerManagerMock . onEnterCallback ( ) ;
371
+ this . observerManagerMock . onExitCallback ( ) ;
372
+
373
+ assert . ok ( this . enterStub . calledOnce , 'the enter callback is invoked' ) ;
374
+ assert . ok ( this . exitStub . calledOnce , 'the onExit callback is invoked' ) ;
375
+ } ) ;
376
+
377
+ test ( 'with a false(y) value' , async function ( assert ) {
378
+ assert . expect ( 2 ) ;
379
+
380
+ await render ( hbs `
381
+ <div
382
+ {{did-intersect
383
+ isObserving=false
384
+ onEnter=this.enterStub
385
+ onExit=this.exitStub
386
+ }}
387
+ ></div>
388
+ ` ) ;
389
+
390
+ this . observerManagerMock . onEnterCallback ( ) ;
391
+ this . observerManagerMock . onExitCallback ( ) ;
392
+
393
+ assert . ok ( this . enterStub . notCalled , 'the enter callback is not invoked' ) ;
394
+ assert . ok ( this . exitStub . notCalled , 'the onExit callback is not invoked' ) ;
395
+ } ) ;
396
+ } ) ;
347
397
} ) ;
0 commit comments