UI/logic updates, tests added, backend updated
This commit is contained in:
77
Seasoned.Frontend/test/ChatPage.spec.ts
Normal file
77
Seasoned.Frontend/test/ChatPage.spec.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { mount } from '@vue/test-utils'
|
||||
import { createVuetify } from 'vuetify'
|
||||
import * as components from 'vuetify/components'
|
||||
import * as directives from 'vuetify/directives'
|
||||
import ChatPage from "@/pages/chat.vue"
|
||||
|
||||
const vuetify = createVuetify({ components, directives })
|
||||
|
||||
global.ResizeObserver = class ResizeObserver {
|
||||
observe() {} unobserve() {} disconnect() {}
|
||||
};
|
||||
|
||||
global.Element.prototype.scrollTo = vi.fn();
|
||||
|
||||
vi.stubGlobal('useRuntimeConfig', () => ({
|
||||
public: { apiBase: 'http://localhost:5000/' }
|
||||
}))
|
||||
|
||||
const mockRouter = { push: vi.fn(), resolve: vi.fn(() => ({ href: '' })) }
|
||||
vi.stubGlobal('useRouter', () => mockRouter)
|
||||
|
||||
const mockFetch = vi.fn()
|
||||
vi.stubGlobal('$fetch', mockFetch)
|
||||
|
||||
describe('ChatPage.vue', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
global.Element.prototype.scrollTo = vi.fn()
|
||||
})
|
||||
|
||||
const mountOptions = {
|
||||
global: {
|
||||
plugins: [vuetify],
|
||||
stubs: { RecipeDisplay: true },
|
||||
provide: { 'router': mockRouter }
|
||||
}
|
||||
}
|
||||
|
||||
it('shows the placeholder when chat is empty', () => {
|
||||
const wrapper = mount(ChatPage, mountOptions)
|
||||
expect(wrapper.text()).toContain('"What shall we create today?"')
|
||||
})
|
||||
|
||||
it('adds a user message and clears input on send', async () => {
|
||||
const wrapper = mount(ChatPage, mountOptions)
|
||||
const vm = wrapper.vm as any
|
||||
vm.userQuery = 'How do I make a roux?'
|
||||
mockFetch.mockResolvedValueOnce({ reply: 'Test', recipe: null })
|
||||
|
||||
await vm.askChef()
|
||||
|
||||
expect(vm.chatMessages[0].text).toBe('How do I make a roux?')
|
||||
expect(vm.userQuery).toBe('')
|
||||
})
|
||||
|
||||
it('displays the assistant reply from the .NET API', async () => {
|
||||
mockFetch.mockResolvedValueOnce({
|
||||
reply: 'A roux is equal parts flour and fat.',
|
||||
recipe: null
|
||||
})
|
||||
const wrapper = mount(ChatPage, mountOptions)
|
||||
const vm = wrapper.vm as any
|
||||
vm.userQuery = 'Tell me about roux'
|
||||
await vm.askChef()
|
||||
expect(vm.chatMessages[1].text).toContain('equal parts flour')
|
||||
})
|
||||
|
||||
it('shows error message if the API fails', async () => {
|
||||
mockFetch.mockRejectedValueOnce(new Error('Backend Down'))
|
||||
const wrapper = mount(ChatPage, mountOptions)
|
||||
const vm = wrapper.vm as any
|
||||
vm.userQuery = 'Help!'
|
||||
await vm.askChef()
|
||||
expect(wrapper.text()).toContain('The kitchen is currently closed')
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user