From 34904d26cdad0ed725a87bdb23c6869d7e411384 Mon Sep 17 00:00:00 2001 From: Stephanie Freitag <stephanie.freitag@holi.team> Date: Mon, 31 Mar 2025 10:23:04 +0200 Subject: [PATCH] HOLI-11059: clean up old guest mode on web --- .../__tests__/guestModeStorage.web.test.ts | 23 +++++++++++++++++++ .../helpers/guestModeStorage.web.ts | 10 ++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/core/screens/onboarding/helpers/__tests__/guestModeStorage.web.test.ts b/core/screens/onboarding/helpers/__tests__/guestModeStorage.web.test.ts index 5dbcafd5fe..f5c6dd1b59 100644 --- a/core/screens/onboarding/helpers/__tests__/guestModeStorage.web.test.ts +++ b/core/screens/onboarding/helpers/__tests__/guestModeStorage.web.test.ts @@ -1,6 +1,7 @@ import { getGuestMode, storeGuestMode } from '@holi/core/screens/onboarding/helpers/guestModeStorage.web' import { getCookie, setCookie, deleteCookie } from 'cookies-next' import { logError } from '@holi/core/errors/helpers' +import AsyncStorage from '@react-native-async-storage/async-storage' jest.mock('@holi/core/errors/helpers', () => ({ logError: jest.fn(), @@ -17,7 +18,18 @@ jest.mock('cookies-next', () => { } }) +const mockDeleteStorage = AsyncStorage.removeItem as jest.Mock +jest.mock('@react-native-async-storage/async-storage', () => { + return { + removeItem: jest.fn(), + } +}) + describe('guestModeStorage', () => { + beforeEach(() => { + mockDeleteStorage.mockResolvedValue({}) + }) + it('should return true when guest mode is enabled', async () => { mockGetCookie.mockReturnValueOnce('true') @@ -74,4 +86,15 @@ describe('guestModeStorage', () => { location: 'guestModeStorage.storeGuestMode', }) }) + + it('should clean up old guest mode', async () => { + jest.useFakeTimers() + + await getGuestMode() + jest.runOnlyPendingTimers() + + expect(mockDeleteStorage).toHaveBeenCalledWith('guest_mode') + + jest.useRealTimers() + }) }) diff --git a/core/screens/onboarding/helpers/guestModeStorage.web.ts b/core/screens/onboarding/helpers/guestModeStorage.web.ts index c7ab3f08e9..9de10c8da1 100644 --- a/core/screens/onboarding/helpers/guestModeStorage.web.ts +++ b/core/screens/onboarding/helpers/guestModeStorage.web.ts @@ -1,5 +1,6 @@ import { logError } from '@holi/core/errors/helpers' import { getCookie, setCookie, deleteCookie } from 'cookies-next' +import AsyncStore from '@react-native-async-storage/async-storage' export const GUEST_MODE_COOKIE_NAME = 'guest_mode' const one_year_in_seconds: number = 60 * 60 * 24 * 365 @@ -17,10 +18,12 @@ export const storeGuestMode = async (guestMode?: boolean): Promise<void> => { }) } } + export const getGuestMode = async (): Promise<boolean> => { try { - const userData = getCookie(GUEST_MODE_COOKIE_NAME) - return userData ? true : false + const guestMode = getCookie(GUEST_MODE_COOKIE_NAME) + cleanUpOldGuestMode().catch(() => {}) + return !!guestMode } catch (error) { logError(error, 'Failed to get guest mode', { location: 'guestModeStorage.getGuestMode', @@ -30,3 +33,6 @@ export const getGuestMode = async (): Promise<boolean> => { } export const clearGuestMode = () => storeGuestMode() + +// Deprecated guest mode stored in AsyncStorage in 1.53 +const cleanUpOldGuestMode = () => AsyncStore.removeItem('guest_mode') -- GitLab