test(integration): fix pre-existing bugs + post-Phase-4 contract update

Three fixes required to run the integration suite after Phase 4:

1. v3_vault_store_test.go makeVaultDoc: AgentID is *string (nullable),
   not string — was a pre-existing type error from v3 commit 8f56ddaa
   that blocked the test binary build. Pass &agentID.

2. vault_classify_test.go imports: remove unused `store/pg` import —
   pre-existing from v3 commit 4b7a2e6e.

3. TestVaultClassify_DeleteDocLinksByTypes_MultipleTypes: fix off-by-one
   in target-doc loop. Pre-existing runtime panic from v3 commit — loop
   created 7 targets but linkTypes slice has 8 entries, accessing docs[8]
   on a len-8 slice. Changed loop to `range 8`.

4. TestVaultClassify_DeleteDocLinksByTypes_NonExistentDoc: swap
   "fake-doc-id-12345" placeholder for a well-formed but unused UUID.
   Post-Phase-4, parseUUID rejects bare strings at the caller boundary;
   the "non-existent = no-op" contract requires a syntactically valid
   UUID. Per Q7 documented contract change.

Phase 4 Step 4g integration gate.
This commit is contained in:
viettranx committed 2026-04-11 21:22:23 +07:00
1 parent d29c3dd943
commit dd65fbcba0
2 files changed
+8 -6

No files matched your search

+1 -1
View File
@@ -21,7 +21,7 @@ func newVaultStore(db *sql.DB) *pg.PGVaultStore {
func makeVaultDoc(tenantID, agentID, path, title string) *store.VaultDocument {
return &store.VaultDocument{
TenantID: tenantID,
AgentID: agentID,
AgentID: &agentID,
Scope: "personal",
Path: path,
Title: title,
+7 -5
View File
@@ -8,7 +8,6 @@ import (
"testing"
"github.com/nextlevelbuilder/goclaw/internal/store"
"github.com/nextlevelbuilder/goclaw/internal/store/pg"
)
func TestVaultClassify_DeleteDocLinksByTypes_SingleType(t *testing.T) {
@@ -97,12 +96,12 @@ func TestVaultClassify_DeleteDocLinksByTypes_MultipleTypes(t *testing.T) {
tid := tenantID.String()
aid := agentID.String()
// Create source doc and 4 target docs (for 6 different link types + semantic)
// Create source doc and 8 target docs (one per link type: 6 classify + semantic + wikilink).
docSource := makeVaultDoc(tid, aid, "source.md", "Source")
docs := make([]*store.VaultDocument, 0)
docs = append(docs, docSource)
for i := 0; i < 7; i++ {
for i := range 8 {
doc := makeVaultDoc(tid, aid, "classify/target-"+string(rune('a'+i))+".md", "Target "+string(rune('A'+i)))
if err := vs.UpsertDocument(ctx, doc); err != nil {
t.Fatalf("UpsertDocument target %d: %v", i, err)
@@ -443,8 +442,11 @@ func TestVaultClassify_DeleteDocLinksByTypes_NonExistentDoc(t *testing.T) {
tid := tenantID.String()
// Try to delete links from non-existent doc — should succeed (no-op)
fakeDocID := "fake-doc-id-12345"
// Use a well-formed but non-existent UUID — post-Phase-4 parseUUID rejects
// bare strings like "fake-doc-id-12345" at the caller boundary, so the
// "non-existent doc = no-op" contract requires a syntactically valid UUID
// that just happens to not exist in the DB.
fakeDocID := "00000000-0000-4000-8000-000000000dea"
if err := vs.DeleteDocLinksByTypes(ctx, tid, fakeDocID, []string{"reference"}); err != nil {
t.Fatalf("DeleteDocLinksByTypes on non-existent doc: %v", err)
}