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 & 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 = { 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}`, + }) + } } }