From 12ab6e14308f46d7315e1e8e42b54ba88dfc8899 Mon Sep 17 00:00:00 2001 From: Bowl42 Date: Thu, 5 Mar 2026 22:09:08 +0800 Subject: [PATCH] test: add E2E test for duplicate send access request (#866) * test: add E2E test for duplicate send access request Add send-access.spec.ts verifying: - First request succeeds and balance matches DEFAULT_SEND_BALANCE - Duplicate request returns 400 (UNIQUE constraint) Co-Authored-By: Claude Opus 4.6 * test: assert response body contains 'Already' for duplicate send access Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- e2e/tests/api/send-access.spec.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 e2e/tests/api/send-access.spec.ts diff --git a/e2e/tests/api/send-access.spec.ts b/e2e/tests/api/send-access.spec.ts new file mode 100644 index 00000000..9ad3d2df --- /dev/null +++ b/e2e/tests/api/send-access.spec.ts @@ -0,0 +1,31 @@ +import { test, expect } from '@playwright/test'; +import { WORKER_URL, createTestAddress, requestSendAccess, deleteAddress } from '../../fixtures/test-helpers'; + +test.describe('Send Access', () => { + test('request send access succeeds once, duplicate returns 400', async ({ request }) => { + const { jwt } = await createTestAddress(request, 'send-access'); + + try { + // First request — should succeed + await requestSendAccess(request, jwt); + + // Verify balance is set via settings + const settingsRes = await request.get(`${WORKER_URL}/api/settings`, { + headers: { Authorization: `Bearer ${jwt}` }, + }); + expect(settingsRes.ok()).toBe(true); + const settings = await settingsRes.json(); + expect(settings.send_balance).toBe(10); + + // Duplicate request — should fail with 400 + const dupRes = await request.post(`${WORKER_URL}/api/requset_send_mail_access`, { + headers: { Authorization: `Bearer ${jwt}` }, + }); + expect(dupRes.status()).toBe(400); + const dupBody = await dupRes.text(); + expect(dupBody).toContain('Already'); + } finally { + await deleteAddress(request, jwt); + } + }); +});