From bb834fc27a264baa3c89fe758aafcf11eba52ea9 Mon Sep 17 00:00:00 2001 From: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com> Date: Fri, 7 Aug 2026 22:17:31 +0000 Subject: [PATCH 1/2] chore: seed demo pull request tasks --- .../fixtures/__tests__/seed-demo-data.test.ts | 31 ++++++++++- packages/db/src/fixtures/seed-demo-data.ts | 55 +++++++++++++++++++ 2 files changed, 83 insertions(+), 3 deletions(-) diff --git a/packages/db/src/fixtures/__tests__/seed-demo-data.test.ts b/packages/db/src/fixtures/__tests__/seed-demo-data.test.ts index af75cb184..98c68b13d 100644 --- a/packages/db/src/fixtures/__tests__/seed-demo-data.test.ts +++ b/packages/db/src/fixtures/__tests__/seed-demo-data.test.ts @@ -6,6 +6,7 @@ import { environments, githubInstallations, repositories, + taskPullRequests, tasks, users, } from '../../schema'; @@ -13,6 +14,7 @@ import { db } from '../../db'; import { demoSeedEnvironmentName, demoSeedRepositories, + demoSeedPullRequests, demoSeedTasks, demoSeedUserId, seedDemoData, @@ -30,6 +32,9 @@ function withoutSettings(labels: string[]) { } async function cleanup() { + await db + .delete(taskPullRequests) + .where(inArray(taskPullRequests.taskId, demoTaskIds)); await db.delete(taskRuns).where(inArray(taskRuns.taskId, demoTaskIds)); await db.delete(tasks).where(inArray(tasks.id, demoTaskIds)); await db @@ -77,8 +82,11 @@ describe('seedDemoData', () => { expect(withoutSettings(summary.skipped)).toEqual([]); expect(withoutSettings(summary.created)).toHaveLength( - // user + installation + environment + repositories + tasks + task runs - 3 + demoSeedRepositories.length + demoSeedTasks.length * 2, + // user + installation + environment + repositories + tasks + task runs + PRs + 3 + + demoSeedRepositories.length + + demoSeedTasks.length * 2 + + demoSeedPullRequests.length, ); const settings = await db.query.deploymentSettings.findFirst({ @@ -134,6 +142,20 @@ describe('seedDemoData', () => { expect(taskRun).toBeDefined(); expect(taskRun?.status).toBe(seedTask.taskRunStatus); } + + const seededPullRequests = await db.query.taskPullRequests.findMany({ + where: inArray(taskPullRequests.taskId, demoTaskIds), + }); + expect(seededPullRequests).toHaveLength(demoSeedPullRequests.length); + for (const seedPullRequest of demoSeedPullRequests) { + expect( + seededPullRequests.some( + (pullRequest) => + pullRequest.taskId === seedPullRequest.taskId && + pullRequest.prUrl === seedPullRequest.prUrl, + ), + ).toBe(true); + } }); it('is idempotent and leaves existing rows untouched on re-run', async () => { @@ -147,7 +169,10 @@ describe('seedDemoData', () => { expect(summary.created).toEqual([]); expect(withoutSettings(summary.skipped)).toHaveLength( - 3 + demoSeedRepositories.length + demoSeedTasks.length * 2, + 3 + + demoSeedRepositories.length + + demoSeedTasks.length * 2 + + demoSeedPullRequests.length, ); const userAfter = await db.query.users.findFirst({ diff --git a/packages/db/src/fixtures/seed-demo-data.ts b/packages/db/src/fixtures/seed-demo-data.ts index f776f8c79..b66f453e0 100644 --- a/packages/db/src/fixtures/seed-demo-data.ts +++ b/packages/db/src/fixtures/seed-demo-data.ts @@ -10,6 +10,7 @@ import { githubInstallations, repositories, tasks, + taskPullRequests, users, } from '../schema'; import { db } from '../db'; @@ -68,6 +69,33 @@ export const demoSeedTasks = [ }, ] as const; +export const demoSeedPullRequests = [ + { + taskId: 'demo-seed-task-fix-login', + repository: 'roomote-demo/demo-web', + prNumber: 101, + prUrl: 'https://github.com/roomote-demo/demo-web/pull/101', + prTitle: 'Fix expired-session redirect handling', + status: 'open', + }, + { + taskId: 'demo-seed-task-add-webhooks', + repository: 'roomote-demo/demo-api', + prNumber: 201, + prUrl: 'https://github.com/roomote-demo/demo-api/pull/201', + prTitle: 'Add webhook retry policy', + status: 'draft', + }, + { + taskId: 'demo-seed-task-add-webhooks', + repository: 'roomote-demo/demo-web', + prNumber: 202, + prUrl: 'https://github.com/roomote-demo/demo-web/pull/202', + prTitle: 'Show webhook retry status', + status: 'open', + }, +] as const; + interface DemoSeedSummary { created: string[]; skipped: string[]; @@ -240,5 +268,32 @@ export async function seedDemoData(): Promise { record(`task run for ${task.id}`, !existingTaskRun); } + // A single-PR task and a split task keep the seeded dashboard useful for + // exercising task-level PR presentation without requiring remote GitHub data. + for (const pullRequest of demoSeedPullRequests) { + const existingPullRequest = await db.query.taskPullRequests.findFirst({ + where: and( + eq(taskPullRequests.taskId, pullRequest.taskId), + eq(taskPullRequests.prUrl, pullRequest.prUrl), + ), + }); + + if (!existingPullRequest) { + await db.insert(taskPullRequests).values({ + taskId: pullRequest.taskId, + sourceControlProvider: 'github', + host: 'github.com', + prUrl: pullRequest.prUrl, + prNumber: pullRequest.prNumber, + prTitle: pullRequest.prTitle, + repository: pullRequest.repository, + status: pullRequest.status, + createdByRoomote: true, + }); + } + + record(`pull request ${pullRequest.prUrl}`, !existingPullRequest); + } + return summary; } From 3e4b5bb6d699e03cbdac72469cd7bf7ad579cd59 Mon Sep 17 00:00:00 2001 From: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com> Date: Fri, 7 Aug 2026 22:43:26 +0000 Subject: [PATCH 2/2] fix: keep seeded PRs synthetic --- packages/db/src/fixtures/seed-demo-data.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/db/src/fixtures/seed-demo-data.ts b/packages/db/src/fixtures/seed-demo-data.ts index b66f453e0..3708cfc55 100644 --- a/packages/db/src/fixtures/seed-demo-data.ts +++ b/packages/db/src/fixtures/seed-demo-data.ts @@ -288,7 +288,6 @@ export async function seedDemoData(): Promise { prTitle: pullRequest.prTitle, repository: pullRequest.repository, status: pullRequest.status, - createdByRoomote: true, }); }