fix: login tests — mock health check for server startup progress
All checks were successful
Build Archipelago ISO (dev) / build-iso (push) Successful in 48m45s

Login.vue now shows "Starting server..." until health check passes.
Tests need to mock server.echo and auth.isSetup RPCs and flush
promises before asserting on the rendered form.

522 tests pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-29 21:04:44 +01:00
parent 5b186da770
commit 2c0d4a7393

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, vi, beforeEach } from 'vitest'
import { shallowMount } from '@vue/test-utils'
import { shallowMount, flushPromises } from '@vue/test-utils'
import { createPinia, setActivePinia } from 'pinia'
import { createI18n } from 'vue-i18n'
import { defineComponent, h } from 'vue'
@@ -89,6 +89,12 @@ describe('Login View', () => {
setActivePinia(createPinia())
vi.clearAllMocks()
pushMock.mockResolvedValue(undefined)
// Mock health check so Login renders the form (not "Starting server...")
mockedRpc.call.mockImplementation(async (opts: any) => {
if (opts.method === 'server.echo') return { message: 'pong' }
if (opts.method === 'auth.isSetup') return { isSetup: true }
return null
})
})
function mountLogin() {
@@ -108,19 +114,22 @@ describe('Login View', () => {
expect(wrapper.exists()).toBe(true)
})
it('contains a password input', () => {
it('contains a password input', async () => {
const wrapper = mountLogin()
await flushPromises()
const input = wrapper.find('input[type="password"]')
expect(input.exists()).toBe(true)
})
it('shows title text', () => {
it('shows title text', async () => {
const wrapper = mountLogin()
await flushPromises()
expect(wrapper.text()).toContain('Welcome Back')
})
it('has a login button', () => {
it('has a login button', async () => {
const wrapper = mountLogin()
await flushPromises()
const buttons = wrapper.findAll('button')
const loginBtn = buttons.find(b => b.text().includes('Login') || b.text().includes('Create'))
expect(loginBtn).toBeDefined()