78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
import { ChatActivityStore } from '$lib/stores/chat/activity.svelte';
|
|
import { beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
describe('ChatActivityStore', () => {
|
|
let store: ChatActivityStore;
|
|
|
|
beforeEach(() => {
|
|
store = new ChatActivityStore();
|
|
});
|
|
|
|
it('starts with no local or remote activity', () => {
|
|
expect(store.loadingConvs).toEqual([]);
|
|
expect(store.isLocal('a')).toBe(false);
|
|
expect(store.isRemote('a')).toBe(false);
|
|
});
|
|
|
|
it('markLocal adds a conv to the local set and the loading union', () => {
|
|
store.markLocal('a');
|
|
|
|
expect(store.isLocal('a')).toBe(true);
|
|
expect(store.isRemote('a')).toBe(false);
|
|
expect(store.loadingConvs).toEqual(['a']);
|
|
});
|
|
|
|
it('localEnded removes a local conv', () => {
|
|
store.markLocal('a');
|
|
store.localEnded('a');
|
|
|
|
expect(store.isLocal('a')).toBe(false);
|
|
expect(store.loadingConvs).toEqual([]);
|
|
});
|
|
|
|
it('localEnded also drops a stale remote hint for the same conv', () => {
|
|
store.markLocal('a');
|
|
store.applyRemoteSnapshot(['a']);
|
|
expect(store.isRemote('a')).toBe(true);
|
|
|
|
store.localEnded('a');
|
|
|
|
expect(store.isLocal('a')).toBe(false);
|
|
expect(store.isRemote('a')).toBe(false);
|
|
expect(store.loadingConvs).toEqual([]);
|
|
});
|
|
|
|
it('applyRemoteSnapshot adds remote convs and unions them with local', () => {
|
|
store.markLocal('local');
|
|
store.applyRemoteSnapshot(['remote']);
|
|
|
|
expect(store.isRemote('remote')).toBe(true);
|
|
expect(store.loadingConvs).toEqual(['local', 'remote']);
|
|
});
|
|
|
|
it('applyRemoteSnapshot removes remote convs missing from the snapshot', () => {
|
|
store.applyRemoteSnapshot(['a', 'b']);
|
|
store.applyRemoteSnapshot(['a']);
|
|
|
|
expect(store.isRemote('a')).toBe(true);
|
|
expect(store.isRemote('b')).toBe(false);
|
|
expect(store.loadingConvs).toEqual(['a']);
|
|
});
|
|
|
|
it('applyRemoteSnapshot keeps local convs absent from the snapshot', () => {
|
|
store.markLocal('local');
|
|
store.applyRemoteSnapshot(['remote']);
|
|
store.applyRemoteSnapshot([]);
|
|
|
|
expect(store.isLocal('local')).toBe(true);
|
|
expect(store.loadingConvs).toEqual(['local']);
|
|
});
|
|
|
|
it('loadingConvs does not duplicate a conv that is both local and remote', () => {
|
|
store.markLocal('a');
|
|
store.applyRemoteSnapshot(['a']);
|
|
|
|
expect(store.loadingConvs).toEqual(['a']);
|
|
});
|
|
});
|