From 2d1216fff4216a255bf208be758bc05093806d2f Mon Sep 17 00:00:00 2001 From: Mftee <113613891+mftee@users.noreply.github.com> Date: Fri, 29 May 2026 20:01:14 +0100 Subject: [PATCH 1/2] feat(mobile): add avatarUri and clearUser to userStore --- mobile/stores/userStore.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mobile/stores/userStore.ts b/mobile/stores/userStore.ts index 4accfad..2c940df 100644 --- a/mobile/stores/userStore.ts +++ b/mobile/stores/userStore.ts @@ -5,8 +5,11 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; interface UserState { displayName: string; theme: 'dark' | 'light' | 'system'; + avatarUri: string | null; setDisplayName: (name: string) => void; setTheme: (theme: 'dark' | 'light' | 'system') => void; + setAvatarUri: (uri: string | null) => void; + clearUser: () => void; } export const useUserStore = create()( @@ -14,12 +17,15 @@ export const useUserStore = create()( (set) => ({ displayName: '', theme: 'system', + avatarUri: null, setDisplayName: (name) => set({ displayName: name }), setTheme: (theme) => set({ theme }), + setAvatarUri: (uri) => set({ avatarUri: uri }), + clearUser: () => set({ displayName: '', theme: 'system', avatarUri: null }), }), { name: 'esustellar-user', storage: createJSONStorage(() => AsyncStorage), }, ), -); +); \ No newline at end of file From a13203cde0ca751634612fd60692974dea8cf8e3 Mon Sep 17 00:00:00 2001 From: Mftee <113613891+mftee@users.noreply.github.com> Date: Fri, 29 May 2026 20:01:17 +0100 Subject: [PATCH 2/2] test(mobile): add userStore unit tests --- mobile/__tests__/userStore.test.ts | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 mobile/__tests__/userStore.test.ts diff --git a/mobile/__tests__/userStore.test.ts b/mobile/__tests__/userStore.test.ts new file mode 100644 index 0000000..7abb91b --- /dev/null +++ b/mobile/__tests__/userStore.test.ts @@ -0,0 +1,31 @@ +import { useUserStore } from '../stores/userStore'; + +describe('useUserStore', () => { + beforeEach(() => + useUserStore.setState({ displayName: '', theme: 'system', avatarUri: null }), + ); + + it('sets display name', () => { + useUserStore.getState().setDisplayName('Alice'); + expect(useUserStore.getState().displayName).toBe('Alice'); + }); + + it('sets theme', () => { + useUserStore.getState().setTheme('dark'); + expect(useUserStore.getState().theme).toBe('dark'); + }); + + it('sets avatarUri', () => { + useUserStore.getState().setAvatarUri('file://avatar.png'); + expect(useUserStore.getState().avatarUri).toBe('file://avatar.png'); + }); + + it('clearUser resets all fields', () => { + useUserStore.getState().setDisplayName('Bob'); + useUserStore.getState().setTheme('light'); + useUserStore.getState().clearUser(); + expect(useUserStore.getState().displayName).toBe(''); + expect(useUserStore.getState().theme).toBe('system'); + expect(useUserStore.getState().avatarUri).toBeNull(); + }); +}); \ No newline at end of file