99 lines
2.8 KiB
JavaScript
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
|
|
})
|