From 6e98720310118db94049037b72849b514ceb8b00 Mon Sep 17 00:00:00 2001 From: Jennie Robinson Faber Date: Fri, 1 May 2026 10:13:18 +0100 Subject: [PATCH 1/3] =?UTF-8?q?test(seed):=20add=20pending=5Fpayment=20per?= =?UTF-8?q?sona=20for=20wave-slack=20=C2=A77.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The §7.3 test referenced jennie@jenniefaber.com — the user's real email, never seeded — so the test only worked locally on the maintainer's machine. Add a generic 'pending-payment-test@example.test' persona to seed-members.js and point the test at it. --- e2e/wave-slack-onboarding.spec.js | 4 ++-- scripts/seed-members.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/e2e/wave-slack-onboarding.spec.js b/e2e/wave-slack-onboarding.spec.js index 4becf45..e68a3b3 100644 --- a/e2e/wave-slack-onboarding.spec.js +++ b/e2e/wave-slack-onboarding.spec.js @@ -28,9 +28,9 @@ test.describe('Member dashboard — Slack-coming note (§7)', () => { test('hides note for pending_payment member (7.3)', async ({ browser }) => { const context = await browser.newContext() const page = await context.newPage() - await loginAsMember(page, 'jennie@jenniefaber.com') + await loginAsMember(page, 'pending-payment-test@example.test') await page.goto('/member/dashboard') - await expect(page.getByRole('heading', { name: /Welcome.*Jennifer/i })).toBeVisible({ timeout: 15000 }) + await expect(page.getByRole('heading', { name: /Welcome.*Pending Payment Tester/i })).toBeVisible({ timeout: 15000 }) await expect(page.getByText(SLACK_NOTE_RE)).toHaveCount(0) await context.close() }) diff --git a/scripts/seed-members.js b/scripts/seed-members.js index 52f87a9..3611f12 100644 --- a/scripts/seed-members.js +++ b/scripts/seed-members.js @@ -274,6 +274,18 @@ const sampleMembers = [ createdAt: new Date('2025-06-01'), lastLogin: new Date('2026-04-04'), }, + { + email: 'pending-payment-test@example.test', + name: 'Pending Payment Tester', + circle: 'community', + contributionAmount: 5, + status: 'pending_payment', + slackInvited: false, + craftTags: [], + board: {}, + createdAt: new Date('2026-04-25'), + lastLogin: new Date('2026-04-29'), + }, ] const TEST_ADMIN_BOARD = { From 1578055a277d03fd46ba396d8923defbf67e54df Mon Sep 17 00:00:00 2001 From: Jennie Robinson Faber Date: Fri, 1 May 2026 10:13:21 +0100 Subject: [PATCH 2/3] feat(board-channels): skip Slack createChannel in dev/test mode Mirrors the dev-mode short-circuit in invite.post.js. Without SLACK_BOT_TOKEN, board-channel create returned 500 'Slack integration not configured', breaking e2e in CI. With ALLOW_DEV_TEST_ENDPOINTS=true, generate a stub channel ID and proceed; everything DB-side still runs. --- server/api/admin/board-channels.post.js | 37 ++++++++++++++----------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/server/api/admin/board-channels.post.js b/server/api/admin/board-channels.post.js index eea3efd..b49d81f 100644 --- a/server/api/admin/board-channels.post.js +++ b/server/api/admin/board-channels.post.js @@ -24,22 +24,27 @@ export default defineEventHandler(async (event) => { let channelName = body.name if (!slackChannelId) { - const slack = getSlackAdminService() - if (!slack) { - throw createError({ - statusCode: 500, - statusMessage: 'Slack integration not configured', - }) - } - try { - const created = await slack.createChannel(body.name) - slackChannelId = created.id - channelName = created.name - } catch (err) { - throw createError({ - statusCode: 502, - statusMessage: `Failed to create Slack channel: ${err.data?.error || err.message}`, - }) + if (process.env.ALLOW_DEV_TEST_ENDPOINTS === 'true') { + slackChannelId = `dev-stub-${Date.now()}` + console.log('[slack] DEV MODE — skipping createChannel', { name: body.name, slackChannelId }) + } else { + const slack = getSlackAdminService() + if (!slack) { + throw createError({ + statusCode: 500, + statusMessage: 'Slack integration not configured', + }) + } + try { + const created = await slack.createChannel(body.name) + slackChannelId = created.id + channelName = created.name + } catch (err) { + throw createError({ + statusCode: 502, + statusMessage: `Failed to create Slack channel: ${err.data?.error || err.message}`, + }) + } } } From f66189cfd61407eef149bde48d49c2db1b5af068 Mon Sep 17 00:00:00 2001 From: Jennie Robinson Faber Date: Fri, 1 May 2026 10:13:24 +0100 Subject: [PATCH 3/3] fix(ci): seed test data before booting the server The runner's Mongo is empty per run, so any e2e test that referenced seeded members (riley.johnson, etc.) or tags failed with 404 from loginAsMember or 'no tags visible'. Run seed-all.js + seed-tags.js between Mongo readiness and 'npm run build'. --- .forgejo/workflows/test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 4be035b..5c0ed37 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -53,6 +53,8 @@ jobs: - name: MongoDB log on failure if: failure() run: docker logs mongo-ci || true + - name: Seed test data + run: node scripts/seed-all.js && node scripts/seed-tags.js - run: npm run build - name: Start server run: node .output/server/index.mjs > /tmp/server.log 2>&1 & @@ -121,6 +123,8 @@ jobs: - name: MongoDB log on failure if: failure() run: docker logs mongo-ci || true + - name: Seed test data + run: node scripts/seed-all.js && node scripts/seed-tags.js - run: npm run build - name: Start server run: node .output/server/index.mjs > /tmp/server.log 2>&1 &