Skip to content

Commit

Permalink
store tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nbonamy committed May 11, 2024
1 parent abb19e0 commit ff47af2
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 12 deletions.
21 changes: 10 additions & 11 deletions src/services/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,16 @@ store.load = async () => {
loadHistory()
loadPrompts()

// load models
// and select valid engine
// subscribe to file changes
window.api.on('file-modified', (signal) => {
if (signal === 'settings') {
loadSettings()
} else if (signal === 'history') {
mergeHistory(window.api.history.load())
}
})

// load models and select valid engine
await loadAllModels()
if (!isEngineReady(store.config.llm.engine)) {
for (const engine of availableEngines) {
Expand All @@ -40,15 +48,6 @@ store.load = async () => {
}
}

// subscribe to file changes
window.api.on('file-modified', (signal) => {
if (signal === 'settings') {
loadSettings()
} else if (signal === 'history') {
mergeHistory(window.api.history.load())
}
})

}

store.dump = () => {
Expand Down
1 change: 1 addition & 0 deletions src/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ interface Store {
saveSettings?(): void
load?(): Promise<void>
loadCommands?(): Promise<void>
mergeHistory?(chats: any[]): void
dump?(): void
}

Expand Down
2 changes: 1 addition & 1 deletion tests/unit/commands.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { vi, beforeAll, expect, test } from 'vitest'
import * as commands from '../../src/services/commands'
import { store } from '../../src/services/store'
import * as commands from '../../src/services/commands'

beforeAll(() => {

Expand Down
116 changes: 116 additions & 0 deletions tests/unit/store.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@

import { vi, expect, test, beforeEach } from 'vitest'
import { store } from '../../src/services/store'
import Chat from '../../src/models/chat'
import Message from '../../src/models/message'
import defaultSettings from '../../defaults/settings.json'
import defaultCommands from '../../defaults/commands.json'
import defaultPrompts from '../../defaults/prompts.json'

const listeners: ((signal: string) => void)[] = []

const chats = [
new Chat(),
new Chat({
uuid: '123',
engine: 'engine',
model: 'model',
messages: [
{ uuid: 1, role: 'system', content: 'Hi' },
{ uuid: 2, role: 'user', content: 'Hello' }
]
})
]

window.api = {
config: {
load: vi.fn(() => defaultSettings),
save: vi.fn(),
},
commands: {
load: vi.fn(() => defaultCommands),
},
prompts: {
load: vi.fn(() => defaultPrompts),
},
history: {
load: vi.fn(() => chats),
save: vi.fn(),
},
on: (signal: string, listener: any) => {
listeners.push(listener)
}
}

beforeEach(() => {
vi.clearAllMocks()
listeners.length = 0
})

test('Check atributtes', async () => {
expect(store.config).toBe(null)
expect(store.commands).toEqual([])
expect(store.prompts).toEqual([])
expect(store.chats).toEqual([])
expect(store.chatFilter).toBe(null)
expect(store.pendingAttachment).toBe(null)
})

test('Load', async () => {
store.load()
expect(window.api.config.load).toHaveBeenCalled()
expect(window.api.prompts.load).toHaveBeenCalled()
expect(window.api.commands.load).toHaveBeenCalled()
expect(window.api.history.load).toHaveBeenCalled()
expect(store.config).toStrictEqual(defaultSettings)
expect(store.config.getActiveModel).toBeDefined()
expect(store.commands).toStrictEqual(defaultCommands)
expect(store.prompts).toStrictEqual(defaultPrompts)
})

test('Save settings', async () => {
store.load()
store.saveSettings()
expect(window.api.config.save).toHaveBeenCalled()
})

test('Reload settings', async () => {
store.load()
vi.clearAllMocks()
expect(window.api.config.load).not.toHaveBeenCalled()
listeners[0]('settings')
expect(window.api.config.load).toHaveBeenCalled()
})

test('Load history', async () => {
store.load()
expect(store.chats).toHaveLength(2)
expect(store.chats[0].messages).toHaveLength(0)
expect(store.chats[1].messages).toHaveLength(2)
})

test('Save history', async () => {
store.saveHistory()
expect(window.api.history.save).toHaveBeenCalledWith([ {
uuid: '123',
engine: 'engine',
model: 'model',
messages: [
{ uuid: 1, role: 'system', content: 'Hi', toolCall: null, transient: false },
{ uuid: 2, role: 'user', content: 'Hello', toolCall: null, transient: false }
]
}])
})

test('Merge history', async () => {
store.load()
chats.push(new Chat())
chats[1].messages.push(new Message('user', ''))
listeners[0]('history')
expect(store.chats).toHaveLength(3)
expect(store.chats[1].messages).toHaveLength(3)
chats[2].deleted = true
listeners[0]('history')
expect(store.chats).toHaveLength(2)
expect(store.chats[1].messages).toHaveLength(3)
})
7 changes: 7 additions & 0 deletions vitest.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import { defineConfig } from 'vite'
import { coverageConfigDefaults } from 'vitest/dist/config'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
Expand All @@ -20,5 +21,11 @@ export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
coverage: {
exclude: [
...coverageConfigDefaults.exclude,
'src/vendor/**/*',
]
},
},
})

0 comments on commit ff47af2

Please sign in to comment.