import { beforeEach, describe, expect, it, vi } from 'vitest' import { StickerUsersApi } from './StickerUsersApi' import type { ApiClient } from '../../core/ApiClient' import type { StickerUser } from './types' import type { Paginated } from '../../core/types' // ── Mock client factory ────────────────────────────────────────────── function createMockClient(): ApiClient { return { setAccessToken: vi.fn().mockReturnThis(), request: vi.fn(), get: vi.fn(), post: vi.fn(), put: vi.fn(), patch: vi.fn(), delete: vi.fn(), } } // ── Fixtures ───────────────────────────────────────────────────────── const stickerUser: StickerUser = { stickerId: 'sticker-1', userId: 'user-1', accountId: 'acc-1', lastSendAt: '2024-01-01T00:00:00Z', createdAt: '2024-01-01T00:00:00Z', updatedAt: '2024-01-01T00:00:00Z', } const paginated: Paginated = { data: [stickerUser], total: 1, limit: 10, skip: 0, currentPage: 1, lastPage: 1, from: 1, to: 1, } // ── Tests ──────────────────────────────────────────────────────────── describe('StickerUsersApi', () => { let client: ReturnType let api: StickerUsersApi beforeEach(() => { client = createMockClient() api = new StickerUsersApi(client) }) // ── getMany ────────────────────────────────────────────────────── describe('getMany', () => { it('calls client.get with /sticker-users when no query is provided', async () => { vi.mocked(client.get).mockResolvedValue(paginated) const result = await api.getMany() expect(client.get).toHaveBeenCalledWith('/sticker-users', undefined) expect(result).toEqual(paginated) }) it('serializes query parameters', async () => { vi.mocked(client.get).mockResolvedValue(paginated) await api.getMany({ page: 2, perPage: 5 }) const url = vi.mocked(client.get).mock.calls[0][0] as string expect(url).toContain('/sticker-users?') expect(url).toContain('page=2') }) it('forwards custom headers', async () => { vi.mocked(client.get).mockResolvedValue(paginated) const headers = { 'X-Custom': 'h' } await api.getMany(undefined, headers) expect(client.get).toHaveBeenCalledWith('/sticker-users', headers) }) it('propagates errors from client.get', async () => { vi.mocked(client.get).mockRejectedValue(new Error('Forbidden')) await expect(api.getMany()).rejects.toThrow('Forbidden') }) }) })