diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32c3871..d448ea1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,24 @@ on: branches: ["main"] jobs: - build: + static-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + with: + node-version-file: ".node-version" + cache: "npm" + - run: npm ci + - name: Format Check + run: npm run format + - name: Lint + run: npm run lint + - name: Type Check + run: npm run typecheck + + build-and-test: runs-on: ubuntu-latest strategy: @@ -26,5 +43,7 @@ jobs: node-version: ${{ matrix.node-version }} cache: "npm" - run: npm ci - - run: npm run build - - run: npm test + - name: Build + run: npm run build + - name: Unit Tests + run: npm run test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fac5398..f1f8d76 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,6 +18,7 @@ jobs: run: | npm ci npm run lint + npm run typecheck npm run test npm run build - run: npm publish diff --git a/package.json b/package.json index 9441209..ede0c67 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,11 @@ "scripts": { "build": "tsup", "postbuild": "mkdir -p ./dist/umd/ && cp -pR ./dist/iife/* ./dist/umd", - "lint": "eslint ./src", - "lint:fix": "eslint --fix ./src", + "lint": "eslint ./src ./tests", + "lint:fix": "eslint --fix ./src ./tests", + "format": "prettier --check ./src ./tests", + "format:fix": "prettier --write ./src ./tests", + "typecheck": "tsc --noEmit", "test": "jest --coverage=false", "test:coverage": "jest --coverage=true" }, diff --git a/tests/get.test.ts b/tests/get.test.ts index 1fb1be8..8bb7335 100644 --- a/tests/get.test.ts +++ b/tests/get.test.ts @@ -58,15 +58,22 @@ describe('get', () => { test('Return error message in case of server error', () => { // Create temporary server error server.use( - http.get(`${testBaseUrl}/list-type`, () => { - return HttpResponse.json({ message: 'Internal Server Error' }, { status: 500 }); - }, { once: true }) + http.get( + `${testBaseUrl}/list-type`, + () => { + return HttpResponse.json( + { message: 'Internal Server Error' }, + { status: 500 }, + ); + }, + { once: true }, + ), ); expect(client.get({ endpoint: 'list-type' })).rejects.toThrow( new Error( - 'fetch API response status: 500\n message is `Internal Server Error`' - ) + 'fetch API response status: 500\n message is `Internal Server Error`', + ), ); }); }); diff --git a/tests/getAllContentIds.test.ts b/tests/getAllContentIds.test.ts index a30d4aa..1c62e90 100644 --- a/tests/getAllContentIds.test.ts +++ b/tests/getAllContentIds.test.ts @@ -15,18 +15,32 @@ describe('getAllContentIds', () => { test('should fetch all content ids', async () => { server.use( - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { totalCount: 100, - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map((_, index) => ({ id: `id${index}` })), - }, { status: 200 }); - }, { once: true }), + .fill(null) + .map((_, index) => ({ id: `id${index}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), ); const result = await client.getAllContentIds({ @@ -40,32 +54,60 @@ describe('getAllContentIds', () => { test('should handle pagination and fetch more than limit', async () => { server.use( - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { totalCount: 250, - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map((_, index) => ({ id: `id${index}` })), - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + .fill(null) + .map((_, index) => ({ id: `id${index}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map((_, index) => ({ id: `id${index + 100}` })), - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + .fill(null) + .map((_, index) => ({ id: `id${index + 100}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { contents: Array(50) - .fill(null) - .map((_, index) => ({ id: `id${index + 200}` })), - }, { status: 200 }); - }, { once: true }), + .fill(null) + .map((_, index) => ({ id: `id${index + 200}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), ); const result = await client.getAllContentIds({ @@ -79,18 +121,32 @@ describe('getAllContentIds', () => { test('should fetch all content ids with alternateField field', async () => { server.use( - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { totalCount: 100, - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map((_, index) => ({ url: `id${index}` })), - }, { status: 200 }); - }, { once: true }), + .fill(null) + .map((_, index) => ({ url: `id${index}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), ); const result = await client.getAllContentIds({ @@ -105,18 +161,34 @@ describe('getAllContentIds', () => { test('should throw error when alternateField field is not string', async () => { server.use( - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { totalCount: 100, - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContentIds-list-type`, () => { - return HttpResponse.json({ + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContentIds-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map(() => ({ image: { url: 'url', width: 100, height: 100 } })), - }, { status: 200 }); - }, { once: true }), + .fill(null) + .map(() => ({ + image: { url: 'url', width: 100, height: 100 }, + })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), ); await expect( diff --git a/tests/getAllContents.test.ts b/tests/getAllContents.test.ts index 159bcf5..b4ca587 100644 --- a/tests/getAllContents.test.ts +++ b/tests/getAllContents.test.ts @@ -15,18 +15,32 @@ describe('getAllContents', () => { test('should fetch all contents', async () => { server.use( - http.get(`${testBaseUrl}/getAllContents-list-type`, () => { - return HttpResponse.json({ + http.get( + `${testBaseUrl}/getAllContents-list-type`, + () => { + return HttpResponse.json( + { totalCount: 100, - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContents-list-type`, () => { - return HttpResponse.json({ + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContents-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map((_, index) => ({ id: `id${index}` })), - }, { status: 200 }); - }, { once: true }), + .fill(null) + .map((_, index) => ({ id: `id${index}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), ); const result = await client.getAllContents({ @@ -40,32 +54,60 @@ describe('getAllContents', () => { test('should handle pagination and fetch more than limit', async () => { server.use( - http.get(`${testBaseUrl}/getAllContents-list-type`, () => { - return HttpResponse.json({ + http.get( + `${testBaseUrl}/getAllContents-list-type`, + () => { + return HttpResponse.json( + { totalCount: 250, - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContents-list-type`, () => { - return HttpResponse.json({ + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContents-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map((_, index) => ({ id: `id${index}` })), - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContents-list-type`, () => { - return HttpResponse.json({ + .fill(null) + .map((_, index) => ({ id: `id${index}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContents-list-type`, + () => { + return HttpResponse.json( + { contents: Array(100) - .fill(null) - .map((_, index) => ({ id: `id${index + 100}` })), - }, { status: 200 }); - }, { once: true }), - http.get(`${testBaseUrl}/getAllContents-list-type`, () => { - return HttpResponse.json({ + .fill(null) + .map((_, index) => ({ id: `id${index + 100}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), + http.get( + `${testBaseUrl}/getAllContents-list-type`, + () => { + return HttpResponse.json( + { contents: Array(50) - .fill(null) - .map((_, index) => ({ id: `id${index + 200}` })), - }, { status: 200 }); - }, { once: true }), + .fill(null) + .map((_, index) => ({ id: `id${index + 200}` })), + }, + { status: 200 }, + ); + }, + { once: true }, + ), ); const result = await client.getAllContents({