From d7b19629035d3c74820e04a5d6988eee6eb6d75c Mon Sep 17 00:00:00 2001 From: Ryan Kegel Date: Sat, 18 Apr 2026 23:37:19 -0400 Subject: [PATCH] feat: add Daily Digest and Push Notifications toggles to User Profile with corresponding functionality --- frontend/vue-app/src/__tests__/UserProfile.spec.ts | 11 ++++++++++- .../vue-app/src/components/profile/UserProfile.vue | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/frontend/vue-app/src/__tests__/UserProfile.spec.ts b/frontend/vue-app/src/__tests__/UserProfile.spec.ts index 4d6ebd8..7e3f263 100644 --- a/frontend/vue-app/src/__tests__/UserProfile.spec.ts +++ b/frontend/vue-app/src/__tests__/UserProfile.spec.ts @@ -26,6 +26,14 @@ vi.mock('../stores/auth', () => ({ suppressForceLogout: mockSuppressForceLogout, })) +// Mock push subscription service +vi.mock('../services/pushSubscription', () => ({ + isSubscribedToPush: vi.fn().mockResolvedValue(false), + subscribeToPushWithResult: vi.fn().mockResolvedValue({ ok: true }), + unsubscribeFromPush: vi.fn().mockResolvedValue(undefined), + getPushPermissionState: vi.fn().mockReturnValue('default'), +})) + describe('UserProfile - Delete Account', () => { let wrapper: VueWrapper @@ -569,7 +577,8 @@ describe('UserProfile - Email Digest Toggle', () => { plugins: [mockRouter], stubs: { EntityEditForm: { - template: '
', + template: + '
', }, ModalDialog: { template: '
', diff --git a/frontend/vue-app/src/components/profile/UserProfile.vue b/frontend/vue-app/src/components/profile/UserProfile.vue index 1bcf484..3250fcf 100644 --- a/frontend/vue-app/src/components/profile/UserProfile.vue +++ b/frontend/vue-app/src/components/profile/UserProfile.vue @@ -317,17 +317,18 @@ async function resetPassword() { } } -async function toggleDigest(newValue: boolean) { +async function toggleDigest(newValue?: boolean) { + const value = newValue ?? !emailDigestEnabled.value digestError.value = '' savingDigest.value = true try { const res = await fetch('/api/user/profile', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email_digest_enabled: newValue }), + body: JSON.stringify({ email_digest_enabled: value }), }) if (!res.ok) throw new Error('Failed to update preference') - emailDigestEnabled.value = newValue + emailDigestEnabled.value = value } catch { digestError.value = 'Failed to save notification preference.' } finally {