From d4ab66c60d6bb40d3591cf14a2670af0c17597ce Mon Sep 17 00:00:00 2001 From: Nick Diehl <47604184+ncdiehl11@users.noreply.github.com> Date: Wed, 22 Jan 2025 10:34:01 -0500 Subject: [PATCH] test(protocol-designer): add tests for InitializationSettings and formToArgs (#17319) Adds a few unit tests for `InitializationSettings` component and `absorbanceReaderFormToArgs` ahead of step generation. Closes AUTH-1316 --- .../__tests__/InitializationSettings.test.tsx | 83 ++++++++ .../test/absorbanceReaderFormToArgs.test.ts | 185 ++++++++++++++++++ 2 files changed, 268 insertions(+) create mode 100644 protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/AbsorbanceReaderTools/__tests__/InitializationSettings.test.tsx create mode 100644 protocol-designer/src/steplist/formLevel/stepFormToArgs/test/absorbanceReaderFormToArgs.test.ts diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/AbsorbanceReaderTools/__tests__/InitializationSettings.test.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/AbsorbanceReaderTools/__tests__/InitializationSettings.test.tsx new file mode 100644 index 00000000000..06448dec42d --- /dev/null +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/StepTools/AbsorbanceReaderTools/__tests__/InitializationSettings.test.tsx @@ -0,0 +1,83 @@ +import { screen } from '@testing-library/react' +import { describe, it, expect } from 'vitest' +import { i18n } from '../../../../../../../assets/localization' +import { renderWithProviders } from '../../../../../../../__testing-utils__' +import { InitializationSettings } from '../InitializationSettings' +import type { ComponentProps } from 'react' +import type { Initialization } from '@opentrons/step-generation' + +// Mocking constants +const INITIALIZATION_SINGLE_NO_REFERENCE: Initialization = { + mode: 'single', + wavelengths: [450], +} +const INITIALIZATION_SINGLE_REFERENCE: Initialization = { + mode: 'single', + wavelengths: [450], + referenceWavelength: 600, +} +const INITIALIZATION_MULTI: Initialization = { + mode: 'multi', + wavelengths: [450, 600], +} +const INITIALIZATION_MULTI_UNKOWN_COLOR: Initialization = { + mode: 'multi', + wavelengths: [450, 700], +} + +const render = (props: ComponentProps) => { + return renderWithProviders(, { + i18nInstance: i18n, + })[0] +} + +describe('InitializationSettings', () => { + let props: ComponentProps + it('renders no settings message when initialization is null', () => { + props = { initialization: null } + render(props) + + expect( + screen.getByText('Current initialization settings') + ).toBeInTheDocument() + expect(screen.getByText('No settings defined')).toBeInTheDocument() + }) + + it('renders single mode wavelength and its color correctly', () => { + props = { initialization: INITIALIZATION_SINGLE_NO_REFERENCE } + render(props) + expect( + screen.getByText('Current initialization settings') + ).toBeInTheDocument() + expect(screen.getByText('450 nm (Blue)')).toBeInTheDocument() + }) + it('renders single mode wavelength with reference and their respective colors correctly', () => { + props = { initialization: INITIALIZATION_SINGLE_REFERENCE } + render(props) + expect( + screen.getByText('Current initialization settings') + ).toBeInTheDocument() + expect(screen.getByText('450 nm (Blue)')).toBeInTheDocument() + expect( + screen.getByText('600 nm (Orange, reference wavelength)') + ).toBeInTheDocument() + }) + it('renders multi mode wavelength and their respective colors correctly', () => { + props = { initialization: INITIALIZATION_MULTI } + render(props) + expect( + screen.getByText('Current initialization settings') + ).toBeInTheDocument() + expect(screen.getByText('450 nm (Blue)')).toBeInTheDocument() + expect(screen.getByText('600 nm (Orange)')).toBeInTheDocument() + }) + it('renders multi mode wavelength and their respective colors correctly with unkown color', () => { + props = { initialization: INITIALIZATION_MULTI_UNKOWN_COLOR } + render(props) + expect( + screen.getByText('Current initialization settings') + ).toBeInTheDocument() + expect(screen.getByText('450 nm (Blue)')).toBeInTheDocument() + expect(screen.getByText('700 nm')).toBeInTheDocument() + }) +}) diff --git a/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/absorbanceReaderFormToArgs.test.ts b/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/absorbanceReaderFormToArgs.test.ts new file mode 100644 index 00000000000..c72d9b08e59 --- /dev/null +++ b/protocol-designer/src/steplist/formLevel/stepFormToArgs/test/absorbanceReaderFormToArgs.test.ts @@ -0,0 +1,185 @@ +import { it, describe, expect } from 'vitest' +import { absorbanceReaderFormToArgs } from '../absorbanceReaderFormToArgs' +import type { HydratedAbsorbanceReaderFormData } from '../../../../form-types' + +describe('absorbanceReaderFormToArgs', () => { + it('returns absorbance reader initialize command creator for single mode with reference', () => { + const formData: HydratedAbsorbanceReaderFormData = { + absorbanceReaderFormType: 'absorbanceReaderInitialize', + fileName: null, + id: 'stepId', + lidOpen: null, + mode: 'single', + moduleId: 'absorbanceReaderId', + referenceWavelength: '500', + referenceWavelengthActive: true, + stepName: 'absorbance reader step', + stepDetails: '', + stepType: 'absorbanceReader', + wavelengths: ['450'], + } + + const expected = { + moduleId: 'absorbanceReaderId', + commandCreatorFnName: 'absorbanceReaderInitialize', + measureMode: 'single', + sampleWavelengths: [450], + referenceWavelength: 500, + description: '', + name: 'absorbance reader step', + } + expect(absorbanceReaderFormToArgs(formData)).toEqual(expected) + }) + it('returns absorbance reader initialize command creator for single mode with reference, ignorning wavelengths for i > 0', () => { + const formData: HydratedAbsorbanceReaderFormData = { + absorbanceReaderFormType: 'absorbanceReaderInitialize', + fileName: null, + id: 'stepId', + lidOpen: null, + mode: 'single', + moduleId: 'absorbanceReaderId', + referenceWavelength: '500', + referenceWavelengthActive: true, + stepName: 'absorbance reader step', + stepDetails: '', + stepType: 'absorbanceReader', + wavelengths: ['450', '600'], + } + + const expected = { + moduleId: 'absorbanceReaderId', + commandCreatorFnName: 'absorbanceReaderInitialize', + measureMode: 'single', + sampleWavelengths: [450], + referenceWavelength: 500, + description: '', + name: 'absorbance reader step', + } + expect(absorbanceReaderFormToArgs(formData)).toEqual(expected) + }) + it('returns absorbance reader initialize command creator for single mode without reference active', () => { + const formData: HydratedAbsorbanceReaderFormData = { + absorbanceReaderFormType: 'absorbanceReaderInitialize', + fileName: null, + id: 'stepId', + lidOpen: null, + mode: 'single', + moduleId: 'absorbanceReaderId', + referenceWavelength: '500', + referenceWavelengthActive: false, + stepName: 'absorbance reader step', + stepDetails: '', + stepType: 'absorbanceReader', + wavelengths: ['450'], + } + + const expected = { + moduleId: 'absorbanceReaderId', + commandCreatorFnName: 'absorbanceReaderInitialize', + measureMode: 'single', + sampleWavelengths: [450], + description: '', + name: 'absorbance reader step', + } + expect(absorbanceReaderFormToArgs(formData)).toEqual(expected) + }) + it('returns absorbance reader initialize command creator for multi mode', () => { + const formData: HydratedAbsorbanceReaderFormData = { + absorbanceReaderFormType: 'absorbanceReaderInitialize', + fileName: null, + id: 'stepId', + lidOpen: null, + mode: 'multi', + moduleId: 'absorbanceReaderId', + referenceWavelength: null, + referenceWavelengthActive: false, + stepName: 'absorbance reader step', + stepDetails: '', + stepType: 'absorbanceReader', + wavelengths: ['450', '600'], + } + + const expected = { + moduleId: 'absorbanceReaderId', + commandCreatorFnName: 'absorbanceReaderInitialize', + measureMode: 'multi', + sampleWavelengths: [450, 600], + description: '', + name: 'absorbance reader step', + } + expect(absorbanceReaderFormToArgs(formData)).toEqual(expected) + }) + it('returns absorbance reader read command creator', () => { + const formData: HydratedAbsorbanceReaderFormData = { + absorbanceReaderFormType: 'absorbanceReaderRead', + fileName: 'output_path.csv', + id: 'stepId', + lidOpen: null, + mode: 'multi', + moduleId: 'absorbanceReaderId', + referenceWavelength: null, + referenceWavelengthActive: false, + stepName: 'absorbance reader step', + stepDetails: '', + stepType: 'absorbanceReader', + wavelengths: [], + } + + const expected = { + moduleId: 'absorbanceReaderId', + commandCreatorFnName: 'absorbanceReaderRead', + fileName: 'output_path.csv', + description: '', + name: 'absorbance reader step', + } + expect(absorbanceReaderFormToArgs(formData)).toEqual(expected) + }) + it('returns absorbance reader lid command creator to open lid', () => { + const formData: HydratedAbsorbanceReaderFormData = { + absorbanceReaderFormType: 'absorbanceReaderLid', + fileName: null, + id: 'stepId', + lidOpen: true, + mode: 'single', + moduleId: 'absorbanceReaderId', + referenceWavelength: null, + referenceWavelengthActive: false, + stepName: 'absorbance reader step', + stepDetails: '', + stepType: 'absorbanceReader', + wavelengths: [], + } + + const expected = { + moduleId: 'absorbanceReaderId', + commandCreatorFnName: 'absorbanceReaderOpenLid', + description: '', + name: 'absorbance reader step', + } + expect(absorbanceReaderFormToArgs(formData)).toEqual(expected) + }) + it('returns absorbance reader lid command creator to close lid', () => { + const formData: HydratedAbsorbanceReaderFormData = { + absorbanceReaderFormType: 'absorbanceReaderLid', + fileName: null, + id: 'stepId', + lidOpen: false, + mode: 'single', + moduleId: 'absorbanceReaderId', + referenceWavelength: null, + referenceWavelengthActive: false, + stepName: 'absorbance reader step', + stepDetails: '', + stepType: 'absorbanceReader', + wavelengths: [], + } + + const expected = { + moduleId: 'absorbanceReaderId', + commandCreatorFnName: 'absorbanceReaderCloseLid', + description: '', + name: 'absorbance reader step', + } + expect(absorbanceReaderFormToArgs(formData)).toEqual(expected) + }) +})