From 775d978284687ee04bbc0e659c5a588f23ec0456 Mon Sep 17 00:00:00 2001 From: Alessandro Amantini Date: Fri, 27 Sep 2024 14:24:21 +0100 Subject: [PATCH] ISSUE #5173 - add/fix settings tests --- .../drawingRevisions.fixtures.ts | 17 ++++++++--- .../drawingRevisions.sagas.spec.ts | 4 +-- frontend/test/drawings/drawings.fixtures.ts | 25 +++++++++++----- frontend/test/drawings/drawings.sagas.spec.ts | 30 ++++++++++++++++++- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts b/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts index 42f0de46ef..9819aae286 100644 --- a/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts +++ b/frontend/test/drawings/drawingRevisions/drawingRevisions.fixtures.ts @@ -19,6 +19,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'; +import { Vector1D } from '@/v5/ui/routes/dashboard/projects/calibration/calibration.types'; export const getFakeCalibrationStatus = () => faker.random.arrayElement([CalibrationStatus.CALIBRATED, CalibrationStatus.UNCONFIRMED, CalibrationStatus.UNCALIBRATED, CalibrationStatus.EMPTY]); @@ -36,8 +37,18 @@ export const drawingRevisionsMockFactory = (overrides?: Partial): CreateDrawingRevisionBody => { +export const getFakeVerticalRange = () => { const topExtent = faker.datatype.number(); + return [faker.datatype.number(topExtent), topExtent] as Vector1D; +}; + +export const getRandomUnits = () => faker.random.arrayElement(MODEL_UNITS).value; +export const getFakeDrawingSettingsCalibration = () => ({ + verticalRange: getFakeVerticalRange(), + units: getRandomUnits(), +}); + +export const mockCreateRevisionBody = (overrides?: Partial): CreateDrawingRevisionBody => { return { file: new File(['file'], 'filename.dwg'), drawingId: faker.datatype.uuid(), @@ -46,9 +57,7 @@ export const mockCreateRevisionBody = (overrides?: Partial { number: mockBody.drawingNumber, type: mockBody.drawingType, desc: mockBody.drawingDesc, - bottomExtent: mockBody.drawingBottomExtent, - topExtent: mockBody.drawingTopExtent, - units: mockBody.drawingUnits, + calibration: mockBody.calibration, }; const spy = spyOnAxiosApiCallWithFile(api, 'post'); diff --git a/frontend/test/drawings/drawings.fixtures.ts b/frontend/test/drawings/drawings.fixtures.ts index acaf198d68..e0e9230943 100644 --- a/frontend/test/drawings/drawings.fixtures.ts +++ b/frontend/test/drawings/drawings.fixtures.ts @@ -16,10 +16,10 @@ */ import * as faker from 'faker'; -import { IDrawing, DrawingStats, Calibration } from '@/v5/store/drawings/drawings.types'; +import { IDrawing, DrawingStats, Calibration, DrawingSettings } from '@/v5/store/drawings/drawings.types'; import { Role } from '@/v5/store/currentUser/currentUser.types'; import { UploadStatus } from '@/v5/store/containers/containers.types'; -import { getFakeCalibrationStatus } from './drawingRevisions/drawingRevisions.fixtures'; +import { getFakeCalibrationStatus, getFakeDrawingSettingsCalibration, getFakeVerticalRange, getRandomUnits } from './drawingRevisions/drawingRevisions.fixtures'; import { EMPTY_CALIBRATION } from '@/v5/ui/routes/dashboard/projects/calibration/calibration.constants'; import { Vector } from '@/v5/ui/routes/dashboard/projects/calibration/calibration.types'; @@ -55,14 +55,23 @@ export const prepareMockStats = (overrides?: Partial): DrawingStat ...overrides, }); -const getFakeCoordinate = (dimensions: number): any => Array(dimensions).map(() => faker.datatype.number()); -const getFakeCalibrationArray = (dimensions: number): Vector => [getFakeCoordinate(dimensions), getFakeCoordinate(dimensions)]; +export const getFakeCoordinate = (dimensions: number): any => Array(dimensions).map(() => faker.datatype.number()); +export const getFakeCalibrationArray = (dimensions: number): Vector => [getFakeCoordinate(dimensions), getFakeCoordinate(dimensions)]; export const prepareMockCalibration = (overrides?: Partial): Calibration => ({ horizontal: { drawing: getFakeCalibrationArray(2), model: getFakeCalibrationArray(3), }, - verticalRange: getFakeCoordinate(3), - units: faker.random.arrayElement(['mm', 'cm', 'dm', 'm', 'ft']), - ...overrides?.horizontal, -}) \ No newline at end of file + verticalRange: getFakeVerticalRange(), + units: getRandomUnits(), + ...overrides, +}); + +export const prepareMockSettings = (overrides?: Partial): DrawingSettings => ({ + calibration: getFakeDrawingSettingsCalibration(), + desc: faker.random.words(3), + type: faker.random.word(), + number: faker.random.alphaNumeric(), + name: faker.random.word(), + ...overrides, +}); \ No newline at end of file diff --git a/frontend/test/drawings/drawings.sagas.spec.ts b/frontend/test/drawings/drawings.sagas.spec.ts index ce65cb80d1..a41346a80c 100644 --- a/frontend/test/drawings/drawings.sagas.spec.ts +++ b/frontend/test/drawings/drawings.sagas.spec.ts @@ -19,13 +19,14 @@ import { DrawingsActions } from '@/v5/store/drawings/drawings.redux'; import { mockServer } from '../../internals/testing/mockServer'; import { pick } from 'lodash'; import { fullDrawing } from '@/v5/store/drawings/drawings.helpers'; -import { drawingMockFactory, prepareMockStats } from './drawings.fixtures'; +import { drawingMockFactory, prepareMockSettings, prepareMockStats } from './drawings.fixtures'; import { createTestStore, WaitForActions } from '../test.helpers'; import { ProjectsActions } from '@/v5/store/projects/projects.redux'; import { selectDrawingById, selectDrawings } from '@/v5/store/drawings/drawings.selectors'; import { DialogsTypes } from '@/v5/store/dialogs/dialogs.redux'; import { getWaitablePromise } from '@/v5/helpers/async.helpers'; import { NewDrawing } from '@/v5/store/drawings/drawings.types'; +import { DEFAULT_SETTINGS_CALIBRATION } from '@/v5/ui/routes/dashboard/projects/calibration/calibration.helpers'; describe('Drawings: sagas', () => { const teamspace = 'teamspace'; @@ -114,6 +115,7 @@ describe('Drawings: sagas', () => { describe('fetchDrawings', () => { const stats = prepareMockStats(); + const settings = prepareMockSettings(); it('should fetch drawings data', async () => { const mockDrawingBaseResponse = pick(mockDrawing, ['_id', 'name', 'role', 'isFavourite']); @@ -167,6 +169,31 @@ describe('Drawings: sagas', () => { const drawingsInStore = selectDrawings(getState()); expect(drawingsInStore).toEqual([fullDrawing(mockDrawing)]); }) + + it('should fetch settings', async () => { + populateStore(); + mockServer + .get(`/teamspaces/${teamspace}/projects/${projectId}/drawings/${drawingId}`) + .reply(200, settings); + + await waitForActions(() => { + dispatch(DrawingsActions.fetchDrawingSettings(teamspace, projectId, drawingId)); + }, [DrawingsActions.updateDrawingSuccess(projectId, drawingId, settings)]); + }) + + it('should call fetch drawing settings endpoint with 401', async () => { + populateStore(); + mockServer + .get(`/teamspaces/${teamspace}/projects/${projectId}/drawings/${drawingId}`) + .reply(401); + + await waitForActions(() => { + dispatch(DrawingsActions.fetchDrawingSettings(teamspace, projectId, drawingId)); + }, [DialogsTypes.OPEN]); + + const drawingsInStore = selectDrawings(getState()); + expect(drawingsInStore).toEqual([fullDrawing(mockDrawing)]); + }) }) describe('createDrawing', () => { @@ -175,6 +202,7 @@ describe('Drawings: sagas', () => { type: 'Other', number: 'number', desc: 'desc', + calibration: DEFAULT_SETTINGS_CALIBRATION, }; it('should call createDrawing endpoint', async () => { mockServer