@licht-77/dmm-sdk
Version:
DMM Affiliate API v3 SDK for Node.js/TypeScript
142 lines • 6.63 kB
JavaScript
;
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