import { ExternalStateUpdater } from '../../components/core-player/components/ExternalStateUpdater';
import { MediaProviderProps, useMediaStore } from '../../context';
import { useMediaListener } from '../../hooks';
import { MediaType } from '../../types';
import { act, setupMediaProvider } from '../../utils/testing-render';
const setupMediaType = (mediaProviderProps: {
isAudio: boolean;
mediaType: MediaType;
}) => {
const setupResults = setupMediaProvider(
,
);
return setupResults;
};
const setupHandleProgress = (
mediaProviderProps?: Partial,
) => {
const returnVal: Array = [];
function NullComponent() {
const listener = useMediaStore(state => state.getListener());
// listen to all events
useMediaListener(
'*',
event => {
returnVal.push(event);
},
listener,
);
return null;
}
const setupResults = setupMediaProvider(
,
mediaProviderProps,
);
return { ...setupResults, events: returnVal };
};
describe('media-store', () => {
describe('_handleProgress', () => {
it('emit onTimeAlarm', () => {
const { mediaStore, events } = setupHandleProgress({
alarms: [3, 4, 5],
});
act(() => mediaStore.play());
act(() => mediaStore.setDuration(6));
act(() => mediaStore._handleProgress(0));
expect(events.includes('onTimeAlarm')).toBeFalsy();
act(() => mediaStore._handleProgress(1));
expect(events.includes('onTimeAlarm')).toBeFalsy();
act(() => mediaStore._handleProgress(2));
expect(events.includes('onTimeAlarm')).toBeFalsy();
act(() => mediaStore._handleProgress(3));
expect(events.includes('onTimeAlarm')).toBeFalsy();
act(() => mediaStore._handleProgress(3.01));
expect(events.includes('onTimeAlarm')).toBeTruthy();
});
});
describe('mediaType', () => {
it('initializes state based on properties', () => {
const { mediaStore } = setupMediaType({
mediaType: 'audio',
isAudio: true,
});
expect(mediaStore.mediaType).toBe('audio');
expect(mediaStore.isAudio).toBeTruthy();
});
it('updates initialized state when setters are called', () => {
const { mediaStore } = setupMediaType({
mediaType: 'audio',
isAudio: true,
});
act(() => mediaStore.setMediaType('video'));
expect(mediaStore.mediaType).toBe('video');
act(() => mediaStore.setIsAudio(false));
expect(mediaStore.isAudio).toBeFalsy();
act(() => mediaStore.setMediaType('unknown'));
expect(mediaStore.mediaType).toBe('unknown');
});
});
});