Co-Study4Grid / frontend /src /utils /smoothPanZoom.test.ts
github-actions[bot]
Deploy 7688ef1
13d4e44
Raw
History Blame Contribute Delete
2.49 kB
// Copyright (c) 2025-2026, RTE (https://www.rte-france.com)
// This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0.
// If a copy of the Mozilla Public License, version 2.0 was not distributed with this file,
// you can obtain one at http://mozilla.org/MPL/2.0/.
// SPDX-License-Identifier: MPL-2.0
import { describe, it, expect, beforeEach, vi } from 'vitest';
import {
isSmoothPanZoomEnabled,
setSmoothPanZoomEnabled,
getSmoothPanZoomMode,
setSmoothPanZoomMode,
} from './smoothPanZoom';
import { interactionLogger } from './interactionLogger';
describe('smoothPanZoom preference singleton', () => {
beforeEach(() => {
localStorage.clear();
setSmoothPanZoomMode('off');
});
it('defaults to OFF', () => {
expect(getSmoothPanZoomMode()).toBe('off');
expect(isSmoothPanZoomEnabled()).toBe(false);
});
it('persists each mode to localStorage and reads it back', () => {
setSmoothPanZoomMode('gpu');
expect(getSmoothPanZoomMode()).toBe('gpu');
expect(isSmoothPanZoomEnabled()).toBe(true);
expect(localStorage.getItem('cs4g-smooth-pan-zoom')).toBe('gpu');
setSmoothPanZoomMode('bitmap');
expect(getSmoothPanZoomMode()).toBe('bitmap');
expect(isSmoothPanZoomEnabled()).toBe(true);
expect(localStorage.getItem('cs4g-smooth-pan-zoom')).toBe('bitmap');
setSmoothPanZoomMode('off');
expect(getSmoothPanZoomMode()).toBe('off');
expect(isSmoothPanZoomEnabled()).toBe(false);
expect(localStorage.getItem('cs4g-smooth-pan-zoom')).toBe('off');
});
it('back-compat boolean setter maps true→gpu, false→off', () => {
setSmoothPanZoomEnabled(true);
expect(getSmoothPanZoomMode()).toBe('gpu');
setSmoothPanZoomEnabled(false);
expect(getSmoothPanZoomMode()).toBe('off');
});
it('notifies + logs only on a real change, with enabled + mode', () => {
const spy = vi.spyOn(interactionLogger, 'record');
setSmoothPanZoomMode('bitmap');
setSmoothPanZoomMode('bitmap'); // no-op, same value
setSmoothPanZoomMode('off');
const calls = spy.mock.calls.filter(([t]) => t === 'smooth_pan_zoom_toggled');
expect(calls).toHaveLength(2);
expect(calls[0][1]).toEqual({ enabled: true, mode: 'bitmap' });
expect(calls[1][1]).toEqual({ enabled: false, mode: 'off' });
spy.mockRestore();
});
});