@amsterdam/design-system-react
Version:
All React components from the Amsterdam Design System. Use it to compose pages in your website or application.
48 lines (47 loc) • 2.4 kB
JavaScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { scrollToCurrentSlideOnResize } from './scrollToCurrentSlideOnResize';
import * as scrollUtils from './scrollToSlide';
vi.mock('./scrollToSlide');
describe('scrollToCurrentSlideOnResize', () => {
const createRef = (options) => {
const { offsetLeft = 0, scrollLeft = 0, withElement = true } = options;
const currentSlideElement = withElement ? { offsetLeft } : null;
const scrollerElement = withElement ? { children: [currentSlideElement], scrollLeft } : null;
return {
currentSlideElement,
ref: { current: scrollerElement },
};
};
beforeEach(() => {
vi.clearAllMocks();
});
it('calls scrollToSlide if the current slide is not in view', () => {
const scrollToSlide = vi.fn();
vi.mocked(scrollUtils.scrollToSlide).mockImplementation(scrollToSlide);
const { ref } = createRef({ offsetLeft: 100, scrollLeft: 0, withElement: true });
scrollToCurrentSlideOnResize({ currentSlideId: 0, ref });
expect(scrollToSlide).toHaveBeenCalledWith(0, ref);
});
it('does not call scrollToSlide if scrollerRef.current is null', () => {
const scrollToSlide = vi.fn();
vi.mocked(scrollUtils.scrollToSlide).mockImplementation(scrollToSlide);
const { ref } = createRef({ withElement: false });
scrollToCurrentSlideOnResize({ currentSlideId: 0, ref });
expect(scrollToSlide).not.toHaveBeenCalled();
});
it('does not call scrollToSlide if currentSlideElement is null', () => {
const scrollToSlide = vi.fn();
vi.mocked(scrollUtils.scrollToSlide).mockImplementation(scrollToSlide);
const scrollerElement = { children: [null], scrollLeft: 0 };
const ref = { current: scrollerElement };
scrollToCurrentSlideOnResize({ currentSlideId: 0, ref });
expect(scrollToSlide).not.toHaveBeenCalled();
});
it('does not call scrollToSlide if the slide is already in view', () => {
const scrollToSlide = vi.fn();
vi.mocked(scrollUtils.scrollToSlide).mockImplementation(scrollToSlide);
const { ref } = createRef({ offsetLeft: 100, scrollLeft: 100, withElement: true });
scrollToCurrentSlideOnResize({ currentSlideId: 0, ref });
expect(scrollToSlide).not.toHaveBeenCalled();
});
});