File
Blob: tests/worker/lib/published-pages.workers.test.ts
| 1 | import { beforeEach, describe, expect, it } from "vitest"; |
| 2 | import { ulid } from "ulid"; |
| 3 | |
| 4 | import { publishedPages } from "@/worker/db/d1/schema"; |
| 5 | import { resolvePublishedMentions } from "@/worker/lib/published-pages"; |
| 6 | import { getDb, resetD1Tables } from "@tests/worker/helpers/db"; |
| 7 | import { seedPage, seedUser, seedWorkspace } from "@tests/worker/helpers/seeds"; |
| 8 | |
| 9 | describe("published page D1 resolvers", () => { |
| 10 | beforeEach(async () => { |
| 11 | await resetD1Tables(); |
| 12 | }); |
| 13 | |
| 14 | it("resolves large mention sets in D1-sized batches", async () => { |
| 15 | const owner = await seedUser(); |
| 16 | const ws = await seedWorkspace({ owner_id: owner.id }); |
| 17 | const mentionIds = Array.from({ length: 105 }, () => ulid()); |
| 18 | const reachablePageId = mentionIds[104]!; |
| 19 | const reachablePage = await seedPage({ |
| 20 | id: reachablePageId, |
| 21 | workspace_id: ws.id, |
| 22 | created_by: owner.id, |
| 23 | title: "Published Reference", |
| 24 | icon: "P", |
| 25 | }); |
| 26 | |
| 27 | await getDb() |
| 28 | .insert(publishedPages) |
| 29 | .values({ workspace_id: ws.id, page_id: reachablePage.id, published_by: owner.id }); |
| 30 | |
| 31 | const mentions = await resolvePublishedMentions(getDb(), ws.id, mentionIds); |
| 32 | |
| 33 | expect(mentions.size).toBe(mentionIds.length); |
| 34 | expect(mentions.get(reachablePageId)).toEqual({ |
| 35 | pageId: reachablePageId, |
| 36 | reachable: true, |
| 37 | title: "Published Reference", |
| 38 | icon: "P", |
| 39 | }); |
| 40 | expect(mentions.get(mentionIds[0]!)).toEqual({ |
| 41 | pageId: mentionIds[0]!, |
| 42 | reachable: false, |
| 43 | title: null, |
| 44 | icon: null, |
| 45 | }); |
| 46 | }); |
| 47 | }); |