Compare commits

...

3 commits

Author SHA1 Message Date
f66189cfd6 fix(ci): seed test data before booting the server
Some checks failed
Test / vitest (push) Successful in 11m17s
Test / playwright (push) Failing after 6m48s
Test / visual (push) Failing after 6m41s
Test / Notify on failure (push) Successful in 2s
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'.
2026-05-01 10:13:24 +01:00
1578055a27 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.
2026-05-01 10:13:21 +01:00
6e98720310 test(seed): add pending_payment persona for wave-slack §7.3
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.
2026-05-01 10:13:18 +01:00
4 changed files with 39 additions and 18 deletions

View file

@ -53,6 +53,8 @@ jobs:
- name: MongoDB log on failure - name: MongoDB log on failure
if: failure() if: failure()
run: docker logs mongo-ci || true 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 - run: npm run build
- name: Start server - name: Start server
run: node .output/server/index.mjs > /tmp/server.log 2>&1 & run: node .output/server/index.mjs > /tmp/server.log 2>&1 &
@ -121,6 +123,8 @@ jobs:
- name: MongoDB log on failure - name: MongoDB log on failure
if: failure() if: failure()
run: docker logs mongo-ci || true 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 - run: npm run build
- name: Start server - name: Start server
run: node .output/server/index.mjs > /tmp/server.log 2>&1 & run: node .output/server/index.mjs > /tmp/server.log 2>&1 &

View file

@ -28,9 +28,9 @@ test.describe('Member dashboard — Slack-coming note (§7)', () => {
test('hides note for pending_payment member (7.3)', async ({ browser }) => { test('hides note for pending_payment member (7.3)', async ({ browser }) => {
const context = await browser.newContext() const context = await browser.newContext()
const page = await context.newPage() 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 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 expect(page.getByText(SLACK_NOTE_RE)).toHaveCount(0)
await context.close() await context.close()
}) })

View file

@ -274,6 +274,18 @@ const sampleMembers = [
createdAt: new Date('2025-06-01'), createdAt: new Date('2025-06-01'),
lastLogin: new Date('2026-04-04'), 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 = { const TEST_ADMIN_BOARD = {

View file

@ -24,22 +24,27 @@ export default defineEventHandler(async (event) => {
let channelName = body.name let channelName = body.name
if (!slackChannelId) { if (!slackChannelId) {
const slack = getSlackAdminService() if (process.env.ALLOW_DEV_TEST_ENDPOINTS === 'true') {
if (!slack) { slackChannelId = `dev-stub-${Date.now()}`
throw createError({ console.log('[slack] DEV MODE — skipping createChannel', { name: body.name, slackChannelId })
statusCode: 500, } else {
statusMessage: 'Slack integration not configured', const slack = getSlackAdminService()
}) if (!slack) {
} throw createError({
try { statusCode: 500,
const created = await slack.createChannel(body.name) statusMessage: 'Slack integration not configured',
slackChannelId = created.id })
channelName = created.name }
} catch (err) { try {
throw createError({ const created = await slack.createChannel(body.name)
statusCode: 502, slackChannelId = created.id
statusMessage: `Failed to create Slack channel: ${err.data?.error || err.message}`, channelName = created.name
}) } catch (err) {
throw createError({
statusCode: 502,
statusMessage: `Failed to create Slack channel: ${err.data?.error || err.message}`,
})
}
} }
} }