43 lines
1.7 KiB
TypeScript
43 lines
1.7 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');
|
|
});
|
|
});
|