refactor: hide mail flags from frontend

This commit is contained in:
dreamhunter2333
2026-08-25 20:59:36 +08:00
parent de8920ccfd
commit b0e801995b
20 changed files with 143 additions and 181 deletions
+15 -15
View File
@@ -6,7 +6,7 @@ import {
seedTestMail,
} from '../../fixtures/test-helpers';
test.describe('Mail Flags', () => {
test.describe('Mail Read Status', () => {
test('new mail is unread and can be marked as read without changing other mailboxes', async ({ request }) => {
const first = await createTestAddress(request, 'mail-flags-first');
const second = await createTestAddress(request, 'mail-flags-second');
@@ -20,7 +20,7 @@ test.describe('Mail Flags', () => {
const { results } = await listRes.json();
expect(results).toHaveLength(1);
expect(results[0].flags).toBeUndefined();
expect(results[0].mail_flags).toEqual({ unread: true });
expect(results[0].unread).toBe(true);
const unreadRes = await request.get(
`${WORKER_URL}/api/mails?limit=10&offset=0&read_status=unread`,
@@ -28,26 +28,26 @@ test.describe('Mail Flags', () => {
);
expect((await unreadRes.json()).results).toHaveLength(1);
const deniedRes = await request.patch(`${WORKER_URL}/api/mails/flags`, {
const deniedRes = await request.patch(`${WORKER_URL}/api/mails/read-status`, {
headers: { Authorization: `Bearer ${second.jwt}` },
data: { ids: [results[0].id], flag: 'unread', action: 'clear' },
data: { ids: [results[0].id], action: 'read' },
});
expect(deniedRes.ok()).toBe(true);
expect((await deniedRes.json()).changes).toBe(0);
const updateRes = await request.patch(`${WORKER_URL}/api/mails/flags`, {
const updateRes = await request.patch(`${WORKER_URL}/api/mails/read-status`, {
headers: { Authorization: `Bearer ${first.jwt}` },
data: { ids: [results[0].id], flag: 'unread', action: 'clear' },
data: { ids: [results[0].id], action: 'read' },
});
expect(updateRes.ok()).toBe(true);
const updateResult = await updateRes.json();
expect(updateResult.changes).toBe(1);
expect(updateResult.results[0].mail_flags).toEqual({ unread: false });
expect(updateResult.results[0].unread).toBe(false);
const updatedListRes = await request.get(`${WORKER_URL}/api/mails?limit=10&offset=0`, {
headers: { Authorization: `Bearer ${first.jwt}` },
});
expect((await updatedListRes.json()).results[0].mail_flags).toEqual({ unread: false });
expect((await updatedListRes.json()).results[0].unread).toBe(false);
const unreadAfterUpdateRes = await request.get(
`${WORKER_URL}/api/mails?limit=10&offset=0&read_status=unread`,
@@ -55,26 +55,26 @@ test.describe('Mail Flags', () => {
);
expect((await unreadAfterUpdateRes.json()).results).toHaveLength(0);
const toggleRes = await request.patch(`${WORKER_URL}/api/mails/flags`, {
const toggleRes = await request.patch(`${WORKER_URL}/api/mails/read-status`, {
headers: { Authorization: `Bearer ${first.jwt}` },
data: { ids: [results[0].id], flag: 'unread', action: 'toggle' },
data: { ids: [results[0].id], action: 'toggle' },
});
expect(toggleRes.ok()).toBe(true);
expect((await toggleRes.json()).results[0].mail_flags).toEqual({ unread: true });
expect((await toggleRes.json()).results[0].unread).toBe(true);
} finally {
await deleteAddress(request, first.jwt);
await deleteAddress(request, second.jwt);
}
});
test('rejects unsupported flag names and actions', async ({ request }) => {
test('rejects unsupported read-status actions', async ({ request }) => {
const { jwt } = await createTestAddress(request, 'mail-flags-invalid');
try {
for (const data of [
{ ids: [1], flag: 'flagged', action: 'set' },
{ ids: [1], flag: 'unread', action: 'invalid' },
{ ids: [1], action: 'invalid' },
{ ids: [1] },
]) {
const res = await request.patch(`${WORKER_URL}/api/mails/flags`, {
const res = await request.patch(`${WORKER_URL}/api/mails/read-status`, {
headers: { Authorization: `Bearer ${jwt}` },
data,
});