feat(v2.7): 建立协作治理基础合同

This commit is contained in:
2026-07-08 16:09:45 +08:00
parent 27cc1badc7
commit ad36ffda17
8 changed files with 448 additions and 12 deletions

View File

@@ -0,0 +1,50 @@
import { existsSync, readFileSync } from 'node:fs';
import { join } from 'node:path';
const migrationPath = join(
process.cwd(),
'prisma',
'migrations',
'20260708000000_v27_enterprise_collab_governance',
'migration.sql',
);
function readMigrationSql() {
if (!existsSync(migrationPath)) {
throw new Error(`Missing V2.7 migration: ${migrationPath}`);
}
return readFileSync(migrationPath, 'utf8');
}
describe('V2.7 enterprise collaboration schema migration', () => {
it('creates notification records for assignment, mention, risk alert, and overdue events', () => {
const sql = readMigrationSql();
expect(sql).toMatch(/CREATE TABLE "notifications"/);
expect(sql).toMatch(/"type" TEXT NOT NULL/);
expect(sql).toMatch(/"recipient_id" TEXT NOT NULL/);
expect(sql).toMatch(/"read_at" TIMESTAMP\(3\)/);
expect(sql).toMatch(/CREATE INDEX "notifications_recipient_read_created_idx"/);
});
it('creates polymorphic comments with mention metadata', () => {
const sql = readMigrationSql();
expect(sql).toMatch(/CREATE TABLE "comments"/);
expect(sql).toMatch(/"entity_type" TEXT NOT NULL/);
expect(sql).toMatch(/"entity_id" TEXT NOT NULL/);
expect(sql).toMatch(/"mentioned_member_ids" JSONB NOT NULL DEFAULT '\[\]'/);
expect(sql).toMatch(/CREATE INDEX "comments_entity_created_idx"/);
});
it('adds audit logs and governance dictionaries with soft-delete support', () => {
const sql = readMigrationSql();
expect(sql).toMatch(/CREATE TABLE "audit_logs"/);
expect(sql).toMatch(/"before" JSONB NOT NULL DEFAULT '\{\}'/);
expect(sql).toMatch(/"after" JSONB NOT NULL DEFAULT '\{\}'/);
expect(sql).toMatch(/CREATE TABLE "governance_dictionaries"/);
expect(sql).toMatch(/"deleted_at" TIMESTAMP\(3\)/);
expect(sql).toMatch(/CONSTRAINT "governance_dictionaries_scope_kind_name_key" UNIQUE/);
});
});