mirror of
https://github.com/mudler/LocalAI.git
synced 2026-05-30 03:25:42 -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>
65 lines
2.4 KiB
JavaScript
65 lines
2.4 KiB
JavaScript
import { test, expect } from './coverage-fixtures.js'
|
|
|
|
test.describe('Backend Logs', () => {
|
|
test('model detail page shows title', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
await expect(page.locator('.page-title')).toContainText('mock-model')
|
|
})
|
|
|
|
test('no back arrow link on detail page', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
await expect(page.locator('a[href="/app/backend-logs"]')).not.toBeVisible()
|
|
})
|
|
|
|
test('filter buttons are visible', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
await expect(page.locator('button', { hasText: 'All' })).toBeVisible()
|
|
await expect(page.locator('button', { hasText: 'stdout' })).toBeVisible()
|
|
await expect(page.locator('button', { hasText: 'stderr' })).toBeVisible()
|
|
})
|
|
|
|
test('filter buttons toggle active state', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
|
|
const allBtn = page.locator('button', { hasText: 'All' })
|
|
const stdoutBtn = page.locator('button', { hasText: 'stdout' })
|
|
|
|
// All is active by default
|
|
await expect(allBtn).toHaveClass(/btn-primary/)
|
|
|
|
// Click stdout
|
|
await stdoutBtn.click()
|
|
await expect(stdoutBtn).toHaveClass(/btn-primary/)
|
|
await expect(allBtn).not.toHaveClass(/btn-primary/)
|
|
})
|
|
|
|
test('export button is present', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
await expect(page.locator('button', { hasText: 'Export' })).toBeVisible()
|
|
})
|
|
|
|
test('auto-scroll checkbox is present', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
await expect(page.locator('text=Auto-scroll')).toBeVisible()
|
|
})
|
|
|
|
test('clear button is present', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
await expect(page.locator('button', { hasText: 'Clear' })).toBeVisible()
|
|
})
|
|
|
|
test('details toggle button is present and toggles', async ({ page }) => {
|
|
await page.goto('/app/backend-logs/mock-model')
|
|
|
|
// "Text only" button visible by default (details are shown)
|
|
const toggleBtn = page.locator('button', { hasText: 'Text only' })
|
|
await expect(toggleBtn).toBeVisible()
|
|
|
|
// Click to hide details
|
|
await toggleBtn.click()
|
|
|
|
// Button label changes to "Show details"
|
|
await expect(page.locator('button', { hasText: 'Show details' })).toBeVisible()
|
|
})
|
|
})
|