InstallForm.test.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import React from 'react';
  2. import { fireEvent, render, screen, waitFor } from '../../../../../tests/test-utils';
  3. import { FieldTypesEnum, FormField } from '../../../../generated/graphql';
  4. import { InstallForm } from './InstallForm';
  5. describe('Test: InstallForm', () => {
  6. it('should render the form', () => {
  7. render(<InstallForm formFields={[]} onSubmit={jest.fn} />);
  8. expect(screen.getByText('Install')).toBeInTheDocument();
  9. });
  10. it('should render fields with correct types', () => {
  11. const formFields: FormField[] = [
  12. { env_variable: 'test', label: 'test', type: FieldTypesEnum.Text },
  13. { env_variable: 'test2', label: 'test2', type: FieldTypesEnum.Password },
  14. { env_variable: 'test3', label: 'test3', type: FieldTypesEnum.Email },
  15. { env_variable: 'test4', label: 'test4', type: FieldTypesEnum.Url },
  16. { env_variable: 'test5', label: 'test5', type: FieldTypesEnum.Number },
  17. ];
  18. render(<InstallForm formFields={formFields} onSubmit={jest.fn} />);
  19. expect(screen.getByLabelText('test')).toBeInTheDocument();
  20. expect(screen.getByLabelText('test2')).toBeInTheDocument();
  21. expect(screen.getByLabelText('test3')).toBeInTheDocument();
  22. expect(screen.getByLabelText('test4')).toBeInTheDocument();
  23. expect(screen.getByLabelText('test5')).toBeInTheDocument();
  24. });
  25. it('should call submit function with correct values', async () => {
  26. const formFields: FormField[] = [{ env_variable: 'test-env', label: 'test-field', type: FieldTypesEnum.Text }];
  27. const onSubmit = jest.fn();
  28. render(<InstallForm formFields={formFields} onSubmit={onSubmit} />);
  29. fireEvent.change(screen.getByLabelText('test-field'), { target: { value: 'test' } });
  30. screen.getByText('Install').click();
  31. await waitFor(() => {
  32. expect(onSubmit).toHaveBeenCalledWith({
  33. 'test-env': 'test',
  34. });
  35. });
  36. });
  37. it('should show validation error when required field is empty', async () => {
  38. const formFields: FormField[] = [{ env_variable: 'test-env', label: 'test-field', type: FieldTypesEnum.Text, required: true }];
  39. const onSubmit = jest.fn();
  40. render(<InstallForm formFields={formFields} onSubmit={onSubmit} />);
  41. screen.getByText('Install').click();
  42. await waitFor(() => {
  43. expect(screen.getByText('test-field is required')).toBeInTheDocument();
  44. });
  45. });
  46. it('should pre-fill fields if initialValues are provided', () => {
  47. const formFields: FormField[] = [{ env_variable: 'test-env', label: 'test-field', type: FieldTypesEnum.Text, required: true }];
  48. const onSubmit = jest.fn();
  49. render(<InstallForm formFields={formFields} onSubmit={onSubmit} initalValues={{ 'test-env': 'test' }} />);
  50. expect(screen.getByLabelText('test-field')).toHaveValue('test');
  51. });
  52. it('should render expose switch when app is exposable', () => {
  53. const formFields: FormField[] = [{ env_variable: 'test-env', label: 'test-field', type: FieldTypesEnum.Text, required: true }];
  54. const onSubmit = jest.fn();
  55. render(<InstallForm formFields={formFields} onSubmit={onSubmit} exposable />);
  56. expect(screen.getByLabelText('Expose app')).toBeInTheDocument();
  57. });
  58. });