GeneralActions.test.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import React from 'react';
  2. import { useToastStore } from '@/client/state/toastStore';
  3. import { getTRPCMock, getTRPCMockError } from '@/client/mocks/getTrpcMock';
  4. import { server } from '@/client/mocks/server';
  5. import { GeneralActions } from './GeneralActions';
  6. import { fireEvent, render, renderHook, screen, waitFor } from '../../../../../../tests/test-utils';
  7. describe('Test: GeneralActions', () => {
  8. it('should render without error', () => {
  9. render(<GeneralActions />);
  10. expect(screen.getByText('Actions')).toBeInTheDocument();
  11. });
  12. it('should show toast if update mutation fails', async () => {
  13. // arrange
  14. const { result } = renderHook(() => useToastStore());
  15. server.use(getTRPCMock({ path: ['system', 'getVersion'], response: { current: '1.0.0', latest: '2.0.0' } }));
  16. server.use(getTRPCMockError({ path: ['system', 'update'], type: 'mutation', status: 500, message: 'Something went wrong' }));
  17. render(<GeneralActions />);
  18. await waitFor(() => {
  19. expect(screen.getByText('Update to 2.0.0')).toBeInTheDocument();
  20. });
  21. const updateButton = screen.getByRole('button', { name: /Update/i });
  22. fireEvent.click(updateButton);
  23. // act
  24. const updateButtonModal = screen.getByRole('button', { name: /Update/i });
  25. fireEvent.click(updateButtonModal);
  26. // assert
  27. await waitFor(() => {
  28. expect(result.current.toasts).toHaveLength(1);
  29. expect(result.current.toasts[0].status).toEqual('error');
  30. expect(result.current.toasts[0].title).toEqual('Error');
  31. expect(result.current.toasts[0].description).toEqual('Something went wrong');
  32. });
  33. });
  34. it('should log user out if update is successful', async () => {
  35. // arrange
  36. localStorage.setItem('token', '123');
  37. server.use(getTRPCMock({ path: ['system', 'getVersion'], response: { current: '1.0.0', latest: '2.0.0' } }));
  38. server.use(getTRPCMock({ path: ['system', 'update'], response: true }));
  39. render(<GeneralActions />);
  40. await waitFor(() => {
  41. expect(screen.getByRole('button', { name: 'Update to 2.0.0' })).toBeInTheDocument();
  42. });
  43. const updateButton = screen.getByRole('button', { name: /Update to 2.0.0/i });
  44. fireEvent.click(updateButton);
  45. // act
  46. const updateButtonModal = screen.getByRole('button', { name: /Update/i });
  47. fireEvent.click(updateButtonModal);
  48. // assert
  49. await waitFor(() => {
  50. expect(localStorage.getItem('token')).toBeNull();
  51. });
  52. });
  53. it('should show toast if restart mutation fails', async () => {
  54. // arrange
  55. const { result } = renderHook(() => useToastStore());
  56. server.use(getTRPCMockError({ path: ['system', 'restart'], type: 'mutation', status: 500, message: 'Something went wrong' }));
  57. render(<GeneralActions />);
  58. const restartButton = screen.getByRole('button', { name: /Restart/i });
  59. // act
  60. fireEvent.click(restartButton);
  61. const restartButtonModal = screen.getByRole('button', { name: /Restart/i });
  62. fireEvent.click(restartButtonModal);
  63. // assert
  64. await waitFor(() => {
  65. expect(result.current.toasts).toHaveLength(1);
  66. expect(result.current.toasts[0].status).toEqual('error');
  67. expect(result.current.toasts[0].title).toEqual('Error');
  68. expect(result.current.toasts[0].description).toEqual('Something went wrong');
  69. });
  70. });
  71. it('should log user out if restart is successful', async () => {
  72. // arrange
  73. localStorage.setItem('token', '1234');
  74. server.use(getTRPCMock({ path: ['system', 'restart'], response: true }));
  75. render(<GeneralActions />);
  76. // Find button near the top of the page
  77. const restartButton = screen.getByRole('button', { name: /Restart/i });
  78. // act
  79. fireEvent.click(restartButton);
  80. const restartButtonModal = screen.getByRole('button', { name: /Restart/i });
  81. fireEvent.click(restartButtonModal);
  82. // assert
  83. await waitFor(() => {
  84. expect(localStorage.getItem('token')).toBeNull();
  85. });
  86. });
  87. });