large mock refector hopefully done + no errors?
All checks were successful
Deploy to Test Environment / deploy-to-test (push) Successful in 1h13m59s

This commit is contained in:
2025-12-21 02:43:03 -08:00
parent 391d00ae15
commit c49e5f7019
77 changed files with 817 additions and 465 deletions

View File

@@ -71,7 +71,7 @@ describe('useAuth Hook and AuthProvider', () => {
// We verify that it starts in a loading state or quickly resolves to signed out
// depending on the execution speed.
// To avoid flakiness, we just ensure it is in a valid state structure.
expect(result.current.user).toBeNull();
expect(result.current.userProfile).toBeNull();
// It should eventually settle
await waitFor(() => {
expect(result.current.isLoading).toBe(false);
@@ -87,8 +87,7 @@ describe('useAuth Hook and AuthProvider', () => {
});
expect(result.current.authStatus).toBe('SIGNED_OUT');
expect(result.current.user).toBeNull();
expect(result.current.profile).toBeNull();
expect(result.current.userProfile).toBeNull();
});
it('sets state to AUTHENTICATED if a valid token is found', async () => {
@@ -106,8 +105,7 @@ describe('useAuth Hook and AuthProvider', () => {
});
expect(result.current.authStatus).toBe('AUTHENTICATED');
expect(result.current.user).toEqual(mockUser);
expect(result.current.profile).toEqual(mockProfile);
expect(result.current.userProfile).toEqual(mockProfile);
// Check that it was called at least once.
// React 18 Strict Mode might call effects twice in dev/test environment.
@@ -125,8 +123,7 @@ describe('useAuth Hook and AuthProvider', () => {
});
expect(result.current.authStatus).toBe('SIGNED_OUT');
expect(result.current.user).toBeNull();
expect(result.current.profile).toBeNull();
expect(result.current.userProfile).toBeNull();
expect(localStorageMock.removeItem).toHaveBeenCalledWith('authToken');
});
});
@@ -156,7 +153,7 @@ describe('useAuth Hook and AuthProvider', () => {
// 2. Perform login
await act(async () => {
console.log('[TEST-DEBUG] Calling login function...');
await result.current.login(mockUser, 'new-valid-token');
await result.current.login('new-valid-token', mockProfile);
console.log('[TEST-DEBUG] Login function promise resolved.');
});
@@ -172,8 +169,7 @@ describe('useAuth Hook and AuthProvider', () => {
});
console.log('[TEST-DEBUG] Final state after successful login:', result.current);
expect(result.current.user).toEqual(mockUser);
expect(result.current.profile).toEqual(mockProfile);
expect(result.current.userProfile).toEqual(mockProfile);
});
it('logs out and throws an error if profile fetch fails after login', async () => {
@@ -186,15 +182,15 @@ describe('useAuth Hook and AuthProvider', () => {
// The login function should reject the promise it returns.
await act(async () => {
await expect(result.current.login(mockUser, 'new-token')).rejects.toThrow(
await expect(result.current.login('new-token')).rejects.toThrow(
/Login succeeded, but failed to fetch your data/
);
});
// Should trigger the logout flow
expect(localStorageMock.removeItem).toHaveBeenCalledWith('authToken');
expect(result.current.authStatus).toBe('SIGNED_OUT');
expect(result.current.user).toBeNull();
expect(result.current.authStatus).toBe('SIGNED_OUT'); // This was a duplicate, fixed.
expect(result.current.userProfile).toBeNull();
});
});
@@ -211,7 +207,7 @@ describe('useAuth Hook and AuthProvider', () => {
const { result } = renderHook(() => useAuth(), { wrapper });
await waitFor(() => expect(result.current.authStatus).toBe('AUTHENTICATED'));
expect(result.current.user).not.toBeNull();
expect(result.current.userProfile).not.toBeNull();
act(() => {
result.current.logout();
@@ -219,8 +215,7 @@ describe('useAuth Hook and AuthProvider', () => {
expect(localStorageMock.removeItem).toHaveBeenCalledWith('authToken');
expect(result.current.authStatus).toBe('SIGNED_OUT');
expect(result.current.user).toBeNull();
expect(result.current.profile).toBeNull();
expect(result.current.userProfile).toBeNull();
});
});
@@ -237,7 +232,7 @@ describe('useAuth Hook and AuthProvider', () => {
const { result } = renderHook(() => useAuth(), { wrapper });
await waitFor(() => expect(result.current.authStatus).toBe('AUTHENTICATED'));
expect(result.current.profile?.full_name).toBe('Test User');
expect(result.current.userProfile?.full_name).toBe('Test User');
const updatedData: Partial<UserProfile> = {
full_name: 'Test User Updated',
@@ -248,10 +243,30 @@ describe('useAuth Hook and AuthProvider', () => {
result.current.updateProfile(updatedData);
});
expect(result.current.profile?.full_name).toBe('Test User Updated');
expect(result.current.profile?.points).toBe(150);
expect(result.current.userProfile?.full_name).toBe('Test User Updated');
expect(result.current.userProfile?.points).toBe(150);
// Ensure other data was not overwritten
expect(result.current.profile?.role).toBe('user');
expect(result.current.userProfile?.role).toBe('user');
});
it('should not update profile if user is not authenticated', async () => {
const { result } = renderHook(() => useAuth(), { wrapper });
// Wait for initial check to complete
await waitFor(() => {
expect(result.current.isLoading).toBe(false);
});
expect(result.current.authStatus).toBe('SIGNED_OUT');
expect(result.current.userProfile).toBeNull();
const updatedData: Partial<UserProfile> = {
full_name: 'Should Not Update',
};
act(() => result.current.updateProfile(updatedData));
expect(result.current.userProfile).toBeNull();
});
});
});