182 lines
7.0 KiB
JavaScript
182 lines
7.0 KiB
JavaScript
|
|
const test = require('node:test')
|
||
|
|
const assert = require('node:assert/strict')
|
||
|
|
|
||
|
|
const wechatService = require('../src/services/wechatService')
|
||
|
|
const pocketbaseService = require('../src/services/pocketbaseService')
|
||
|
|
const jwtService = require('../src/services/jwtService')
|
||
|
|
const userService = require('../src/services/userService')
|
||
|
|
|
||
|
|
test('authenticateWechatUser 首次注册默认写入游客类型', async (t) => {
|
||
|
|
const originGetWxOpenId = wechatService.getWxOpenId
|
||
|
|
const originListUsersByFilter = pocketbaseService.listUsersByFilter
|
||
|
|
const originCreateUser = pocketbaseService.createUser
|
||
|
|
const originSignAccessToken = jwtService.signAccessToken
|
||
|
|
const originGetCompanyByCompanyId = pocketbaseService.getCompanyByCompanyId
|
||
|
|
|
||
|
|
wechatService.getWxOpenId = async () => 'openid-register'
|
||
|
|
pocketbaseService.listUsersByFilter = async () => []
|
||
|
|
pocketbaseService.createUser = async (payload) => ({
|
||
|
|
id: 'pb-1',
|
||
|
|
created: '2026-03-19T00:00:00Z',
|
||
|
|
updated: '2026-03-19T00:00:00Z',
|
||
|
|
...payload,
|
||
|
|
})
|
||
|
|
pocketbaseService.getCompanyByCompanyId = async () => null
|
||
|
|
jwtService.signAccessToken = () => 'token-1'
|
||
|
|
|
||
|
|
t.after(() => {
|
||
|
|
wechatService.getWxOpenId = originGetWxOpenId
|
||
|
|
pocketbaseService.listUsersByFilter = originListUsersByFilter
|
||
|
|
pocketbaseService.createUser = originCreateUser
|
||
|
|
pocketbaseService.getCompanyByCompanyId = originGetCompanyByCompanyId
|
||
|
|
jwtService.signAccessToken = originSignAccessToken
|
||
|
|
})
|
||
|
|
|
||
|
|
const result = await userService.authenticateWechatUser({
|
||
|
|
users_wx_code: 'code-1',
|
||
|
|
})
|
||
|
|
|
||
|
|
assert.equal(result.status, 'register_success')
|
||
|
|
assert.equal(result.is_info_complete, false)
|
||
|
|
assert.equal(result.user.users_type, '游客')
|
||
|
|
})
|
||
|
|
|
||
|
|
test('updateWechatUserProfile 首次完整补充资料时升级为注册用户', async (t) => {
|
||
|
|
const originGetWxOpenId = wechatService.getWxOpenId
|
||
|
|
const originGetWxPhoneNumber = wechatService.getWxPhoneNumber
|
||
|
|
const originListUsersByFilter = pocketbaseService.listUsersByFilter
|
||
|
|
const originUpdateUser = pocketbaseService.updateUser
|
||
|
|
const originGetCompanyByCompanyId = pocketbaseService.getCompanyByCompanyId
|
||
|
|
|
||
|
|
wechatService.getWxOpenId = async () => 'openid-profile'
|
||
|
|
wechatService.getWxPhoneNumber = async () => '13800138000'
|
||
|
|
pocketbaseService.listUsersByFilter = async (filter) => {
|
||
|
|
if (filter.includes('users_wx_openid')) {
|
||
|
|
return [
|
||
|
|
{
|
||
|
|
id: 'pb-2',
|
||
|
|
users_id: 'U2001',
|
||
|
|
users_type: '游客',
|
||
|
|
users_name: '',
|
||
|
|
users_phone: '',
|
||
|
|
users_picture: '',
|
||
|
|
users_wx_openid: 'openid-profile',
|
||
|
|
created: '2026-03-19T00:00:00Z',
|
||
|
|
updated: '2026-03-19T00:00:00Z',
|
||
|
|
},
|
||
|
|
]
|
||
|
|
}
|
||
|
|
return []
|
||
|
|
}
|
||
|
|
pocketbaseService.updateUser = async (_id, payload) => ({
|
||
|
|
id: 'pb-2',
|
||
|
|
users_id: 'U2001',
|
||
|
|
users_wx_openid: 'openid-profile',
|
||
|
|
users_type: payload.users_type || '游客',
|
||
|
|
users_name: payload.users_name,
|
||
|
|
users_phone: payload.users_phone,
|
||
|
|
users_picture: payload.users_picture,
|
||
|
|
created: '2026-03-19T00:00:00Z',
|
||
|
|
updated: '2026-03-19T00:10:00Z',
|
||
|
|
})
|
||
|
|
pocketbaseService.getCompanyByCompanyId = async () => null
|
||
|
|
|
||
|
|
t.after(() => {
|
||
|
|
wechatService.getWxOpenId = originGetWxOpenId
|
||
|
|
wechatService.getWxPhoneNumber = originGetWxPhoneNumber
|
||
|
|
pocketbaseService.listUsersByFilter = originListUsersByFilter
|
||
|
|
pocketbaseService.updateUser = originUpdateUser
|
||
|
|
pocketbaseService.getCompanyByCompanyId = originGetCompanyByCompanyId
|
||
|
|
})
|
||
|
|
|
||
|
|
const result = await userService.updateWechatUserProfile('openid-profile', {
|
||
|
|
users_name: '张三',
|
||
|
|
users_phone_code: 'phone-code-1',
|
||
|
|
users_picture: 'https://example.com/a.png',
|
||
|
|
})
|
||
|
|
|
||
|
|
assert.equal(result.status, 'update_success')
|
||
|
|
assert.equal(result.user.users_type, '注册用户')
|
||
|
|
assert.equal(result.user.users_phone_masked, '138****8000')
|
||
|
|
})
|
||
|
|
|
||
|
|
test('updateWechatUserProfile 非首次补充资料时不覆盖已确定类型', async (t) => {
|
||
|
|
const originGetWxOpenId = wechatService.getWxOpenId
|
||
|
|
const originGetWxPhoneNumber = wechatService.getWxPhoneNumber
|
||
|
|
const originListUsersByFilter = pocketbaseService.listUsersByFilter
|
||
|
|
const originUpdateUser = pocketbaseService.updateUser
|
||
|
|
const originGetCompanyByCompanyId = pocketbaseService.getCompanyByCompanyId
|
||
|
|
|
||
|
|
wechatService.getWxOpenId = async () => 'openid-registered'
|
||
|
|
wechatService.getWxPhoneNumber = async () => '13900139000'
|
||
|
|
pocketbaseService.listUsersByFilter = async (filter) => {
|
||
|
|
if (filter.includes('users_wx_openid')) {
|
||
|
|
return [
|
||
|
|
{
|
||
|
|
id: 'pb-3',
|
||
|
|
users_id: 'U2002',
|
||
|
|
users_type: '注册用户',
|
||
|
|
users_name: '老用户',
|
||
|
|
users_phone: '13800138000',
|
||
|
|
users_picture: 'https://example.com/old.png',
|
||
|
|
users_wx_openid: 'openid-registered',
|
||
|
|
created: '2026-03-19T00:00:00Z',
|
||
|
|
updated: '2026-03-19T00:00:00Z',
|
||
|
|
},
|
||
|
|
]
|
||
|
|
}
|
||
|
|
return []
|
||
|
|
}
|
||
|
|
pocketbaseService.updateUser = async (_id, payload) => ({
|
||
|
|
id: 'pb-3',
|
||
|
|
users_id: 'U2002',
|
||
|
|
users_wx_openid: 'openid-registered',
|
||
|
|
users_type: '注册用户',
|
||
|
|
users_name: payload.users_name,
|
||
|
|
users_phone: payload.users_phone,
|
||
|
|
users_picture: payload.users_picture,
|
||
|
|
created: '2026-03-19T00:00:00Z',
|
||
|
|
updated: '2026-03-19T00:10:00Z',
|
||
|
|
})
|
||
|
|
pocketbaseService.getCompanyByCompanyId = async () => null
|
||
|
|
|
||
|
|
t.after(() => {
|
||
|
|
wechatService.getWxOpenId = originGetWxOpenId
|
||
|
|
wechatService.getWxPhoneNumber = originGetWxPhoneNumber
|
||
|
|
pocketbaseService.listUsersByFilter = originListUsersByFilter
|
||
|
|
pocketbaseService.updateUser = originUpdateUser
|
||
|
|
pocketbaseService.getCompanyByCompanyId = originGetCompanyByCompanyId
|
||
|
|
})
|
||
|
|
|
||
|
|
const result = await userService.updateWechatUserProfile('openid-registered', {
|
||
|
|
users_name: '新名字',
|
||
|
|
users_phone_code: 'phone-code-2',
|
||
|
|
users_picture: 'https://example.com/new.png',
|
||
|
|
})
|
||
|
|
|
||
|
|
assert.equal(result.user.users_type, '注册用户')
|
||
|
|
})
|
||
|
|
|
||
|
|
test('refreshWechatToken 返回新的 token', async (t) => {
|
||
|
|
const originListUsersByFilter = pocketbaseService.listUsersByFilter
|
||
|
|
const originSignAccessToken = jwtService.signAccessToken
|
||
|
|
|
||
|
|
pocketbaseService.listUsersByFilter = async () => [
|
||
|
|
{
|
||
|
|
id: 'pb-4',
|
||
|
|
users_id: 'U3001',
|
||
|
|
users_wx_openid: 'openid-refresh',
|
||
|
|
},
|
||
|
|
]
|
||
|
|
jwtService.signAccessToken = () => 'refresh-token'
|
||
|
|
|
||
|
|
t.after(() => {
|
||
|
|
pocketbaseService.listUsersByFilter = originListUsersByFilter
|
||
|
|
jwtService.signAccessToken = originSignAccessToken
|
||
|
|
})
|
||
|
|
|
||
|
|
const result = await userService.refreshWechatToken('openid-refresh')
|
||
|
|
|
||
|
|
assert.equal(result.token, 'refresh-token')
|
||
|
|
})
|