87 lines
2.7 KiB
JavaScript
87 lines
2.7 KiB
JavaScript
import { dispatchCacheRevalidations } from '../../CacheHelper/dispatchCacheRevalidations';
|
|
import InboxesAPI from 'dashboard/api/inboxes';
|
|
import LabelsAPI from 'dashboard/api/labels';
|
|
import TeamsAPI from 'dashboard/api/teams';
|
|
|
|
vi.mock('dashboard/api/inboxes', () => ({
|
|
default: {
|
|
validateCacheKey: vi.fn(),
|
|
refetchAndCommit: vi.fn(),
|
|
extractDataFromResponse: vi.fn(),
|
|
},
|
|
}));
|
|
vi.mock('dashboard/api/labels', () => ({
|
|
default: {
|
|
validateCacheKey: vi.fn(),
|
|
refetchAndCommit: vi.fn(),
|
|
extractDataFromResponse: vi.fn(),
|
|
},
|
|
}));
|
|
vi.mock('dashboard/api/teams', () => ({
|
|
default: {
|
|
validateCacheKey: vi.fn(),
|
|
refetchAndCommit: vi.fn(),
|
|
extractDataFromResponse: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
describe('dispatchCacheRevalidations', () => {
|
|
let store;
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
store = { commit: vi.fn() };
|
|
});
|
|
|
|
it('refetches stale models and commits via their setMutation', async () => {
|
|
InboxesAPI.validateCacheKey.mockResolvedValue(false);
|
|
InboxesAPI.refetchAndCommit.mockResolvedValue({ data: { payload: [] } });
|
|
InboxesAPI.extractDataFromResponse.mockReturnValue([{ id: 1 }]);
|
|
LabelsAPI.validateCacheKey.mockResolvedValue(true);
|
|
|
|
await dispatchCacheRevalidations(store, {
|
|
inbox: 'inbox-key',
|
|
label: 'label-key',
|
|
});
|
|
|
|
expect(InboxesAPI.refetchAndCommit).toHaveBeenCalledWith('inbox-key');
|
|
expect(store.commit).toHaveBeenCalledWith('inboxes/SET_INBOXES', [
|
|
{ id: 1 },
|
|
]);
|
|
expect(LabelsAPI.refetchAndCommit).not.toHaveBeenCalled();
|
|
expect(store.commit).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('skips models absent from the key payload', async () => {
|
|
InboxesAPI.validateCacheKey.mockResolvedValue(true);
|
|
|
|
await dispatchCacheRevalidations(store, { inbox: 'inbox-key' });
|
|
|
|
expect(TeamsAPI.validateCacheKey).not.toHaveBeenCalled();
|
|
expect(store.commit).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('treats missing keys as an empty payload', async () => {
|
|
await dispatchCacheRevalidations(store);
|
|
|
|
expect(InboxesAPI.validateCacheKey).not.toHaveBeenCalled();
|
|
expect(store.commit).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('swallows per-model errors so one failure does not block the rest', async () => {
|
|
InboxesAPI.validateCacheKey.mockResolvedValue(false);
|
|
InboxesAPI.refetchAndCommit.mockRejectedValue(new Error('network down'));
|
|
TeamsAPI.validateCacheKey.mockResolvedValue(false);
|
|
TeamsAPI.refetchAndCommit.mockResolvedValue({ data: [] });
|
|
TeamsAPI.extractDataFromResponse.mockReturnValue([{ id: 7 }]);
|
|
|
|
await dispatchCacheRevalidations(store, {
|
|
inbox: 'inbox-key',
|
|
team: 'team-key',
|
|
});
|
|
|
|
expect(store.commit).toHaveBeenCalledWith('teams/SET_TEAMS', [{ id: 7 }]);
|
|
expect(store.commit).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|