70 lines
3.0 KiB
TypeScript
70 lines
3.0 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import type { ChatMessage } from '../src/shared/types'
|
|
import {
|
|
deriveProjectTaskStatus,
|
|
matchesProjectTaskFilter,
|
|
projectTaskStatusClass,
|
|
runningSessionIds,
|
|
} from '../src/renderer/src/projects/project-task-model'
|
|
import {
|
|
projectCapabilityRefKey,
|
|
uniqueProjectCapabilityRefs,
|
|
} from '../src/renderer/src/projects/project-capability-model'
|
|
|
|
function assistant(overrides: Partial<ChatMessage>): ChatMessage {
|
|
return {
|
|
id: `assistant-${Math.random()}`,
|
|
role: 'assistant',
|
|
content: '',
|
|
createdAt: 1,
|
|
...overrides,
|
|
}
|
|
}
|
|
|
|
assert.deepEqual(
|
|
[...runningSessionIds({
|
|
byRunId: { sessionId: 'session-a' },
|
|
orphan: {},
|
|
duplicate: { sessionId: 'session-a' },
|
|
})],
|
|
['session-a'],
|
|
)
|
|
assert.equal(deriveProjectTaskStatus([], false), 'idle')
|
|
assert.equal(deriveProjectTaskStatus([], true), 'running')
|
|
assert.equal(deriveProjectTaskStatus([assistant({ status: 'done' })], true), 'running')
|
|
assert.equal(deriveProjectTaskStatus([assistant({ status: 'done' })], false), 'completed')
|
|
assert.equal(deriveProjectTaskStatus([assistant({ status: 'streaming' })], true), 'running')
|
|
assert.equal(deriveProjectTaskStatus([assistant({ status: 'done', interrupted: true })], false), 'cancelled')
|
|
assert.equal(deriveProjectTaskStatus([assistant({ status: 'error' })], false), 'error')
|
|
assert.equal(deriveProjectTaskStatus([assistant({ status: 'cancelled' })], false), 'cancelled')
|
|
assert.equal(deriveProjectTaskStatus([assistant({})], false), 'unknown')
|
|
assert.equal(deriveProjectTaskStatus([
|
|
assistant({ status: 'error' }),
|
|
assistant({ status: 'done' }),
|
|
{ id: 'user-latest', role: 'user', content: 'next', createdAt: 2 },
|
|
], false), 'completed')
|
|
|
|
assert.equal(matchesProjectTaskFilter('running', 'active'), true)
|
|
assert.equal(matchesProjectTaskFilter('completed', 'active'), false)
|
|
assert.equal(matchesProjectTaskFilter('completed', 'completed'), true)
|
|
assert.equal(matchesProjectTaskFilter('idle', 'completed'), false)
|
|
assert.equal(matchesProjectTaskFilter('error', 'active'), false)
|
|
assert.equal(matchesProjectTaskFilter('cancelled', 'completed'), false)
|
|
assert.equal(matchesProjectTaskFilter('unknown', 'all'), true)
|
|
assert.equal(projectTaskStatusClass('running'), '')
|
|
assert.equal(projectTaskStatusClass('completed'), ' wb-status-dot--success')
|
|
assert.equal(projectTaskStatusClass('error'), ' wb-status-dot--error')
|
|
assert.equal(projectTaskStatusClass('cancelled'), ' wb-status-dot--error')
|
|
assert.equal(projectTaskStatusClass('idle'), ' wb-status-dot--muted')
|
|
assert.equal(projectTaskStatusClass('unknown'), ' wb-status-dot--muted')
|
|
|
|
const sameIdRefs = [
|
|
{ id: 'shared-expert', source: 'market' as const, provider: 'provider-a' },
|
|
{ id: 'shared-expert', source: 'market' as const, provider: 'provider-b' },
|
|
{ id: 'shared-expert', source: 'market' as const, provider: 'provider-a' },
|
|
]
|
|
assert.notEqual(projectCapabilityRefKey(sameIdRefs[0]!), projectCapabilityRefKey(sameIdRefs[1]!))
|
|
assert.deepEqual(uniqueProjectCapabilityRefs(sameIdRefs), sameIdRefs.slice(0, 2))
|
|
|
|
console.log('PROJECT_TASK_MODEL_PASS')
|