From 5d498f2b06009644cdffed88b4fde0677bfe1a09 Mon Sep 17 00:00:00 2001 From: Alessandro Amantini Date: Thu, 26 Sep 2024 09:35:17 +0100 Subject: [PATCH] ISSUE #5173 - vertical calib is required --- .../src/v5/store/drawings/drawings.types.ts | 5 +- .../revisions/drawingRevisions.helpers.ts | 4 + .../revisions/drawingRevisions.types.ts | 3 +- .../createDrawingDialog.component.tsx | 51 +------ .../drawingDialogs/drawingForm.component.tsx | 135 ++++++++++++++++++ .../drawingDialogs/drawingForm.styles.ts | 44 ++++++ .../drawingDialogs/drawingsDialogs.hooks.ts | 17 ++- .../editDrawingDialog.component.tsx | 76 ++-------- .../sidebarForm/sidebarForm.component.tsx | 50 ++++++- .../uploadDrawingRevisionForm.component.tsx | 4 + .../uploadListItem.component.tsx | 3 + .../drawingSchemes/drawingSchemes.ts | 19 ++- .../drawingRevisions.fixtures.ts | 33 +++-- .../drawingRevisions.sagas.spec.ts | 3 + 14 files changed, 315 insertions(+), 132 deletions(-) create mode 100644 frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.component.tsx create mode 100644 frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.styles.ts diff --git a/frontend/src/v5/store/drawings/drawings.types.ts b/frontend/src/v5/store/drawings/drawings.types.ts index 6685f78471..44c8474890 100644 --- a/frontend/src/v5/store/drawings/drawings.types.ts +++ b/frontend/src/v5/store/drawings/drawings.types.ts @@ -35,7 +35,7 @@ export interface MinimumDrawing { export interface Calibration { verticalRange: Vector1D; - horizontal: { + horizontal?: { model: Vector3D, drawing: Vector2D, } @@ -50,7 +50,7 @@ export interface DrawingStats { }; number: string, calibrationStatus?: CalibrationStatus, - calibration?: Calibration, + calibration: Calibration, type: string, status: UploadStatus, errorReason?: { @@ -73,4 +73,5 @@ export type NewDrawing = { type: string; number: string; desc?: string; + calibration: Omit; }; diff --git a/frontend/src/v5/store/drawings/revisions/drawingRevisions.helpers.ts b/frontend/src/v5/store/drawings/revisions/drawingRevisions.helpers.ts index c5ba81702c..2fb1bb35f7 100644 --- a/frontend/src/v5/store/drawings/revisions/drawingRevisions.helpers.ts +++ b/frontend/src/v5/store/drawings/revisions/drawingRevisions.helpers.ts @@ -35,6 +35,10 @@ export const createDrawingFromRevisionBody = (body: CreateDrawingRevisionBody): number: body.drawingNumber, type: body.drawingType, desc: body.drawingDesc, + calibration: { + verticalRange: body.calibration.verticalRange, + units: body.calibration.units, + }, }); export const createFormDataFromRevisionBody = (body: CreateDrawingRevisionBody) => { diff --git a/frontend/src/v5/store/drawings/revisions/drawingRevisions.types.ts b/frontend/src/v5/store/drawings/revisions/drawingRevisions.types.ts index 096071b8a9..9a8d03075b 100644 --- a/frontend/src/v5/store/drawings/revisions/drawingRevisions.types.ts +++ b/frontend/src/v5/store/drawings/revisions/drawingRevisions.types.ts @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -import { CalibrationStatus } from '../drawings.types'; +import { Calibration, CalibrationStatus } from '../drawings.types'; export interface StatusCode { code: string, @@ -53,6 +53,7 @@ export type CreateDrawingRevisionBody = { drawingNumber: string; drawingType: string; drawingDesc?: string; + calibration: Omit; }; export type CreateDrawingRevisionPayload = { diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/createDrawingDialog.component.tsx b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/createDrawingDialog.component.tsx index a3be81575d..668477d383 100644 --- a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/createDrawingDialog.component.tsx +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/createDrawingDialog.component.tsx @@ -16,33 +16,23 @@ */ import { formatMessage } from '@/v5/services/intl'; -import { FormTextField, FormSelect } from '@controls/inputs/formInputs.component'; -import { MenuItem } from '@mui/material'; import { SubmitHandler } from 'react-hook-form'; import { FormModal } from '@controls/formModal/formModal.component'; -import { DrawingsHooksSelectors, ProjectsHooksSelectors, TeamspacesHooksSelectors } from '@/v5/services/selectorsHooks'; +import { ProjectsHooksSelectors, TeamspacesHooksSelectors } from '@/v5/services/selectorsHooks'; import { DrawingsActionsDispatchers } from '@/v5/services/actionsDispatchers'; -import { nameAlreadyExists, numberAlreadyExists } from '@/v5/validation/errors.helpers'; -import { UnhandledErrorInterceptor } from '@controls/errorMessage/unhandledErrorInterceptor/unhandledErrorInterceptor.component'; import { IFormInput, useDrawingForm } from './drawingsDialogs.hooks'; +import { DrawingForm } from './drawingForm.component'; export const CreateDrawingDialog = ({ open, onClickClose }) => { const teamspace = TeamspacesHooksSelectors.selectCurrentTeamspace(); const project = ProjectsHooksSelectors.selectCurrentProject(); - const types = DrawingsHooksSelectors.selectTypes(); const { onSubmitError, formData } = useDrawingForm(); - - const { - handleSubmit, - control, - formState, - formState: { errors }, - } = formData; + const { handleSubmit, formState } = formData; const onSubmit: SubmitHandler = async (body) => { try { - await new Promise((accept, reject ) => DrawingsActionsDispatchers.createDrawing(teamspace, project, body as any, accept, reject)); + await new Promise((accept, reject) => DrawingsActionsDispatchers.createDrawing(teamspace, project, body as any, accept, reject)); onClickClose(); } catch (err) { onSubmitError(err); @@ -59,38 +49,7 @@ export const CreateDrawingDialog = ({ open, onClickClose }) => { maxWidth="sm" {...formState} > - - - - - {types.map((type) => ( - {type} - ))} - - - + ); }; \ No newline at end of file diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.component.tsx b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.component.tsx new file mode 100644 index 0000000000..5af10292f9 --- /dev/null +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.component.tsx @@ -0,0 +1,135 @@ +/** + * Copyright (C) 2024 3D Repo Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { formatMessage } from '@/v5/services/intl'; +import { FormTextField, FormSelect, FormNumberField } from '@controls/inputs/formInputs.component'; +import { MenuItem } from '@mui/material'; +import { DrawingsHooksSelectors, ProjectsHooksSelectors } from '@/v5/services/selectorsHooks'; +import { nameAlreadyExists, numberAlreadyExists } from '@/v5/validation/errors.helpers'; +import { UnhandledErrorInterceptor } from '@controls/errorMessage/unhandledErrorInterceptor/unhandledErrorInterceptor.component'; +import { IDrawing } from '@/v5/store/drawings/drawings.types'; +import { ShareTextField } from '@controls/shareTextField'; +import { FormattedMessage } from 'react-intl'; +import { DoubleInputLineContainer, SubTitle, Title } from './drawingForm.styles'; +import { Gap } from '@controls/gap'; +import { MODEL_UNITS } from '../../models.helpers'; + +interface Props { + formData: any, + drawing?: IDrawing, +} + +export const DrawingForm = ({ formData, drawing }:Props) => { + const types = DrawingsHooksSelectors.selectTypes(); + const isProjectAdmin = ProjectsHooksSelectors.selectIsProjectAdmin(); + + const { formState: { errors }, control } = formData; + + return ( + <> + + <FormattedMessage + id="drawings.form.informationTitle" + defaultMessage="Drawing information" + /> + + {(drawing as any)?._id && ( + + )} + + + + {types.map((type) => ( + {type} + ))} + + + + + <FormattedMessage + defaultMessage="Calibration Information" + id="drawings.form.calibrationInformation" + /> + + + + + + + + + + {MODEL_UNITS.map(({ value, name }) => ( + {name} + ))} + + + + ); +}; \ No newline at end of file diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.styles.ts b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.styles.ts new file mode 100644 index 0000000000..6ca305cddf --- /dev/null +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingForm.styles.ts @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2024 3D Repo Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { Typography } from '@controls/typography'; +import styled from 'styled-components'; + +export const Title = styled(Typography).attrs({ variant: 'h5' })` + color: ${({ theme }) => theme.palette.secondary.main}; +`; + +export const SubTitle = styled(Typography).attrs({ variant: 'body1' })` + color: ${({ theme }) => theme.palette.base.main}; +`; + +export const DoubleInputLineContainer = styled.div` + display: grid; + grid-template-columns: 1fr 1fr; + width: 100%; + gap: 9px; + + & > * { + .MuiFormHelperText-root { + width: 200%; + } + + &:nth-of-type(2) .MuiFormHelperText-root { + display: none; + } + } +`; \ No newline at end of file diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingsDialogs.hooks.ts b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingsDialogs.hooks.ts index 4a57d6cbd4..b615ebb058 100644 --- a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingsDialogs.hooks.ts +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/drawingsDialogs.hooks.ts @@ -28,10 +28,13 @@ export interface IFormInput { name: string; number: string; type: string; - desc: string + desc: string; + calibration: { + verticalRange: [number, number]; + units: string; + }; } - export const useDrawingForm = (defaultValues?: IDrawing) => { const teamspace = TeamspacesHooksSelectors.selectCurrentTeamspace(); const project = ProjectsHooksSelectors.selectCurrentProject(); @@ -58,7 +61,9 @@ export const useDrawingForm = (defaultValues?: IDrawing) => { defaultValues, }); - const { getValues, setValue, trigger } = formData; + const { getValues, setValue, trigger, watch, formState: { dirtyFields } } = formData; + const verticalRange = watch('calibration.verticalRange'); + const onSubmitError = (err) => { if (nameAlreadyExists(err)) { setAlreadyExistingNames([getValues('name'), ...alreadyExistingNames]); @@ -83,5 +88,11 @@ export const useDrawingForm = (defaultValues?: IDrawing) => { DrawingsActionsDispatchers.fetchTypes(teamspace, project); }, [isAdmin]); + useEffect(() => { + if (dirtyFields.calibration?.verticalRange.some((v) => v)) { + trigger('calibration.verticalRange'); + } + }, [verticalRange?.[0], verticalRange?.[1]]); + return { onSubmitError, formData }; }; diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/editDrawingDialog.component.tsx b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/editDrawingDialog.component.tsx index b829236200..eebcd34d81 100644 --- a/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/editDrawingDialog.component.tsx +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/drawingDialogs/editDrawingDialog.component.tsx @@ -16,21 +16,17 @@ */ import { formatMessage } from '@/v5/services/intl'; -import { FormTextField, FormSelect } from '@controls/inputs/formInputs.component'; -import { MenuItem } from '@mui/material'; import { SubmitHandler } from 'react-hook-form'; import { FormModal } from '@controls/formModal/formModal.component'; -import { DrawingsHooksSelectors, ProjectsHooksSelectors, TeamspacesHooksSelectors } from '@/v5/services/selectorsHooks'; +import { ProjectsHooksSelectors, TeamspacesHooksSelectors } from '@/v5/services/selectorsHooks'; import { DrawingsActionsDispatchers } from '@/v5/services/actionsDispatchers'; -import { nameAlreadyExists, numberAlreadyExists } from '@/v5/validation/errors.helpers'; -import { UnhandledErrorInterceptor } from '@controls/errorMessage/unhandledErrorInterceptor/unhandledErrorInterceptor.component'; import { IFormInput, useDrawingForm } from './drawingsDialogs.hooks'; import { IDrawing } from '@/v5/store/drawings/drawings.types'; -import { ShareTextField } from '@controls/shareTextField'; -import { FormattedMessage } from 'react-intl'; -import { SectionTitle } from '../../settingsModal/settingsModal.styles'; import { dirtyValuesChanged } from '@/v5/helpers/form.helper'; import { pick } from 'lodash'; +import { DrawingForm } from './drawingForm.component'; +import { useEffect } from 'react'; +import { Loader } from '@/v4/routes/components/loader/loader.component'; interface Props { open: boolean; @@ -41,17 +37,9 @@ interface Props { export const EditDrawingDialog = ({ open, onClickClose, drawing }:Props) => { const teamspace = TeamspacesHooksSelectors.selectCurrentTeamspace(); const project = ProjectsHooksSelectors.selectCurrentProject(); - const types = DrawingsHooksSelectors.selectTypes(); - const isProjectAdmin = ProjectsHooksSelectors.selectIsProjectAdmin(); const { onSubmitError, formData } = useDrawingForm(drawing); - - const { - handleSubmit, - control, - formState, - formState: { errors }, - } = formData; + const { handleSubmit, formState } = formData; const onSubmit: SubmitHandler = async (body) => { try { @@ -65,6 +53,10 @@ export const EditDrawingDialog = ({ open, onClickClose, drawing }:Props) => { } }; + useEffect(() => { + DrawingsActionsDispatchers.fetchCalibration(teamspace, project, drawing._id); + }, []); + return ( { {...formState} isValid={dirtyValuesChanged(formData, drawing) && formState.isValid} > - - - - - - - - - {types.map((type) => ( - {type} - ))} - - - + {drawing.calibration.units + ? + : + } ); }; \ No newline at end of file diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/sidebarForm/sidebarForm.component.tsx b/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/sidebarForm/sidebarForm.component.tsx index 0be983aa6f..c4d8aefb18 100644 --- a/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/sidebarForm/sidebarForm.component.tsx +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/sidebarForm/sidebarForm.component.tsx @@ -19,16 +19,18 @@ import { formatMessage } from '@/v5/services/intl'; import { FormattedMessage } from 'react-intl'; import { useFormContext } from 'react-hook-form'; import { MenuItem } from '@mui/material'; -import { FormSelect, FormTextField } from '@controls/inputs/formInputs.component'; +import { FormNumberField, FormSelect, FormTextField } from '@controls/inputs/formInputs.component'; import { get } from 'lodash'; import { Heading, Title, FlexContainer } from './sidebarForm.styles'; -import { useContext } from 'react'; +import { useContext, useEffect } from 'react'; import { UploadFilesContext } from '@components/shared/uploadFiles/uploadFilesContext'; import { DrawingsHooksSelectors } from '@/v5/services/selectorsHooks'; +import { MODEL_UNITS } from '../../../models.helpers'; +import { DoubleInputLineContainer } from '../../drawingDialogs/drawingForm.styles'; export const SidebarForm = () => { const types = DrawingsHooksSelectors.selectTypes(); - const { getValues, formState: { errors } } = useFormContext(); + const { getValues, formState: { errors, dirtyFields }, trigger, watch } = useFormContext(); const { fields, selectedId } = useContext(UploadFilesContext); // @ts-ignore const selectedIndex = fields.findIndex(({ uploadId }) => uploadId === selectedId); @@ -36,6 +38,13 @@ export const SidebarForm = () => { const [drawingId, drawingName] = getValues([`${revisionPrefix}.drawingId`, `${revisionPrefix}.drawingName`]); const disableDrawingFields = !(drawingName && !drawingId); const getError = (field: string) => get(errors, `${revisionPrefix}.${field}`); + const verticalRange = watch(`${revisionPrefix}.calibration.verticalRange`); + + useEffect(() => { + if (get(dirtyFields, `${revisionPrefix}.calibration.verticalRange`)?.some((v) => v)) { + trigger(`${revisionPrefix}.calibration.verticalRange`); + } + }, [verticalRange?.[0], verticalRange?.[1]]); return ( <> @@ -66,6 +75,41 @@ export const SidebarForm = () => { disabled={disableDrawingFields} /> + + + + + + + + + {MODEL_UNITS.map(({ value, name }) => ( + {name} + ))} + diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadDrawingRevisionForm.component.tsx b/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadDrawingRevisionForm.component.tsx index 9064d52bcc..ef2e190dac 100644 --- a/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadDrawingRevisionForm.component.tsx +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadDrawingRevisionForm.component.tsx @@ -145,6 +145,10 @@ export const UploadDrawingRevisionForm = ({ drawingNumber: drawing?.number || '', drawingDesc: drawing?.desc || '', drawingType: drawing?.type || '', + calibration: { + verticalRange: drawing?.calibration?.verticalRange || [0, 1], + units: drawing?.calibration?.units || 'mm', + }, }); } append(filesToAppend); diff --git a/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadList/uploadListItem/uploadListItem.component.tsx b/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadList/uploadListItem/uploadListItem.component.tsx index 6bd8cf6414..0d87b28310 100644 --- a/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadList/uploadListItem/uploadListItem.component.tsx +++ b/frontend/src/v5/ui/routes/dashboard/projects/drawings/uploadDrawingRevisionForm/uploadList/uploadListItem/uploadListItem.component.tsx @@ -91,6 +91,9 @@ export const UploadListItem = ({ drawingNumber: drawing?.number || '', drawingDesc: drawing?.desc || '', drawingType: drawing?.type || '', + // drawingBottomExtent: drawing?.bottomExtent ?? 0, + // drawingTopExtent: drawing?.topExtent ?? 0, + // drawingUnits: drawing?.units || '', }); useEffect(() => { diff --git a/frontend/src/v5/validation/drawingSchemes/drawingSchemes.ts b/frontend/src/v5/validation/drawingSchemes/drawingSchemes.ts index 7155eefb98..9bfc064124 100644 --- a/frontend/src/v5/validation/drawingSchemes/drawingSchemes.ts +++ b/frontend/src/v5/validation/drawingSchemes/drawingSchemes.ts @@ -16,7 +16,7 @@ */ import * as Yup from 'yup'; import { revisionDesc } from '../containerAndFederationSchemes/validators'; -import { desc, name, alphaNumericHyphens, uploadFile, trimmedString } from '../shared/validators'; +import { desc, name, alphaNumericHyphens, uploadFile, trimmedString, requiredNumber } from '../shared/validators'; import { formatMessage } from '@/v5/services/intl'; import { selectRevisions } from '@/v5/store/drawings/revisions/drawingRevisions.selectors'; import { getState } from '@/v4/modules/store'; @@ -49,10 +49,26 @@ const number = Yup.string() }, ); +const calibration = Yup.object().shape({ + units: Yup.string().required(formatMessage({ + id: 'validation.drawing.calibration.units.error.required', + defaultMessage: 'Units is a required field', + })), + verticalRange: Yup.array().of(requiredNumber().test( + 'bottomShouldBeSmallerThanTop', + formatMessage({ + id: 'validation.drawing.calibration.error.invalidRange', + defaultMessage: 'Bottom extent should be smaller than top', + }), + (v, ctx) => ctx.parent[0] < ctx.parent[1], + )), +}); + export const DrawingFormSchema = Yup.object().shape({ name, number, desc, + calibration, }); const isSameCode = (codeA = '', codeB = '') => codeA.toLocaleLowerCase().trim() === codeB.toLocaleLowerCase().trim(); @@ -110,6 +126,7 @@ export const SidebarSchema = Yup.object().shape({ }), ), drawingDesc: desc, + calibration, }); export const UploadsSchema = Yup.object().shape({ diff --git a/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts b/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts index 57171b7a69..42f0de46ef 100644 --- a/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts +++ b/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts @@ -18,6 +18,7 @@ import * as faker from 'faker'; import { CreateDrawingRevisionBody, IDrawingRevision } from '@/v5/store/drawings/revisions/drawingRevisions.types'; import { CalibrationStatus } from '@/v5/store/drawings/drawings.types'; +import { MODEL_UNITS } from '@/v5/ui/routes/dashboard/projects/models.helpers'; export const getFakeCalibrationStatus = () => faker.random.arrayElement([CalibrationStatus.CALIBRATED, CalibrationStatus.UNCONFIRMED, CalibrationStatus.UNCALIBRATED, CalibrationStatus.EMPTY]); @@ -35,16 +36,22 @@ export const drawingRevisionsMockFactory = (overrides?: Partial): CreateDrawingRevisionBody => ({ - file: new File(['file'], 'filename.dwg'), - drawingId: faker.datatype.uuid(), - drawingName: faker.random.words(1), - drawingType: 'Other', - drawingDesc: faker.random.words(3), - drawingNumber: faker.random.word(), - description: faker.random.word(), - name: faker.random.word(), - revCode: faker.random.word(), - statusCode: faker.random.word(), - ...overrides, -}); +export const mockCreateRevisionBody = (overrides?: Partial): CreateDrawingRevisionBody => { + const topExtent = faker.datatype.number(); + return { + file: new File(['file'], 'filename.dwg'), + drawingId: faker.datatype.uuid(), + drawingName: faker.random.words(1), + drawingType: 'Other', + drawingDesc: faker.random.words(3), + drawingNumber: faker.random.word(), + description: faker.random.word(), + drawingBottomExtent: faker.datatype.number(topExtent), + drawingTopExtent: topExtent, + drawingUnits: faker.random.arrayElement(MODEL_UNITS).value, + name: faker.random.word(), + revCode: faker.random.word(), + statusCode: faker.random.word(), + ...overrides, + }; +}; diff --git a/frontend/test/drawings/drawingRevisions/drawingRevisions.sagas.spec.ts b/frontend/test/drawings/drawingRevisions/drawingRevisions.sagas.spec.ts index 6256c62b6b..e82e1145a0 100644 --- a/frontend/test/drawings/drawingRevisions/drawingRevisions.sagas.spec.ts +++ b/frontend/test/drawings/drawingRevisions/drawingRevisions.sagas.spec.ts @@ -127,6 +127,9 @@ describe('Drawing Revisions: sagas', () => { number: mockBody.drawingNumber, type: mockBody.drawingType, desc: mockBody.drawingDesc, + bottomExtent: mockBody.drawingBottomExtent, + topExtent: mockBody.drawingTopExtent, + units: mockBody.drawingUnits, }; const spy = spyOnAxiosApiCallWithFile(api, 'post');