UNPKG

@licht-77/dmm-sdk

Version:

DMM Affiliate API v3 SDK for Node.js/TypeScript

142 lines 6.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const helperClient_1 = require("./helperClient"); const client_1 = require("./client"); // DmmApiClient のモックインスタンスを保持するための変数 let mockDmmApiClientInstance; vitest_1.vi.mock('./client', async (importOriginal) => { const actual = await importOriginal(); const MockDmmApiClientConstructor = vitest_1.vi.fn(); const mockGetItemList = vitest_1.vi.fn(); // 他のメソッドのモックも必要に応じてここに追加 MockDmmApiClientConstructor.mockImplementation((_options) => { mockDmmApiClientInstance = { getItemList: mockGetItemList, // 他のモックメソッド }; // DmmApiClientの完全なモックではないためanyでキャスト return mockDmmApiClientInstance; }); return { ...actual, // 元のモジュールの他のエクスポートを維持 DmmApiClient: MockDmmApiClientConstructor, }; }); // モックされたDmmApiClientのコンストラクタを取得 const MockedDmmApiClientConstructor = client_1.DmmApiClient; (0, vitest_1.describe)('DmmApiHelperClient', () => { let enhancedClient; // モックインスタンスをテスト内で参照するための変数 let capturedMockRawClient; const mockOptions = { apiId: 'test-api-id', affiliateId: 'test-affiliate-id', }; (0, vitest_1.beforeEach)(() => { // モックをクリア MockedDmmApiClientConstructor.mockClear(); // オプショナルチェーンを使用 mockDmmApiClientInstance?.getItemList?.mockClear(); // 他のモックメソッドもクリア enhancedClient = new helperClient_1.DmmApiHelperClient(mockOptions); capturedMockRawClient = mockDmmApiClientInstance; }); (0, vitest_1.it)('should instantiate DmmApiClient with correct options', () => { (0, vitest_1.expect)(MockedDmmApiClientConstructor).toHaveBeenCalledTimes(1); (0, vitest_1.expect)(MockedDmmApiClientConstructor).toHaveBeenCalledWith(mockOptions); }); (0, vitest_1.it)('should return the raw DmmApiClient instance', () => { (0, vitest_1.expect)(enhancedClient.api()).toBe(capturedMockRawClient); }); (0, vitest_1.describe)('getItemById', () => { const testCid = 'testitem123'; const mockItem = { service_code: 'digital', service_name: '動画', floor_code: 'videoa', floor_name: 'ビデオ', category_name: 'テストカテゴリ', content_id: testCid, product_id: 'abcde12345', title: 'テスト商品', URL: `https://example.com/product/${testCid}/`, affiliateURL: `https://affiliate.example.com/?cid=${testCid}`, date: '2024-01-01 00:00:00', imageURL: { small: 'small.jpg', list: 'list.jpg', large: 'large.jpg' }, sampleImageURL: { sample_s: { image: ['s1.jpg'] } }, iteminfo: { maker: [{ id: 1, name: 'Test Maker' }], actress: [{ id: 1, name: 'Test Actress' }], director: [{ id: 1, name: 'Test Director' }], series: [{ id: 1, name: 'Test Series' }], label: [{ id: 1, name: 'Test Label' }], genre: [{ id: 1, name: 'Test Genre' }] // 他に iteminfo に必要なプロパティがあればここに追加 } }; (0, vitest_1.it)('should call getItemList with correct parameters and return the item', async () => { const mockResponse = { result_count: 1, total_count: 1, first_position: 1, items: [mockItem], }; capturedMockRawClient.getItemList.mockResolvedValue(mockResponse); const item = await enhancedClient.getItemById(testCid); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledTimes(1); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledWith({ cid: testCid, hits: 1, offset: 1, }); (0, vitest_1.expect)(item).toEqual(mockItem); }); (0, vitest_1.it)('should call getItemList with additional options', async () => { const mockResponse = { result_count: 1, total_count: 1, first_position: 1, items: [mockItem], }; capturedMockRawClient.getItemList.mockResolvedValue(mockResponse); const options = { site: 'FANZA', service: 'digital' }; await enhancedClient.getItemById(testCid, options); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledTimes(1); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledWith({ ...options, cid: testCid, hits: 1, offset: 1, }); }); (0, vitest_1.it)('should return null if getItemList returns no items', async () => { const mockResponse = { result_count: 0, total_count: 0, first_position: 0, items: [], }; capturedMockRawClient.getItemList.mockResolvedValue(mockResponse); const item = await enhancedClient.getItemById(testCid); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledTimes(1); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledWith({ cid: testCid, hits: 1, offset: 1, }); (0, vitest_1.expect)(item).toBeNull(); }); (0, vitest_1.it)('should throw an error if getItemList throws an error', async () => { const testError = new Error('API Error'); capturedMockRawClient.getItemList.mockRejectedValue(testError); await (0, vitest_1.expect)(enhancedClient.getItemById(testCid)).rejects.toThrow(testError); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledTimes(1); (0, vitest_1.expect)(capturedMockRawClient.getItemList).toHaveBeenCalledWith({ cid: testCid, hits: 1, offset: 1, }); }); }); }); //# sourceMappingURL=helperClient.test.js.map