Files
VRCX/src/api/__tests__/favoriteQuerySync.test.js
2026-03-13 20:04:32 +09:00

61 lines
1.8 KiB
JavaScript

import { beforeEach, describe, expect, test, vi } from 'vitest';
const mockRequest = vi.fn();
const mockInvalidateQueries = vi.fn().mockResolvedValue();
const mockHandleFavoriteAdd = vi.fn();
const mockHandleFavoriteDelete = vi.fn();
const mockHandleFavoriteGroupClear = vi.fn();
vi.mock('../../services/request', () => ({
request: (...args) => mockRequest(...args)
}));
vi.mock('../../stores', () => ({
useUserStore: () => ({
currentUser: { id: 'usr_me' }
})
}));
vi.mock('../../coordinators/favoriteCoordinator', () => ({
handleFavoriteAdd: (...args) => mockHandleFavoriteAdd(...args),
handleFavoriteDelete: (...args) => mockHandleFavoriteDelete(...args),
handleFavoriteGroupClear: (...args) =>
mockHandleFavoriteGroupClear(...args)
}));
vi.mock('../../queries', () => ({
queryClient: {
invalidateQueries: (...args) => mockInvalidateQueries(...args)
}
}));
import favoriteRequest from '../favorite';
describe('favorite query sync', () => {
beforeEach(() => {
vi.clearAllMocks();
});
test('favorite mutations invalidate active favorite queries', async () => {
mockRequest.mockResolvedValue({ ok: true });
await favoriteRequest.addFavorite({ type: 'world', favoriteId: 'wrld_1' });
await favoriteRequest.deleteFavorite({ objectId: 'fav_1' });
await favoriteRequest.saveFavoriteGroup({
type: 'world',
group: 'worlds1',
displayName: 'Worlds'
});
await favoriteRequest.clearFavoriteGroup({
type: 'world',
group: 'worlds1'
});
expect(mockInvalidateQueries).toHaveBeenCalledTimes(4);
expect(mockInvalidateQueries).toHaveBeenCalledWith({
queryKey: ['favorite'],
refetchType: 'active'
});
});
});