169 lines
4.9 KiB
TypeScript
169 lines
4.9 KiB
TypeScript
import { jest, beforeEach, describe, expect, it } from '@jest/globals';
|
|
|
|
import spotPlayerStore, {
|
|
PANELS,
|
|
} from '../app/components/Spots/SpotPlayer/spotPlayerStore';
|
|
|
|
jest.mock('App/player', () => ({
|
|
getResourceFromNetworkRequest: jest.fn(),
|
|
Log: jest.fn((log: Record<string, any>) => ({
|
|
isRed: log.level === 'exception' || log.level === 'error',
|
|
isYellow: log.level === 'warn',
|
|
...log,
|
|
})),
|
|
}));
|
|
|
|
jest.mock('App/player-ui', () => ({
|
|
PlayingState: {
|
|
Playing: 0,
|
|
Paused: 1,
|
|
Completed: 2,
|
|
},
|
|
}));
|
|
|
|
enum PlayingState {
|
|
Playing,
|
|
Paused,
|
|
Completed,
|
|
}
|
|
|
|
const createSampleEvents = () => {
|
|
return {
|
|
logs: [{ time: 1000, level: 'info', msg: 'Test log message' }],
|
|
locations: [{ time: 2000, location: 'Test location', navTiming: {} }],
|
|
clicks: [{ time: 3000, label: 'Test click' }],
|
|
network: [
|
|
{
|
|
time: 4000,
|
|
type: 'fetch',
|
|
statusCode: 200,
|
|
url: 'https://example.com',
|
|
fromCache: false,
|
|
body: 'Response body',
|
|
encodedBodySize: 100,
|
|
responseBodySize: 100,
|
|
duration: 50,
|
|
method: 'GET',
|
|
},
|
|
],
|
|
};
|
|
};
|
|
|
|
describe('SpotPlayerStore', () => {
|
|
beforeEach(() => {
|
|
spotPlayerStore.clearData();
|
|
});
|
|
|
|
it('should initialize with default values', () => {
|
|
expect(spotPlayerStore.time).toBe(0);
|
|
expect(spotPlayerStore.isPlaying).toBe(true);
|
|
expect(spotPlayerStore.state).toBe(PlayingState.Playing);
|
|
expect(spotPlayerStore.volume).toBe(1);
|
|
expect(spotPlayerStore.logs).toEqual([]);
|
|
expect(spotPlayerStore.network).toEqual([]);
|
|
});
|
|
|
|
it('should clear all data on clearData()', () => {
|
|
spotPlayerStore.setDeviceData('Chrome', '1920x1080', 'Windows');
|
|
spotPlayerStore.setIsPlaying(false);
|
|
|
|
spotPlayerStore.clearData();
|
|
|
|
expect(spotPlayerStore.time).toBe(0);
|
|
expect(spotPlayerStore.isPlaying).toBe(true);
|
|
expect(spotPlayerStore.state).toBe(PlayingState.Playing);
|
|
expect(spotPlayerStore.browserVersion).toBeNull();
|
|
});
|
|
|
|
it('should set device data correctly', () => {
|
|
spotPlayerStore.setDeviceData('Firefox', '1366x768', 'Linux');
|
|
|
|
expect(spotPlayerStore.browserVersion).toBe('Firefox');
|
|
expect(spotPlayerStore.resolution).toBe('1366x768');
|
|
expect(spotPlayerStore.platform).toBe('Linux');
|
|
});
|
|
|
|
it('should set skip interval correctly', () => {
|
|
spotPlayerStore.setSkipInterval(15);
|
|
expect(spotPlayerStore.skipInterval).toBe(15);
|
|
});
|
|
|
|
it('should set active panel correctly', () => {
|
|
spotPlayerStore.setActivePanel(PANELS.CONSOLE);
|
|
expect(spotPlayerStore.activePanel).toBe(PANELS.CONSOLE);
|
|
|
|
spotPlayerStore.setActivePanel(null);
|
|
expect(spotPlayerStore.activePanel).toBeNull();
|
|
});
|
|
|
|
it('should set duration correctly', () => {
|
|
spotPlayerStore.setDuration('02:30');
|
|
expect(spotPlayerStore.duration).toBe(150);
|
|
expect(spotPlayerStore.durationString).toBe('02:30');
|
|
});
|
|
|
|
it('should update logs, locations, clicks, and network events correctly', () => {
|
|
const { logs, locations, clicks, network } = createSampleEvents();
|
|
|
|
// @ts-ignore
|
|
spotPlayerStore.setEvents(logs, locations, clicks, network);
|
|
|
|
expect(spotPlayerStore.logs.length).toBe(1);
|
|
expect(spotPlayerStore.locations.length).toBe(1);
|
|
expect(spotPlayerStore.clicks.length).toBe(1);
|
|
expect(spotPlayerStore.network.length).toBe(1);
|
|
});
|
|
|
|
it('should correctly compute the current log index', () => {
|
|
spotPlayerStore.logs = [{ time: 1000 }, { time: 2000 }, { time: 3000 }];
|
|
spotPlayerStore.time = 1.5;
|
|
|
|
const currentIndex = spotPlayerStore.currentLogIndex;
|
|
|
|
expect(currentIndex).toBe(0);
|
|
});
|
|
|
|
it('should correctly highlight the closest event', () => {
|
|
const eventTime = 2;
|
|
// @ts-ignore
|
|
spotPlayerStore.locations = [{ time: 1000 }, { time: 3000 }];
|
|
|
|
const closestLocation = spotPlayerStore.getClosestLocation(eventTime);
|
|
|
|
expect(closestLocation.time).toBe(1000);
|
|
});
|
|
|
|
it('should correctly set the playing state', () => {
|
|
spotPlayerStore.setIsPlaying(false);
|
|
expect(spotPlayerStore.isPlaying).toBe(false);
|
|
expect(spotPlayerStore.state).toBe(PlayingState.Paused);
|
|
|
|
spotPlayerStore.setIsPlaying(true);
|
|
expect(spotPlayerStore.isPlaying).toBe(true);
|
|
expect(spotPlayerStore.state).toBe(PlayingState.Playing);
|
|
});
|
|
|
|
it('should correctly mute and unmute', () => {
|
|
spotPlayerStore.setIsMuted(true);
|
|
expect(spotPlayerStore.isMuted).toBe(true);
|
|
|
|
spotPlayerStore.setIsMuted(false);
|
|
expect(spotPlayerStore.isMuted).toBe(false);
|
|
});
|
|
|
|
it('should correctly set volume', () => {
|
|
spotPlayerStore.setVolume(0.5);
|
|
expect(spotPlayerStore.volume).toBe(0.5);
|
|
|
|
spotPlayerStore.setVolume(1);
|
|
expect(spotPlayerStore.volume).toBe(1);
|
|
});
|
|
|
|
it('should correctly handle fullscreen toggle', () => {
|
|
spotPlayerStore.setIsFullScreen(true);
|
|
expect(spotPlayerStore.isFullScreen).toBe(true);
|
|
|
|
spotPlayerStore.setIsFullScreen(false);
|
|
expect(spotPlayerStore.isFullScreen).toBe(false);
|
|
});
|
|
});
|