- 将数据库文档拆分为按collection命名的标准文件,统一格式 - 补充tbl_company、tbl_system_dict等表的原生访问规则 - 新增users_tag、document_create等字段 - 优化用户资料更新接口,支持非必填字段 - 添加公司原生API测试脚本 - 归档本次变更至OpenSpec
126 lines
5.2 KiB
JavaScript
126 lines
5.2 KiB
JavaScript
import fs from 'node:fs/promises'
|
||
|
||
const runtimePath = new URL('../pocket-base/bai_api_pb_hooks/bai_api_shared/config/runtime.js', import.meta.url)
|
||
const runtimeText = await fs.readFile(runtimePath, 'utf8')
|
||
|
||
function readRuntimeValue(name) {
|
||
const match = runtimeText.match(new RegExp(`${name}:\\s*'([^']*)'`))
|
||
if (!match) {
|
||
throw new Error(`未在 runtime.js 中找到 ${name}`)
|
||
}
|
||
return match[1]
|
||
}
|
||
|
||
const baseUrl = readRuntimeValue('APP_BASE_URL')
|
||
const adminToken = readRuntimeValue('POCKETBASE_AUTH_TOKEN')
|
||
|
||
function assert(condition, message) {
|
||
if (!condition) {
|
||
throw new Error(message)
|
||
}
|
||
}
|
||
|
||
async function requestJson(path, options = {}) {
|
||
const res = await fetch(`${baseUrl}${path}`, options)
|
||
const text = await res.text()
|
||
let json = null
|
||
|
||
try {
|
||
json = text ? JSON.parse(text) : null
|
||
} catch {
|
||
throw new Error(`接口 ${path} 返回了非 JSON 响应:${text}`)
|
||
}
|
||
|
||
return { res, json }
|
||
}
|
||
|
||
async function main() {
|
||
const knownCompanyId = 'WX-COMPANY-10001'
|
||
const initialOwnerOpenid = 'wx-owner-create'
|
||
const updatedOwnerOpenid = 'wx-owner-updated'
|
||
|
||
const createResult = await requestJson('/pb/api/collections/tbl_company/records', {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
},
|
||
body: JSON.stringify({
|
||
company_name: '原生接口测试公司',
|
||
company_nationality: '中国',
|
||
company_nationality_code: 'CN',
|
||
company_province: '上海',
|
||
company_province_code: '310000',
|
||
company_city: '上海',
|
||
company_city_code: '310100',
|
||
company_district: '浦东新区',
|
||
company_district_code: '310115',
|
||
company_status: '有效',
|
||
company_owner_openid: initialOwnerOpenid,
|
||
}),
|
||
})
|
||
|
||
assert(createResult.res.ok, `公开创建失败:${JSON.stringify(createResult.json)}`)
|
||
assert(typeof createResult.json?.company_id === 'string' && createResult.json.company_id.startsWith('WX-COMPANY-'), '公开创建未自动生成 company_id')
|
||
assert(createResult.json?.company_owner_openid === initialOwnerOpenid, '公开创建返回的 company_owner_openid 不匹配')
|
||
assert(createResult.json?.company_city_code === '310100', '公开创建返回的 company_city_code 不匹配')
|
||
|
||
const byCompanyIdResult = await requestJson(
|
||
`/pb/api/collections/tbl_company/records?filter=${encodeURIComponent(`company_id="${knownCompanyId}"`)}&perPage=1&page=1`
|
||
)
|
||
|
||
assert(byCompanyIdResult.res.ok, `按 company_id 查询失败:${JSON.stringify(byCompanyIdResult.json)}`)
|
||
assert(byCompanyIdResult.json?.totalItems === 1, `按 company_id 查询结果数量不为 1:${JSON.stringify(byCompanyIdResult.json)}`)
|
||
assert(byCompanyIdResult.json?.items?.[0]?.company_id === knownCompanyId, '按 company_id 查询返回了错误的记录')
|
||
|
||
const listResult = await requestJson('/pb/api/collections/tbl_company/records?perPage=5&page=1')
|
||
assert(listResult.res.ok, `公开列表查询失败:${JSON.stringify(listResult.json)}`)
|
||
assert((listResult.json?.totalItems || 0) >= 1, '公开列表查询未返回任何数据')
|
||
|
||
const createdCompanyId = createResult.json.company_id
|
||
const createdLookupResult = await requestJson(
|
||
`/pb/api/collections/tbl_company/records?filter=${encodeURIComponent(`company_id="${createdCompanyId}"`)}&perPage=1&page=1`
|
||
)
|
||
assert(createdLookupResult.res.ok, `按 company_id 查询测试记录失败:${JSON.stringify(createdLookupResult.json)}`)
|
||
assert(createdLookupResult.json?.totalItems === 1, `按 company_id 查询测试记录数量不为 1:${JSON.stringify(createdLookupResult.json)}`)
|
||
|
||
const createdRecordId = createdLookupResult.json.items[0].id
|
||
const updateResult = await requestJson(`/pb/api/collections/tbl_company/records/${createdRecordId}`, {
|
||
method: 'PATCH',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
Authorization: `Bearer ${adminToken}`,
|
||
},
|
||
body: JSON.stringify({
|
||
company_name: '原生接口测试公司-已更新',
|
||
company_owner_openid: updatedOwnerOpenid,
|
||
company_district: '徐汇区',
|
||
company_district_code: '310104',
|
||
}),
|
||
})
|
||
assert(updateResult.res.ok, `按 company_id 定位后更新失败:${JSON.stringify(updateResult.json)}`)
|
||
assert(updateResult.json?.company_name === '原生接口测试公司-已更新', '更新后的 company_name 不正确')
|
||
assert(updateResult.json?.company_owner_openid === updatedOwnerOpenid, '更新后的 company_owner_openid 不正确')
|
||
assert(updateResult.json?.company_district_code === '310104', '更新后的 company_district_code 不正确')
|
||
|
||
const cleanupResult = await requestJson(`/pb/api/collections/tbl_company/records/${createResult.json.id}`, {
|
||
method: 'DELETE',
|
||
headers: {
|
||
Authorization: `Bearer ${adminToken}`,
|
||
},
|
||
})
|
||
|
||
assert(cleanupResult.res.ok, `测试清理失败:${JSON.stringify(cleanupResult.json)}`)
|
||
|
||
console.log(JSON.stringify({
|
||
createdCompanyId: createdCompanyId,
|
||
queriedCompanyId: byCompanyIdResult.json.items[0].company_id,
|
||
publicListTotalItems: listResult.json.totalItems,
|
||
updatedRecordId: createdRecordId,
|
||
updatedOwnerOpenid: updateResult.json.company_owner_openid,
|
||
updatedDistrictCode: updateResult.json.company_district_code,
|
||
cleanupDeletedId: createResult.json.id,
|
||
}, null, 2))
|
||
}
|
||
|
||
await main()
|