package httpapi import ( "knowledge-governance/internal/governance" "net/http" "net/http/httptest" "strings" "testing" "time" ) func TestContractSyncRejectsUnboundSourceBeforeCreatingJob(t *testing.T) { store := &fakeLibraryStore{current: &governance.LibraryVersion{SnapshotID: "current"}, grant: &governance.LibraryReleaseAuthorization{Scope: "internal", SnapshotID: "foreign", ExpiresAt: time.Now().Add(time.Hour)}} digest, _ := librarySyncParamsDigest("internal", "foreign") store.grant.ParamsDigest = digest config := Config{Store: store, ProductionReleaseRequestsEnabled: true, ProductionBackupRestoreVerified: true, LibraryProductionDatabaseURL: "postgres://unreachable.invalid/db", LibraryCapacityBudgetBytes: 1 << 40} request := httptest.NewRequest(http.MethodPost, "/api/v1/library/syncs", strings.NewReader(`{"scope":"internal","target_snapshot_id":"foreign"}`)) response := httptest.NewRecorder() librarySyncEnqueue(response, request, config) if store.createN != 0 { t.Fatalf("unbound foreign source created %d jobs; response=%s", store.createN, response.Body.String()) } }