071faa482c
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口 完成项目 TypeScript/Prettier 与 Rust 全量格式化 修复 Pingora expected executable 门禁的空白敏感误报 同步开发运维文档与 AGC skill pack 格式化忽略规则
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { rebindOrphanWorkOwnersInMigration } from './rebind-orphan-work-owners.mjs';
|
|
|
|
const placeholderUserId = 'wx-openid-placeholder';
|
|
|
|
function table(name, rows) {
|
|
return { name, rows };
|
|
}
|
|
|
|
describe('rebindOrphanWorkOwnersInMigration', () => {
|
|
it('把作品表里认证表不存在的 owner_user_id 回填到占位用户', () => {
|
|
const migration = {
|
|
schema_version: 1,
|
|
exported_at_micros: 1,
|
|
tables: [
|
|
table('user_account', [
|
|
{ user_id: 'user_alive' },
|
|
{ user_id: placeholderUserId },
|
|
]),
|
|
table('puzzle_work_profile', [
|
|
{ profile_id: 'p1', owner_user_id: 'user_missing' },
|
|
{ profile_id: 'p2', owner_user_id: 'user_alive' },
|
|
{ profile_id: 'p3', owner_user_id: placeholderUserId },
|
|
]),
|
|
table('puzzle_agent_session', [
|
|
{ session_id: 'draft-1', owner_user_id: '' },
|
|
]),
|
|
table('tracking_event', [
|
|
{ event_id: 't1', owner_user_id: 'user_missing' },
|
|
]),
|
|
],
|
|
};
|
|
|
|
const result = rebindOrphanWorkOwnersInMigration(migration, {
|
|
placeholderUserId,
|
|
validUserIds: ['user_alive'],
|
|
});
|
|
|
|
expect(result.reboundRows).toEqual([
|
|
{
|
|
table: 'puzzle_work_profile',
|
|
rowKey: 'p1',
|
|
from: 'user_missing',
|
|
to: placeholderUserId,
|
|
},
|
|
{
|
|
table: 'puzzle_agent_session',
|
|
rowKey: 'draft-1',
|
|
from: '',
|
|
to: placeholderUserId,
|
|
},
|
|
]);
|
|
expect(migration.tables[1].rows[0].owner_user_id).toBe(placeholderUserId);
|
|
expect(migration.tables[1].rows[1].owner_user_id).toBe('user_alive');
|
|
expect(migration.tables[1].rows[2].owner_user_id).toBe(placeholderUserId);
|
|
expect(migration.tables[2].rows[0].owner_user_id).toBe(placeholderUserId);
|
|
expect(migration.tables[3].rows[0].owner_user_id).toBe('user_missing');
|
|
});
|
|
});
|