import assert from "node:assert/strict"; import { readFileSync } from "node:fs"; import { join } from "node:path"; import test from "node:test"; import type { Doc } from "../convex/_generated/dataModel"; import { RUN_EVENT_LEVELS, RUN_STATUSES, RUN_TYPES } from "../convex/domain"; type ExactSetEquality = [ Exclude, ] extends [never] ? [Exclude] extends [never] ? true : false : false; type IsRequired = undefined extends T ? false : true; type IsOptional = undefined extends T ? true : false; type AgentRunType = Doc<"agentRuns">["type"]; type AgentRunStatus = Doc<"agentRuns">["status"]; type AgentRunEventLevel = Doc<"agentRunEvents">["level"]; type AssertWebsiteEnrichmentRunType = Extract; type RunTypeFromDomain = (typeof RUN_TYPES)[number]; type RunStatusFromDomain = (typeof RUN_STATUSES)[number]; type RunEventLevelFromDomain = (typeof RUN_EVENT_LEVELS)[number]; type AssertLeadCrawlPageKind = Extract< Doc<"websiteCrawlPages">["pageKind"], "homepage" >; type AssertCrawlViewportDesktop = Extract< Doc<"websiteCrawlScreenshots">["viewport"], "desktop" >; type AssertCrawlViewportMobile = Extract< Doc<"websiteCrawlScreenshots">["viewport"], "mobile" >; type AssertNormalizedEmailType = Doc<"websiteEmailCandidates">["normalizedEmail"]; type AssertAcceptedEmailFlag = Doc<"websiteEmailCandidates">["accepted"]; type AssertTechnicalUsesHttps = Doc<"websiteTechnicalChecks">["usesHttps"]; type AssertTechnicalHasVisibleContactPath = Doc<"websiteTechnicalChecks">["hasVisibleContactPath"]; type AssertRunTypeInDomain = "website_enrichment" extends ( typeof RUN_TYPES ) [number] ? true : false; type AssertRunTypeEnumParity = ExactSetEquality; type AssertRunStatusEnumParity = ExactSetEquality< AgentRunStatus, RunStatusFromDomain >; type AssertRunEventLevelEnumParity = ExactSetEquality< AgentRunEventLevel, RunEventLevelFromDomain >; const schemaSource = readFileSync( join(process.cwd(), "convex", "schema.ts"), "utf8", ); const _assertRunTypeSchemaHasWebsiteEnrichment: AssertWebsiteEnrichmentRunType = "website_enrichment"; const _assertRunTypeInDomainHasWebsiteEnrichment: AssertRunTypeInDomain = true; const _assertRunTypeEnumParity: AssertRunTypeEnumParity = true; const _assertRunStatusEnumParity: AssertRunStatusEnumParity = true; const _assertRunEventLevelEnumParity: AssertRunEventLevelEnumParity = true; const _assertPageKindSchemaIncludesHomepage: AssertLeadCrawlPageKind = "homepage"; const _assertScreenshotViewportTypeDesktop: AssertCrawlViewportDesktop = "desktop"; const _assertScreenshotViewportTypeMobile: AssertCrawlViewportMobile = "mobile"; const _assertRunIdOptionalOnPages: IsOptional["runId"]> = true; const _assertRunIdOptionalOnLinks: IsOptional["runId"]> = true; const _assertRunIdOptionalOnEmailCandidates: IsOptional< Doc<"websiteEmailCandidates">["runId"] > = true; const _assertRunIdOptionalOnScreenshots: IsOptional< Doc<"websiteCrawlScreenshots">["runId"] > = true; const _assertRunIdOptionalOnTechnicalChecks: IsOptional< Doc<"websiteTechnicalChecks">["runId"] > = true; const _assertPagesHasCreatedAt: IsRequired["createdAt"]> = true; const _assertLinksHasCreatedAt: IsRequired["createdAt"]> = true; const _assertEmailCandidatesHasCreatedAt: IsRequired< Doc<"websiteEmailCandidates">["createdAt"] > = true; const _assertScreenshotsHasCreatedAt: IsRequired< Doc<"websiteCrawlScreenshots">["createdAt"] > = true; const _assertTechnicalChecksHasCreatedAt: IsRequired< Doc<"websiteTechnicalChecks">["createdAt"] > = true; const _assertWebsiteEmailCandidatesNormalizedEmail: AssertNormalizedEmailType = "user@example.com"; const _assertEmailAcceptedTrue: AssertAcceptedEmailFlag = true; const _assertEmailAcceptedFalse: AssertAcceptedEmailFlag = false; const _assertScreenshotStorageIdRequired: IsRequired< Doc<"websiteCrawlScreenshots">["storageId"] > = true; const _assertTechnicalUsesHttpsTrue: AssertTechnicalUsesHttps = true; const _assertTechnicalUsesHttpsFalse: AssertTechnicalUsesHttps = false; const _assertTechnicalMissingTitleFalse: Doc<"websiteTechnicalChecks">["missingTitle"] = false; const _assertTechnicalMissingMetaDescriptionTrue: Doc<"websiteTechnicalChecks">["missingMetaDescription"] = true; const _assertTechnicalHasVisibleContactPathTrue: AssertTechnicalHasVisibleContactPath = true; const _assertTechnicalHasVisibleContactPathFalse: AssertTechnicalHasVisibleContactPath = false; // Convex index structure can't be asserted from Doc types safely; this test validates // field contracts and value domains that are practical to verify at compile/runtime. test("website enrichment schema contracts are present", () => { assert.equal(_assertRunTypeSchemaHasWebsiteEnrichment, "website_enrichment"); assert.equal(_assertRunTypeInDomainHasWebsiteEnrichment, true); assert.equal(_assertRunTypeEnumParity, true); assert.equal(_assertRunStatusEnumParity, true); assert.equal(_assertRunEventLevelEnumParity, true); assert.equal(_assertPageKindSchemaIncludesHomepage, "homepage"); assert.equal(_assertScreenshotViewportTypeDesktop, "desktop"); assert.equal(_assertScreenshotViewportTypeMobile, "mobile"); assert.equal(_assertRunIdOptionalOnPages, true); assert.equal(_assertRunIdOptionalOnLinks, true); assert.equal(_assertRunIdOptionalOnEmailCandidates, true); assert.equal(_assertRunIdOptionalOnScreenshots, true); assert.equal(_assertRunIdOptionalOnTechnicalChecks, true); assert.equal(_assertPagesHasCreatedAt, true); assert.equal(_assertLinksHasCreatedAt, true); assert.equal(_assertEmailCandidatesHasCreatedAt, true); assert.equal(_assertScreenshotsHasCreatedAt, true); assert.equal(_assertTechnicalChecksHasCreatedAt, true); assert.equal(_assertScreenshotStorageIdRequired, true); assert.equal(_assertWebsiteEmailCandidatesNormalizedEmail, "user@example.com"); assert.equal(_assertEmailAcceptedTrue, true); assert.equal(_assertEmailAcceptedFalse, false); assert.equal(_assertTechnicalUsesHttpsTrue, true); assert.equal(_assertTechnicalUsesHttpsFalse, false); assert.equal(_assertTechnicalMissingTitleFalse, false); assert.equal(_assertTechnicalMissingMetaDescriptionTrue, true); assert.equal(_assertTechnicalHasVisibleContactPathTrue, true); assert.equal(_assertTechnicalHasVisibleContactPathFalse, false); }); test("agentRuns schema defines lead-aware active-run index", () => { assert.equal( schemaSource.includes('["type", "status", "leadId"]'), true, "Schema should include by_type_and_status_and_leadId index fields in order.", ); assert.equal( schemaSource.includes('by_type_and_status_and_leadId'), true, "Schema should define the by_type_and_status_and_leadId index.", ); });