agent-ecosystem/test/renderer/store/teamLocalStateEpoch.test.ts

57 lines
2 KiB
TypeScript

import { afterEach, describe, expect, it } from 'vitest';
import {
captureTeamLocalStateEpoch,
clearAllTeamLocalStateEpochs,
clearTeamLocalStateEpoch,
hasTeamLocalStateEpoch,
invalidateTeamLocalStateEpoch,
isTeamLocalStateEpochCurrent,
} from '../../../src/renderer/store/team/teamLocalStateEpoch';
afterEach(() => {
clearAllTeamLocalStateEpochs();
});
describe('teamLocalStateEpoch', () => {
it('starts missing teams at epoch zero without materializing an entry', () => {
expect(captureTeamLocalStateEpoch('my-team')).toBe(0);
expect(isTeamLocalStateEpochCurrent('my-team', 0)).toBe(true);
expect(hasTeamLocalStateEpoch('my-team')).toBe(false);
});
it('increments epochs independently per team', () => {
invalidateTeamLocalStateEpoch('my-team');
invalidateTeamLocalStateEpoch('my-team');
invalidateTeamLocalStateEpoch('other-team');
expect(captureTeamLocalStateEpoch('my-team')).toBe(2);
expect(captureTeamLocalStateEpoch('other-team')).toBe(1);
expect(isTeamLocalStateEpochCurrent('my-team', 1)).toBe(false);
expect(isTeamLocalStateEpochCurrent('my-team', 2)).toBe(true);
});
it('clears one team epoch without touching other teams', () => {
invalidateTeamLocalStateEpoch('my-team');
invalidateTeamLocalStateEpoch('other-team');
clearTeamLocalStateEpoch('my-team');
expect(captureTeamLocalStateEpoch('my-team')).toBe(0);
expect(hasTeamLocalStateEpoch('my-team')).toBe(false);
expect(captureTeamLocalStateEpoch('other-team')).toBe(1);
expect(hasTeamLocalStateEpoch('other-team')).toBe(true);
});
it('clears all materialized epochs', () => {
invalidateTeamLocalStateEpoch('my-team');
invalidateTeamLocalStateEpoch('other-team');
clearAllTeamLocalStateEpochs();
expect(hasTeamLocalStateEpoch('my-team')).toBe(false);
expect(hasTeamLocalStateEpoch('other-team')).toBe(false);
expect(captureTeamLocalStateEpoch('my-team')).toBe(0);
expect(captureTeamLocalStateEpoch('other-team')).toBe(0);
});
});