diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f68785b..d448ea1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,26 +5,45 @@ name: Node.js CI on: push: - branches: ['main'] + branches: ["main"] pull_request: - branches: ['main'] + 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: matrix: - node-version: [18.x, 20.x] + node-version: [18.x, 20.x, 22.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: ${{ matrix.node-version }} - cache: 'npm' + 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 e86041c..f1f8d76 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,21 +3,22 @@ name: release on: push: tags: - - 'v*' + - "v*" jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: - node-version: '18.x' - registry-url: 'https://registry.npmjs.org' + node-version-file: ".node-version" + registry-url: "https://registry.npmjs.org" - name: release on npm 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({