mirror of
https://github.com/mudler/LocalAI.git
synced 2026-10-18 20:48:12 -04:00
- Strict monotonic Go coverage gate (make test-coverage-check, 45% baseline) run in CI; fixes ginkgo dropping all-but-one coverprofile across multiple recursive roots, builds with -tags auth, and folds in the in-process tests/e2e suite via --coverpkg. - React UI e2e coverage (make test-ui-coverage: vite-plugin-istanbul + nyc, nix-provided Chromium) plus e2e specs for 6 previously-untested pages, and a UI coverage gate (make test-ui-coverage-check) with a small tolerance since e2e line coverage jitters ~0.5pp run-to-run. - pre-commit hook: lint + coverage on Go changes, Playwright e2e + UI coverage gate on react-ui changes; install with make install-hooks. - New Go handler tests (settings, branding), hermetic base64 download test. - fix(ui): model editor reads vram_display (snake_case), so the VRAM estimate renders again; covered by a regression test. Assisted-by: Claude:claude-opus-4-7 Signed-off-by: Richard Palethorpe <io@richiejp.com>
39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
import { test, expect } from './coverage-fixtures.js'
|
|
|
|
// Login page (src/pages/Login.jsx). /login redirects to /app when auth is
|
|
// disabled, so the harness mocks /api/auth/status to enable auth with no
|
|
// signed-in user. With no password/OAuth providers configured, the page
|
|
// offers API-token login — the path exercised here.
|
|
test.describe('Login page', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.route('**/api/auth/status', (route) =>
|
|
route.fulfill({
|
|
contentType: 'application/json',
|
|
body: JSON.stringify({
|
|
authEnabled: true,
|
|
staticApiKeyRequired: false,
|
|
user: null,
|
|
hasUsers: true,
|
|
providers: [],
|
|
registrationMode: 'open',
|
|
permissions: {},
|
|
}),
|
|
}),
|
|
)
|
|
await page.goto('/login')
|
|
})
|
|
|
|
test('renders the API token login option', async ({ page }) => {
|
|
await expect(page).toHaveURL(/\/login$/)
|
|
await expect(page.getByRole('button', { name: /Login with API Token/i })).toBeVisible()
|
|
})
|
|
|
|
test('reveals and accepts an API token', async ({ page }) => {
|
|
await page.getByRole('button', { name: /Login with API Token/i }).click()
|
|
const tokenInput = page.locator('input').first()
|
|
await expect(tokenInput).toBeVisible()
|
|
await tokenInput.fill('sk-test-token')
|
|
await expect(tokenInput).toHaveValue('sk-test-token')
|
|
})
|
|
})
|