Files
Web_BAI_Manage_ApiServer/script/test-tbl-company-native-api.js
XuJiacheng e9fe1165e3 feat: 规范化PocketBase数据库文档与原生API访问
- 将数据库文档拆分为按collection命名的标准文件,统一格式
- 补充tbl_company、tbl_system_dict等表的原生访问规则
- 新增users_tag、document_create等字段
- 优化用户资料更新接口,支持非必填字段
- 添加公司原生API测试脚本
- 归档本次变更至OpenSpec
2026-03-29 16:21:34 +08:00

126 lines
5.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()