Files
aishangjia-uniapp/tests/check-ai-house-session.js

99 lines
2.8 KiB
JavaScript

const assert = require('node:assert/strict')
const fs = require('node:fs')
const path = require('node:path')
const pagePath = path.resolve(__dirname, '../pages/ai-house/index.vue')
const source = fs.readFileSync(pagePath, 'utf8')
const scriptMatch = source.match(/<script>([\s\S]*?)<\/script>/)
assert.ok(scriptMatch, 'AI house page script is missing')
const savedValues = new Map()
const storage = {
get(key) {
return savedValues.get(key) || false
},
set(key, value) {
savedValues.set(key, value)
}
}
const clearCalls = []
const componentScript = scriptMatch[1]
.replace(/^\s*import .*$/gm, '')
.replace('export default {', 'return {')
const component = new Function(
'HouseAiConfigApi',
'HouseAiChatApi',
'storage',
'USER_ID',
'apiUrl',
componentScript
)(
{},
{
clearHouseAiSession(payload) {
clearCalls.push(payload)
return Promise.resolve()
}
},
storage,
'userId',
'http://localhost'
)
global.uni = {
showToast() {}
}
function createPageVm() {
const vm = component.data()
Object.entries(component.methods).forEach(([name, method]) => {
vm[name] = method.bind(vm)
})
vm.scrollToBottom = () => {}
return vm
}
const firstPage = createPageVm()
firstPage.loginUserId = 1001
firstPage.conversationId = 'house-ai-1001-existing'
firstPage.messages = [firstPage.createMessage('user', 'text', { content: 'Need a two-bedroom home' })]
firstPage.messageSubmitted = true
firstPage.form = {
building: '阳光小区',
area: '90',
budget: '3000'
}
const finderQuestion = firstPage.buildFormQuestion()
assert.ok(finderQuestion.includes('阳光小区'))
assert.ok(finderQuestion.includes('90'))
assert.ok(finderQuestion.includes('3000'))
firstPage.persistSession()
const restoredPage = createPageVm()
restoredPage.loginUserId = 1001
assert.equal(restoredPage.restoreSession(), true)
assert.equal(restoredPage.conversationId, 'house-ai-1001-existing')
assert.equal(restoredPage.messages[0].content, 'Need a two-bedroom home')
assert.equal(restoredPage.messageSubmitted, true)
assert.equal(restoredPage.createMessage('ai', 'text').id, 'msg-1')
restoredPage.aiConfig.welcomeMessage = 'Welcome back'
restoredPage.clearSession().then(() => {
assert.deepEqual(clearCalls, [{ conversationId: 'house-ai-1001-existing' }])
assert.notEqual(restoredPage.conversationId, 'house-ai-1001-existing')
assert.equal(restoredPage.messages.length, 1)
assert.equal(restoredPage.messages[0].type, 'form')
assert.equal(restoredPage.messages[0].content, 'Welcome back')
assert.equal(restoredPage.messageSubmitted, false)
const storedSession = storage.get('house-ai-session-1001')
assert.equal(storedSession.conversationId, restoredPage.conversationId)
assert.equal(storedSession.messages.length, 1)
console.log('AI house session persistence and clearing checks passed')
}).catch((error) => {
console.error(error)
process.exitCode = 1
})