MeshiTrack/packages/web/tests/services/households.test.ts

53 lines
1.6 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from 'vitest';
const { mockGet, mockPost, mockPatch } = vi.hoisted(() => ({
mockGet: vi.fn(),
mockPost: vi.fn(),
mockPatch: vi.fn(),
}));
vi.mock('../../src/services/api-client', () => ({
apiClient: { get: mockGet, post: mockPost, patch: mockPatch },
}));
import {
createHousehold,
getHousehold,
updateHousehold,
generateInviteCode,
joinHousehold,
} from '../../src/services/households';
beforeEach(() => vi.clearAllMocks());
describe('households service', () => {
it('createHousehold calls POST', async () => {
mockPost.mockResolvedValue({ _id: 'hh1' });
await createHousehold('My Home');
expect(mockPost).toHaveBeenCalledWith('/households', { name: 'My Home' });
});
it('getHousehold calls GET', async () => {
mockGet.mockResolvedValue({ _id: 'hh1' });
await getHousehold('hh1');
expect(mockGet).toHaveBeenCalledWith('/households/hh1');
});
it('updateHousehold calls PATCH', async () => {
mockPatch.mockResolvedValue({ _id: 'hh1' });
await updateHousehold('hh1', { name: 'Updated' });
expect(mockPatch).toHaveBeenCalledWith('/households/hh1', { name: 'Updated' });
});
it('generateInviteCode calls POST', async () => {
mockPost.mockResolvedValue({ _id: 'hh1' });
await generateInviteCode('hh1');
expect(mockPost).toHaveBeenCalledWith('/households/hh1/invite');
});
it('joinHousehold calls POST with invite code', async () => {
mockPost.mockResolvedValue({ _id: 'hh1' });
await joinHousehold('ABC123');
expect(mockPost).toHaveBeenCalledWith('/households/join', { inviteCode: 'ABC123' });
});
});