Ship signup sheet, subscribe reminders, cover crop, and theme updates.

Wire real WeChat app config, prefer activity cover over posters, and add admin cover cropping for the home banner.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Michelle Zan
2026-10-08 13:06:43 +08:00
co-authored by Cursor
parent cd05113755
commit 0ca2e87bf2
35 changed files with 968 additions and 184 deletions
+16 -1
View File
@@ -87,9 +87,17 @@ test('full flow: admin, past activity, signup, checkin, export', async () => {
const guest = await login('device-b')
const signup = await call('POST', '/api/signup', {
token: guest.token,
body: { activityId: '93', name: '张三', phone: '13800000000', company: '=cmd', sourceSharer: user.openid }
body: {
activityId: '93',
name: '张三',
phone: '13800000000',
company: '=cmd',
sourceSharer: user.openid,
remindStatus: 'accept'
}
})
assert.strictEqual(signup.status, 200)
assert.strictEqual(signup.body.data.remindAccepted, true)
const dup = await call('POST', '/api/signup', { token: guest.token, body: { activityId: '93', name: '张三', phone: '13800000000' } })
assert.strictEqual(dup.status, 400)
@@ -101,6 +109,13 @@ test('full flow: admin, past activity, signup, checkin, export', async () => {
const stats = await call('GET', '/api/admin/stats', { token: adminToken })
assert.strictEqual(stats.body.data.checkinCount, 1)
await call('PUT', '/api/admin/settings', { token: adminToken, body: { subscribeTmplId: 'tmpl_test_id' } })
const config = await call('GET', '/api/subscribe/config')
assert.deepStrictEqual(config.body.data.tmplIds, ['tmpl_test_id'])
const remind = await call('POST', '/api/admin/activities/93/remind', { token: adminToken, body: {} })
assert.strictEqual(remind.status, 200)
assert.strictEqual(remind.body.data.sent, 1)
const csv = await call('GET', `/api/admin/signups/export?token=${adminToken}`)
assert.strictEqual(csv.status, 200)
assert.match(csv.body, /张三,13800000000,'=cmd/)