Skip to content

Commit ca040bd

Browse files
Matthew MoyaMatthew Moya
authored andcommitted
Tests
1 parent 87f208b commit ca040bd

File tree

2 files changed

+76
-7
lines changed

2 files changed

+76
-7
lines changed

src/utils/intersectionObserver.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import { IIntersectionObserver, IIntersectionObserverEntry, IIntersectionObserverRegisteredAd } from '../types';
22

3-
const MONITORING = Symbol('MONITORING');
4-
53
class ITXObserver {
64
public static observer: IIntersectionObserver;
75
public static registeredAds: { [key: string]: IIntersectionObserverRegisteredAd } = {};
86
public static adCount: number = 0;
97
public static hasViewBeenScrolled: boolean = false;
108

119
public static monitorViewport() {
12-
if (ITXObserver[MONITORING]) {
10+
if (ITXObserver.observer) {
1311
return;
1412
}
1513

@@ -18,8 +16,6 @@ class ITXObserver {
1816
ITXObserver.observer = new IntersectionObserver((entries: any) => {
1917
ITXObserver.handleIntersect(entries);
2018
}, { threshold: [0, 0.25, 1] });
21-
22-
ITXObserver[MONITORING] = true;
2319
}
2420

2521
public static handleIntersect = (entries: IIntersectionObserverEntry[]) => {
@@ -110,8 +106,6 @@ class ITXObserver {
110106
--ITXObserver.adCount;
111107
}
112108

113-
private static [MONITORING]: boolean = false;
114-
115109
private static getAdIfExists = (id: string) => {
116110
return ITXObserver.registeredAds[id];
117111
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import ITXObserver from '../../src/utils/intersectionObserver';
2+
3+
describe('.ITXObserver Static Class', async () => {
4+
beforeEach(() => {
5+
const bounds = {
6+
height: 1,
7+
width: 1,
8+
top: 1,
9+
left: 1,
10+
right: 1,
11+
bottom: 1,
12+
};
13+
14+
const rootElm = document.createElement('div');
15+
16+
ITXObserver.observer = {
17+
root: rootElm,
18+
rootMargin: '',
19+
observe: (target: Element) => undefined,
20+
unobserve: (target: Element) => undefined,
21+
disconnect: () => undefined,
22+
takeRecords: () => [{
23+
time: 12,
24+
rootBounds: bounds,
25+
boundingClientRect: bounds,
26+
intersectionRect: bounds,
27+
intersectionRatio: 12,
28+
isIntersecting: false,
29+
target: rootElm,
30+
},
31+
],
32+
};
33+
});
34+
35+
describe('.subscribe', () => {
36+
it('adds cbs to existing ad if another plugin has already subscribed it', () => {
37+
const element = document.createElement('div');
38+
const cb = () => { };
39+
40+
ITXObserver.subscribe('ad1', element, 5, cb);
41+
ITXObserver.subscribe('ad1', element, 5, cb, cb);
42+
ITXObserver.subscribe('ad1', element, 5, cb, cb, cb);
43+
44+
expect(ITXObserver.adCount).toBe(1);
45+
expect(ITXObserver.registeredAds.ad1.onEnterViewport.length).toBe(3);
46+
expect(ITXObserver.registeredAds.ad1.onFullyEnterViewport.length).toBe(2);
47+
expect(ITXObserver.registeredAds.ad1.onExitViewport.length).toBe(1);
48+
});
49+
50+
it('adds a new ad to the dict when appropriate', () => {
51+
const element = document.createElement('div');
52+
const cb = () => { };
53+
54+
ITXObserver.subscribe('ad1', element, 5, cb);
55+
ITXObserver.subscribe('ad1', element, 5, cb, cb);
56+
57+
ITXObserver.subscribe('ad2', element, 5, cb, cb, cb);
58+
59+
expect(ITXObserver.adCount).toBe(2);
60+
});
61+
});
62+
63+
describe('.unsubscribe', () => {
64+
it('removes the correct ad from the dict', () => {
65+
ITXObserver.unsubscribe('ad1');
66+
expect(ITXObserver.adCount).toBe(1);
67+
expect(ITXObserver.registeredAds.ad1).toBe(undefined);
68+
expect(!!ITXObserver.registeredAds.ad2).toBe(true);
69+
70+
ITXObserver.unsubscribe('ad2');
71+
expect(ITXObserver.adCount).toBe(0);
72+
expect(ITXObserver.registeredAds.ad2).toBe(undefined);
73+
});
74+
});
75+
});

0 commit comments

Comments
 (0)