const express = require('express'); const request = require('supertest'); // Mock supabase jest.mock('../../src/utils/supabase', () => ({ getSupabaseServiceClient: () => ({ from: jest.fn().mockReturnValue({ upsert: jest.fn().mockResolvedValue({ data: null, error: null }), }), }), })); const waitlistRoutes = require('../../src/routes/waitlist'); const app = express(); app.use(express.json()); app.use('/api/waitlist', waitlistRoutes); describe('Honeypot spam protection', () => { test('accepts valid submission without honeypot', async () => { const res = await request(app) .post('/api/waitlist') .send({ email: 'test@example.com', list: 'merch' }); expect(res.status).toBe(200); expect(res.body.success).toBe(true); }); test('silently discards submission with honeypot filled', async () => { const res = await request(app) .post('/api/waitlist') .send({ email: 'bot@spam.com', list: 'merch', website: 'http://spam.com' }); expect(res.status).toBe(200); expect(res.body.success).toBe(true); // Bot thinks it succeeded, but nothing was stored }); test('rejects missing email', async () => { const res = await request(app) .post('/api/waitlist') .send({ list: 'merch' }); expect(res.status).toBe(400); }); test('rejects missing list', async () => { const res = await request(app) .post('/api/waitlist') .send({ email: 'test@example.com' }); expect(res.status).toBe(400); }); });