From 6a8dc924eccd611f2d271fed4a77909f6029e069 Mon Sep 17 00:00:00 2001 From: Paul Montgomery Date: Tue, 31 Aug 2021 14:47:52 -0700 Subject: [PATCH] Fix some tests --- .../deviceSettingsPerInterfacePerSetting.spec.tsx | 2 +- .../pnp/sagas/getModelDefinitionSaga.spec.ts | 14 +++++++++++--- .../devices/pnp/sagas/getModelDefinitionSaga.ts | 14 ++++++++++---- src/app/shared/utils/jsonSchemaAdaptor.spec.ts | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/app/devices/pnp/components/deviceSettings/deviceSettingsPerInterfacePerSetting.spec.tsx b/src/app/devices/pnp/components/deviceSettings/deviceSettingsPerInterfacePerSetting.spec.tsx index dc60ec828..f20b1b50b 100644 --- a/src/app/devices/pnp/components/deviceSettings/deviceSettingsPerInterfacePerSetting.spec.tsx +++ b/src/app/devices/pnp/components/deviceSettings/deviceSettingsPerInterfacePerSetting.spec.tsx @@ -73,7 +73,7 @@ describe('deviceSettingsPerInterfacePerSetting', () => { expect(schemaLabel.props().children).toEqual(schema); const valueLabel = wrapper.find(Label).at(3); // tslint:disable-line:no-magic-numbers - expect(valueLabel.props().children).toEqual('false'); + expect(valueLabel.props().children).toEqual('{\"value\":false}'); }); it('renders when there is a writable property of complex type with sync status', () => { diff --git a/src/app/devices/pnp/sagas/getModelDefinitionSaga.spec.ts b/src/app/devices/pnp/sagas/getModelDefinitionSaga.spec.ts index 9b69c04dc..8c8b694d9 100644 --- a/src/app/devices/pnp/sagas/getModelDefinitionSaga.spec.ts +++ b/src/app/devices/pnp/sagas/getModelDefinitionSaga.spec.ts @@ -6,12 +6,15 @@ import 'jest'; import { call, put } from 'redux-saga/effects'; // tslint:disable-next-line: no-implicit-dependencies import { SagaIteratorClone, cloneableGenerator } from '@redux-saga/testing-utils'; -import { getModelDefinitionSaga, +import { + getModelDefinitionSaga, getModelDefinition, getModelDefinitionFromPublicRepo, getModelDefinitionFromLocalFile, validateModelDefinitionHelper, - getFlattenedModel, getModelDefinitionFromConfigurableRepo + getFlattenedModel, + getModelDefinitionFromConfigurableRepo, + expandFromExtendedModel } from './getModelDefinitionSaga'; import { raiseNotificationToast } from '../../../notifications/components/notificationToast'; import { NotificationType } from '../../../api/models/notification'; @@ -87,10 +90,15 @@ describe('modelDefinition sagas', () => { call(validateModelDefinitionHelper, modelDefinition, { repositoryLocationType: REPOSITORY_LOCATION_TYPE.Public }) ); }); + it('checks for extends', () => { + expect(getModelDefinitionSagaGenerator.next(true).value).toEqual( + call(expandFromExtendedModel, action, { repositoryLocationType: REPOSITORY_LOCATION_TYPE.Public}, modelDefinition) + ); + }); it('puts the successful action', () => { const success = getModelDefinitionSagaGenerator.clone(); - expect(success.next(true)).toEqual({ + expect(success.next()).toEqual({ done: false, value: put((getModelDefinitionAction.done({ params, diff --git a/src/app/devices/pnp/sagas/getModelDefinitionSaga.ts b/src/app/devices/pnp/sagas/getModelDefinitionSaga.ts index 001537520..244f471ba 100644 --- a/src/app/devices/pnp/sagas/getModelDefinitionSaga.ts +++ b/src/app/devices/pnp/sagas/getModelDefinitionSaga.ts @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License **********************************************************/ -import { call, put } from 'redux-saga/effects'; +import { call, CallEffect, put } from 'redux-saga/effects'; import { Action } from 'typescript-fsa'; import { fetchModelDefinition } from '../../../api/services/publicDigitalTwinsModelRepoService'; import { raiseNotificationToast } from '../../../notifications/components/notificationToast'; @@ -138,13 +138,16 @@ export function* getModelDefinition(action: Action, ModelDefinition, ModelDefinition> { const extendsVal = model.extends; if (extendsVal) { if (typeof (extendsVal) === 'string') { const newAction: Action = { ...action }; newAction.payload.interfaceId = extendsVal; - const baseModel: ModelDefinition = yield call(getModelDefinition, newAction, location); + let baseModel: ModelDefinition = yield call(getModelDefinition, newAction, location); + if (baseModel.extends) { + baseModel = yield call(expandFromExtendedModel, newAction, location, baseModel); + } model.contents = model.contents.concat(baseModel.contents); return model; } @@ -153,7 +156,10 @@ export function* expandFromExtendedModel(action: any, location: RepositoryLocati for (const newInterface of extendsVal) { const newAction: Action = { ...action }; newAction.payload.interfaceId = newInterface; - const baseModel: ModelDefinition = yield call(getModelDefinition, newAction, location); + let baseModel: ModelDefinition = yield call(getModelDefinition, newAction, location); + if (baseModel.extends) { + baseModel = yield call(expandFromExtendedModel, newAction, location, baseModel); + } extendedModel.contents = extendedModel.contents.concat(baseModel.contents); } return extendedModel; diff --git a/src/app/shared/utils/jsonSchemaAdaptor.spec.ts b/src/app/shared/utils/jsonSchemaAdaptor.spec.ts index 2de96457f..0b99727f6 100644 --- a/src/app/shared/utils/jsonSchemaAdaptor.spec.ts +++ b/src/app/shared/utils/jsonSchemaAdaptor.spec.ts @@ -90,7 +90,7 @@ describe('parse interface model definition to Json schema', () => { { definitions: {}, enum: ['1', '2'], - enumNames : ['offline', 'online'], + enumNames : ['Offline', 'Online'], required: [], title: enumbTypeProperty.name, type: 'string'