diff --git a/jest.config.js b/jest.config.js index 6b5fb31..4dea621 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,5 +3,5 @@ module.exports = { "transform": { "^.+\\.(ts|tsx)$": "ts-jest" }, - "testTimeout": 30000 + "testTimeout": 300000 } \ No newline at end of file diff --git a/package.json b/package.json index 0083638..ca23d46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pokemon-tcg-sdk-typescript", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "description": "Typescript SDK for the PokemonTCG API (https://pokemontcg.io)", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/services/cardService.ts b/src/services/cardService.ts index 11a6e7f..ddb0b73 100644 --- a/src/services/cardService.ts +++ b/src/services/cardService.ts @@ -6,6 +6,25 @@ import { Subtype } from '../enums/subtype'; import { Rarity } from '../enums/rarity'; import { Client } from '../client'; +async function paginateAllCards(pageNumber: number, params?: Parameter): Promise { + let currentPage = pageNumber; + const client: Client = Client.getInstance(); + const response: Card[] = await client.get('cards', { pageSize: 250, page: currentPage, ...params }); + + if (response.length === 0) { + return response; + } else { + currentPage++; + return response.concat(await paginateAllCards(currentPage)); + } +} + +export async function getAllCards(params?: Parameter): Promise { + const startingPage = 1; + const response: Card[] = await paginateAllCards(startingPage, params); + return response; +} + export async function findCardByID(id: string): Promise { const client: Client = Client.getInstance(); const response: Card = await client.get('cards', id); @@ -18,13 +37,6 @@ export async function findCardsByQueries(params: Parameter): Promise { return response; } -export async function getAllCards(): Promise { - const params: Parameter = { pageSize: 250 }; - const client: Client = Client.getInstance(); - const response: Card[] = await client.get('cards', params); - return response; -} - export async function getTypes(): Promise { const client: Client = Client.getInstance(); diff --git a/test/cardService.test.ts b/test/cardService.test.ts index fdab088..da4cc42 100644 --- a/test/cardService.test.ts +++ b/test/cardService.test.ts @@ -1,4 +1,4 @@ -import { findCardByID, findCardsByQueries, getAllCards, getSupertypes, getSubtypes, getTypes, getRarities } from "../src/services/cardService"; +import { findCardByID, findCardsByQueries, getSupertypes, getSubtypes, getTypes, getRarities } from "../src/services/cardService"; import { Parameter } from "../src/interfaces/parameter"; import { Card } from "../src/interfaces/card"; import { Type } from '../src/enums/type'; @@ -19,9 +19,10 @@ describe('Card Service', () => { expect(result.name).toEqual('Gardevoir'); }) - it('should get a default list of cards using the cards resource with no query params', async () => { - const results: Card[] = await getAllCards(); - expect(results).toHaveLength(250); + it('should get a maximum of 250 cards given a page number by default', async () => { + const totalCards = 250 + const results: Card[] = await findCardsByQueries({ page: 1}); + expect(results).toHaveLength(totalCards); }); it('should get a list of card supertypes', async () => {