summaryrefslogtreecommitdiff
path: root/spec/frontend/diffs/utils/discussions_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/diffs/utils/discussions_spec.js')
-rw-r--r--spec/frontend/diffs/utils/discussions_spec.js133
1 files changed, 0 insertions, 133 deletions
diff --git a/spec/frontend/diffs/utils/discussions_spec.js b/spec/frontend/diffs/utils/discussions_spec.js
deleted file mode 100644
index 9a3d442d943..00000000000
--- a/spec/frontend/diffs/utils/discussions_spec.js
+++ /dev/null
@@ -1,133 +0,0 @@
-import { discussionIntersectionObserverHandlerFactory } from '~/diffs/utils/discussions';
-
-describe('Diff Discussions Utils', () => {
- describe('discussionIntersectionObserverHandlerFactory', () => {
- it('creates a handler function', () => {
- expect(discussionIntersectionObserverHandlerFactory()).toBeInstanceOf(Function);
- });
-
- describe('intersection observer handler', () => {
- const functions = {
- setCurrentDiscussionId: jest.fn(),
- getPreviousUnresolvedDiscussionId: jest.fn().mockImplementation((id) => {
- return Number(id) - 1;
- }),
- };
- const defaultProcessableWrapper = {
- entry: {
- time: 0,
- isIntersecting: true,
- rootBounds: {
- bottom: 0,
- },
- boundingClientRect: {
- top: 0,
- },
- },
- currentDiscussion: {
- id: 1,
- },
- isFirstUnresolved: false,
- isDiffsPage: true,
- };
- let handler;
- let getMock;
- let setMock;
-
- beforeEach(() => {
- functions.setCurrentDiscussionId.mockClear();
- functions.getPreviousUnresolvedDiscussionId.mockClear();
-
- defaultProcessableWrapper.functions = functions;
-
- setMock = functions.setCurrentDiscussionId.mock;
- getMock = functions.getPreviousUnresolvedDiscussionId.mock;
- handler = discussionIntersectionObserverHandlerFactory();
- });
-
- it('debounces multiple simultaneous requests into one queue', () => {
- handler(defaultProcessableWrapper);
- handler(defaultProcessableWrapper);
- handler(defaultProcessableWrapper);
- handler(defaultProcessableWrapper);
-
- expect(setTimeout).toHaveBeenCalledTimes(4);
- expect(clearTimeout).toHaveBeenCalledTimes(3);
-
- // By only advancing to one timer, we ensure it's all being batched into one queue
- jest.advanceTimersToNextTimer();
-
- expect(functions.setCurrentDiscussionId).toHaveBeenCalledTimes(4);
- });
-
- it('properly processes, sorts and executes the correct actions for a set of observed intersections', () => {
- handler(defaultProcessableWrapper);
- handler({
- // This observation is here to be filtered out because it's a scrollDown
- ...defaultProcessableWrapper,
- entry: {
- ...defaultProcessableWrapper.entry,
- isIntersecting: false,
- boundingClientRect: { top: 10 },
- rootBounds: { bottom: 100 },
- },
- });
- handler({
- ...defaultProcessableWrapper,
- entry: {
- ...defaultProcessableWrapper.entry,
- time: 101,
- isIntersecting: false,
- rootBounds: { bottom: -100 },
- },
- currentDiscussion: { id: 20 },
- });
- handler({
- ...defaultProcessableWrapper,
- entry: {
- ...defaultProcessableWrapper.entry,
- time: 100,
- isIntersecting: false,
- boundingClientRect: { top: 100 },
- },
- currentDiscussion: { id: 30 },
- isDiffsPage: false,
- });
- handler({
- ...defaultProcessableWrapper,
- isFirstUnresolved: true,
- entry: {
- ...defaultProcessableWrapper.entry,
- time: 100,
- isIntersecting: false,
- boundingClientRect: { top: 200 },
- },
- });
-
- jest.advanceTimersToNextTimer();
-
- expect(setMock.calls.length).toBe(4);
- expect(setMock.calls[0]).toEqual([1]);
- expect(setMock.calls[1]).toEqual([29]);
- expect(setMock.calls[2]).toEqual([null]);
- expect(setMock.calls[3]).toEqual([19]);
-
- expect(getMock.calls.length).toBe(2);
- expect(getMock.calls[0]).toEqual([30, false]);
- expect(getMock.calls[1]).toEqual([20, true]);
-
- [
- setMock.invocationCallOrder[0],
- getMock.invocationCallOrder[0],
- setMock.invocationCallOrder[1],
- setMock.invocationCallOrder[2],
- getMock.invocationCallOrder[1],
- setMock.invocationCallOrder[3],
- ].forEach((order, idx, list) => {
- // Compare each invocation sequence to the one before it (except the first one)
- expect(list[idx - 1] || -1).toBeLessThan(order);
- });
- });
- });
- });
-});