Unit evidence for AE5a/AE5b filters; optional PG cases when TEST_DATABASE_URL is set. Co-authored-by: Cursor <cursoragent@cursor.com>
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package docgov
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestLockDocumentDuty_Memory(t *testing.T) {
|
|
ctx := context.Background()
|
|
engine := NewGovernanceEngine(nil)
|
|
doc, err := engine.CreateOrGetDocument(
|
|
ctx, "doc_lock_mem", 9, "intake", "锁定测试",
|
|
"V0.5", "ws/lock",
|
|
1, "A", 1, "A", 1, "A",
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("create: %v", err)
|
|
}
|
|
if doc.DutyLocked || doc.DutyPolicy != "" {
|
|
t.Fatalf("defaults: locked=%v policy=%q", doc.DutyLocked, doc.DutyPolicy)
|
|
}
|
|
if err := engine.LockDocumentDuty(ctx, doc.DocID, "author_only"); err != nil {
|
|
t.Fatalf("lock: %v", err)
|
|
}
|
|
got, err := engine.GetDocument(ctx, doc.DocID)
|
|
if err != nil {
|
|
t.Fatalf("get: %v", err)
|
|
}
|
|
if !got.DutyLocked || got.DutyPolicy != "author_only" {
|
|
t.Fatalf("after lock: locked=%v policy=%q", got.DutyLocked, got.DutyPolicy)
|
|
}
|
|
}
|
|
|
|
func TestListWorkflowDocuments_IncludesDutyPolicy_Memory(t *testing.T) {
|
|
ctx := context.Background()
|
|
engine := NewGovernanceEngine(nil)
|
|
doc, err := engine.CreateOrGetDocument(
|
|
ctx, "doc_proj9_intake", 9, "intake", "投影测试",
|
|
"V0.5", "ws/proj",
|
|
7, "编制", 7, "编制", 7, "编制",
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("create: %v", err)
|
|
}
|
|
if err := engine.LockDocumentDuty(ctx, doc.DocID, "author_only"); err != nil {
|
|
t.Fatalf("lock: %v", err)
|
|
}
|
|
list, err := engine.ListWorkflowDocumentsByProject(ctx, 9)
|
|
if err != nil {
|
|
t.Fatalf("list: %v", err)
|
|
}
|
|
if len(list) != 1 || list[0].DutyPolicy != "author_only" {
|
|
t.Fatalf("want duty_policy=author_only, got %+v", list)
|
|
}
|
|
}
|