@amsterdam/design-system-react
Version:
All React components from the Amsterdam Design System. Use it to compose pages in your website or application.
43 lines (42 loc) • 2.03 kB
JavaScript
import { describe, expect, it, vi } from 'vitest';
import { setCurrentSlideIdToVisibleSlide } from './setCurrentSlideIdToVisibleSlide';
describe('setCurrentSlideIdToVisibleSlide', () => {
it('calls setCurrentSlideId with the index of the intersecting element', () => {
const setCurrentSlideId = vi.fn();
const element1 = {};
const element2 = {};
const ref = { current: { children: [element1, element2] } };
const observations = [
{ isIntersecting: false, target: element1 },
{ isIntersecting: true, target: element2 },
];
setCurrentSlideIdToVisibleSlide({ observations, ref, setCurrentSlideId });
expect(setCurrentSlideId).toHaveBeenCalledWith(1);
});
it('does not call setCurrentSlideId if no element is intersecting', () => {
const setCurrentSlideId = vi.fn();
const element1 = {};
const element2 = {};
const ref = { current: { children: [element1, element2] } };
const observations = [
{ isIntersecting: false, target: element1 },
{ isIntersecting: false, target: element2 },
];
setCurrentSlideIdToVisibleSlide({ observations, ref, setCurrentSlideId });
expect(setCurrentSlideId).not.toHaveBeenCalled();
});
it('returns undefined for empty children array', () => {
const setCurrentSlideId = vi.fn();
const ref = { current: { children: [] } };
const observations = [{ isIntersecting: true, target: {} }];
const result = setCurrentSlideIdToVisibleSlide({ observations, ref, setCurrentSlideId });
expect(result).toBeUndefined();
});
it('returns undefined if ref.current is null', () => {
const setCurrentSlideId = vi.fn();
const ref = { current: null };
const observations = [{ isIntersecting: true, target: {} }];
const result = setCurrentSlideIdToVisibleSlide({ observations, ref, setCurrentSlideId });
expect(result).toBeUndefined();
});
});