refactor(test): some small polishments (#10603)

* test: full message

* refactor: consistent indentation

* docs: remove extraneous comment

* test: more cases
This commit is contained in:
Khải
2026-02-13 04:54:13 +07:00
committed by GitHub
parent 3e0a9acf5f
commit 52556a858a
3 changed files with 56 additions and 20 deletions

View File

@@ -125,7 +125,7 @@ describe('fetchAuthToken', () => {
await expect(promise).rejects.toHaveProperty(['code'], 'ERR_PNPM_AUTH_TOKEN_FETCH')
})
test('throws AuthTokenExchangeError when response is not ok', async () => {
test('throws AuthTokenExchangeError when response is not ok and returns a payload of error', async () => {
const mockFetch = jest.fn(async () => ({
ok: false,
status: 401,
@@ -142,6 +142,35 @@ describe('fetchAuthToken', () => {
await expect(promise).rejects.toHaveProperty(['httpStatus'], 401)
await expect(promise).rejects.toHaveProperty(['errorResponse', 'body', 'message'], 'Unauthorized')
await expect(promise).rejects.toHaveProperty(['code'], 'ERR_PNPM_AUTH_TOKEN_EXCHANGE')
await expect(promise).rejects.toHaveProperty(
['message'],
'Failed token exchange request with body message: Unauthorized (status code 401)'
)
})
test('throws AuthTokenExchangeError when response is not ok and the returned payload could not be fetched', async () => {
const mockFetch = jest.fn(async () => ({
ok: false,
status: 401,
json: async () => {
throw new Error('no json')
},
}))
const context: AuthTokenContext = {
fetch: mockFetch,
}
const promise = fetchAuthToken({ context, idToken, packageName, registry })
await expect(promise).rejects.toBeInstanceOf(AuthTokenExchangeError)
await expect(promise).rejects.toHaveProperty(['httpStatus'], 401)
await expect(promise).rejects.toHaveProperty(['errorResponse'], undefined)
await expect(promise).rejects.toHaveProperty(['code'], 'ERR_PNPM_AUTH_TOKEN_EXCHANGE')
await expect(promise).rejects.toHaveProperty(
['message'],
'Failed token exchange request with body message: Unknown error (status code 401)'
)
})
test('handles exchange error with missing body message', async () => {
@@ -159,7 +188,10 @@ describe('fetchAuthToken', () => {
await expect(promise).rejects.toBeInstanceOf(AuthTokenExchangeError)
await expect(promise).rejects.toHaveProperty(['httpStatus'], 403)
await expect(promise).rejects.toMatchObject({ message: expect.stringContaining('Unknown error') })
await expect(promise).rejects.toHaveProperty(
['message'],
'Failed token exchange request with body message: Unknown error (status code 403)'
)
})
test('handles exchange error when json response is valid', async () => {
@@ -232,8 +264,7 @@ describe('fetchAuthToken', () => {
fetch: mockFetch,
}
await expect(fetchAuthToken({ context, idToken, packageName, registry }))
.rejects.toThrow(AuthTokenMalformedJsonError)
await expect(fetchAuthToken({ context, idToken, packageName, registry })).rejects.toThrow(AuthTokenMalformedJsonError)
})
test('throws AuthTokenMalformedJsonError when JSON response is null', async () => {
@@ -247,8 +278,7 @@ describe('fetchAuthToken', () => {
fetch: mockFetch,
}
await expect(fetchAuthToken({ context, idToken, packageName, registry }))
.rejects.toThrow(AuthTokenMalformedJsonError)
await expect(fetchAuthToken({ context, idToken, packageName, registry })).rejects.toThrow(AuthTokenMalformedJsonError)
})
test('throws AuthTokenMalformedJsonError when JSON response is not an object', async () => {
@@ -262,7 +292,6 @@ describe('fetchAuthToken', () => {
fetch: mockFetch,
}
await expect(fetchAuthToken({ context, idToken, packageName, registry }))
.rejects.toThrow(AuthTokenMalformedJsonError)
await expect(fetchAuthToken({ context, idToken, packageName, registry })).rejects.toThrow(AuthTokenMalformedJsonError)
})
})

View File

@@ -81,8 +81,7 @@ describe('getIdToken', () => {
process: { env: {} },
}
await expect(getIdToken({ context, registry }))
.rejects.toThrow(IdTokenGitHubWorkflowIncorrectPermissionsError)
await expect(getIdToken({ context, registry })).rejects.toThrow(IdTokenGitHubWorkflowIncorrectPermissionsError)
})
test('throws error when only ACTIONS_ID_TOKEN_REQUEST_TOKEN is set', async () => {
@@ -94,8 +93,7 @@ describe('getIdToken', () => {
process: { env: { ACTIONS_ID_TOKEN_REQUEST_TOKEN: 'token' } },
}
await expect(getIdToken({ context, registry }))
.rejects.toThrow(IdTokenGitHubWorkflowIncorrectPermissionsError)
await expect(getIdToken({ context, registry })).rejects.toThrow(IdTokenGitHubWorkflowIncorrectPermissionsError)
})
test('throws error when only ACTIONS_ID_TOKEN_REQUEST_URL is set', async () => {
@@ -107,8 +105,7 @@ describe('getIdToken', () => {
process: { env: { ACTIONS_ID_TOKEN_REQUEST_URL: 'https://example.com' } },
}
await expect(getIdToken({ context, registry }))
.rejects.toThrow(IdTokenGitHubWorkflowIncorrectPermissionsError)
await expect(getIdToken({ context, registry })).rejects.toThrow(IdTokenGitHubWorkflowIncorrectPermissionsError)
})
test('fetches ID token from GitHub Actions successfully', async () => {

View File

@@ -13,7 +13,6 @@ describe('determineProvenance', () => {
const packageName = '@pnpm/test-package'
const authToken = 'test-auth-token'
// Helper to create a valid JWT-like token
function createIdToken (payload: Record<string, unknown>): string {
const header = { alg: 'RS256', typ: 'JWT' }
const headerB64 = Buffer.from(JSON.stringify(header)).toString('base64url')
@@ -328,7 +327,10 @@ describe('determineProvenance', () => {
await expect(promise).rejects.toHaveProperty(['registry'], registry)
await expect(promise).rejects.toHaveProperty(['errorResponse', 'code'], 'NOT_FOUND')
await expect(promise).rejects.toHaveProperty(['errorResponse', 'message'], 'Package not found')
await expect(promise).rejects.toMatchObject({ message: expect.stringContaining('NOT_FOUND: Package not found') })
await expect(promise).rejects.toHaveProperty(
['message'],
'Failed to fetch visibility for package @pnpm/test-package from registry https://registry.npmjs.org due to NOT_FOUND: Package not found (status code 404)'
)
})
test('handles visibility fetch error with only code', async () => {
@@ -355,8 +357,10 @@ describe('determineProvenance', () => {
})
await expect(promise).rejects.toBeInstanceOf(ProvenanceFailedToFetchVisibilityError)
await expect(promise).rejects.toMatchObject({ message: expect.stringContaining('UNAUTHORIZED') })
await expect(promise).rejects.toMatchObject({ message: expect.not.stringContaining(': ') })
await expect(promise).rejects.toHaveProperty(
['message'],
'Failed to fetch visibility for package @pnpm/test-package from registry https://registry.npmjs.org due to UNAUTHORIZED (status code 401)'
)
})
test('handles visibility fetch error with only message', async () => {
@@ -383,7 +387,10 @@ describe('determineProvenance', () => {
})
await expect(promise).rejects.toBeInstanceOf(ProvenanceFailedToFetchVisibilityError)
await expect(promise).rejects.toMatchObject({ message: expect.stringContaining('Internal server error') })
await expect(promise).rejects.toHaveProperty(
['message'],
'Failed to fetch visibility for package @pnpm/test-package from registry https://registry.npmjs.org due to Internal server error (status code 500)'
)
})
test('handles visibility fetch error with no error details', async () => {
@@ -410,7 +417,10 @@ describe('determineProvenance', () => {
})
await expect(promise).rejects.toBeInstanceOf(ProvenanceFailedToFetchVisibilityError)
await expect(promise).rejects.toMatchObject({ message: expect.stringContaining('an unknown error') })
await expect(promise).rejects.toHaveProperty(
['message'],
'Failed to fetch visibility for package @pnpm/test-package from registry https://registry.npmjs.org due to an unknown error (status code 503)'
)
})
test('handles visibility fetch error when JSON parsing fails', async () => {