test: stabilize suite and add coverage heatmap (#373)

* test: stabilize suite and add coverage heatmap

* ci: run full bun test suite in pr checks
This commit is contained in:
Kevin Codex
2026-04-05 12:44:54 +08:00
committed by GitHub
parent daa3aa27a0
commit 5ef79546e9
16 changed files with 732 additions and 120 deletions

View File

@@ -1,31 +1,60 @@
import { afterEach, expect, test } from 'bun:test'
import { afterEach, beforeEach, expect, mock, test } from 'bun:test'
import {
clearGeminiAccessToken,
readGeminiAccessToken,
saveGeminiAccessToken,
} from './geminiCredentials.ts'
type MockStorageData = Record<string, unknown>
const originalToken = process.env.GEMINI_ACCESS_TOKEN
const originalEnv = { ...process.env }
let storageState: MockStorageData = {}
afterEach(() => {
if (originalToken === undefined) {
delete process.env.GEMINI_ACCESS_TOKEN
} else {
process.env.GEMINI_ACCESS_TOKEN = originalToken
}
clearGeminiAccessToken()
async function importFreshModule() {
mock.module('./secureStorage/index.js', () => ({
getSecureStorage: () => ({
name: 'mock-secure-storage',
read: () => storageState,
readAsync: async () => storageState,
update: (next: MockStorageData) => {
storageState = next
return { success: true }
},
delete: () => {
storageState = {}
return true
},
}),
}))
return import(`./geminiCredentials.ts?ts=${Date.now()}-${Math.random()}`)
}
beforeEach(() => {
process.env = { ...originalEnv }
storageState = {}
})
test('saveGeminiAccessToken stores and reads back the token', () => {
afterEach(() => {
process.env = { ...originalEnv }
storageState = {}
mock.restore()
})
test('saveGeminiAccessToken stores and reads back the token', async () => {
const {
readGeminiAccessToken,
saveGeminiAccessToken,
} = await importFreshModule()
const result = saveGeminiAccessToken('token-123')
expect(result.success).toBe(true)
expect(readGeminiAccessToken()).toBe('token-123')
})
test('clearGeminiAccessToken removes the stored token', () => {
test('clearGeminiAccessToken removes the stored token', async () => {
const {
clearGeminiAccessToken,
readGeminiAccessToken,
saveGeminiAccessToken,
} = await importFreshModule()
expect(saveGeminiAccessToken('token-123').success).toBe(true)
expect(clearGeminiAccessToken().success).toBe(true)
expect(readGeminiAccessToken()).toBeUndefined()
})