diff --git a/core/screens/onboarding/helpers/__tests__/guestModeStorage.web.test.ts b/core/screens/onboarding/helpers/__tests__/guestModeStorage.web.test.ts index 5dbcafd5fe46fa8d3258d1def8c54d9073f5beca..f5c6dd1b594461e076631772e1ce9ca35fc67180 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 c7ab3f08e959c12276379f2b029adb2f562639f0..9de10c8da135d4a9016c671b87faec6a68780771 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')