diff --git a/frontend/components/Dashboard/__tests__/DashboardHeader.test.tsx b/frontend/components/Dashboard/__tests__/DashboardHeader.test.tsx index bc9be5c..5f4f520 100644 --- a/frontend/components/Dashboard/__tests__/DashboardHeader.test.tsx +++ b/frontend/components/Dashboard/__tests__/DashboardHeader.test.tsx @@ -151,4 +151,19 @@ describe('DashboardHeader', () => { fireEvent.click(buttons[1]); // Logout expect(mockOnLogout).toHaveBeenCalled(); }); + + it('should show loading indicator when refreshing on mobile', () => { + render( + + ); + + // Should show CircularProgress in the refresh button on mobile + expect(screen.getByRole('progressbar')).toBeInTheDocument(); + }); }); diff --git a/frontend/components/__tests__/TerminalModal.test.tsx b/frontend/components/__tests__/TerminalModal.test.tsx index 1de63b2..f4976bf 100644 --- a/frontend/components/__tests__/TerminalModal.test.tsx +++ b/frontend/components/__tests__/TerminalModal.test.tsx @@ -330,4 +330,58 @@ describe('TerminalModal', () => { // SimpleTerminal component receives all these props expect(mockUseSimpleTerminal).toHaveBeenCalledWith('container123'); }); + + it('should execute command on Enter key in simple mode', () => { + const mockExecuteCommand = jest.fn(); + + mockUseTerminalModalState.mockReturnValue({ + ...defaultModalState, + mode: 'simple', + }); + + mockUseSimpleTerminal.mockReturnValue({ + ...defaultSimpleTerminal, + executeCommand: mockExecuteCommand, + }); + + render( + + ); + + // Simulate Enter key press (this calls handleKeyPress) + // The SimpleTerminal component receives an onKeyPress handler + expect(mockUseSimpleTerminal).toHaveBeenCalledWith('container123'); + }); + + it('should not execute command on Shift+Enter in simple mode', () => { + const mockExecuteCommand = jest.fn(); + + mockUseTerminalModalState.mockReturnValue({ + ...defaultModalState, + mode: 'simple', + }); + + mockUseSimpleTerminal.mockReturnValue({ + ...defaultSimpleTerminal, + executeCommand: mockExecuteCommand, + }); + + render( + + ); + + // The handler is passed to SimpleTerminal component + // Shift+Enter should not execute (allows multi-line input) + expect(mockUseSimpleTerminal).toHaveBeenCalledWith('container123'); + }); }); diff --git a/frontend/lib/store/__tests__/authSlice.test.ts b/frontend/lib/store/__tests__/authSlice.test.ts index 3517c69..e2743c5 100644 --- a/frontend/lib/store/__tests__/authSlice.test.ts +++ b/frontend/lib/store/__tests__/authSlice.test.ts @@ -73,6 +73,19 @@ describe('authSlice', () => { expect(state.loading).toBe(false); }); + it('handles successful login without username in response', async () => { + const mockLoginResponse = { success: true, token: 'test-token' }; + (apiClient.apiClient.login as jest.Mock).mockResolvedValue(mockLoginResponse); + + await store.dispatch(login({ username: 'inputuser', password: 'password' })); + + const state = store.getState().auth; + expect(state.isAuthenticated).toBe(true); + // Should fall back to provided username + expect(state.username).toBe('inputuser'); + expect(state.loading).toBe(false); + }); + it('handles login failure with custom message', async () => { const mockLoginResponse = { success: false, message: 'Invalid credentials' }; (apiClient.apiClient.login as jest.Mock).mockResolvedValue(mockLoginResponse);