From eb2cb238d37a4238861d9d11d24d7ce9db63b54a Mon Sep 17 00:00:00 2001 From: Agnes Lin Date: Wed, 22 Jan 2020 09:25:43 -0500 Subject: [PATCH] test(repository-tests): add test for SQL DBs strict mode warning --- .../src/crud/freeform-properties.suite.ts | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/packages/repository-tests/src/crud/freeform-properties.suite.ts b/packages/repository-tests/src/crud/freeform-properties.suite.ts index 7503dbc3f701..ac953c5c24bf 100644 --- a/packages/repository-tests/src/crud/freeform-properties.suite.ts +++ b/packages/repository-tests/src/crud/freeform-properties.suite.ts @@ -6,7 +6,6 @@ import {Entity, model, property} from '@loopback/repository'; import {EntityCrudRepository} from '@loopback/repository'; import {expect, skipIf, toJSON} from '@loopback/testlab'; -import {Suite} from 'mocha'; import {MixedIdType} from '../helpers.repository-tests'; import { withCrudCtx, @@ -18,38 +17,53 @@ import { CrudTestContext, DataSourceOptions, } from '../types.repository-tests'; +import {assert} from 'console'; export function freeformPropertiesSuite( dataSourceOptions: DataSourceOptions, repositoryClass: CrudRepositoryCtor, features: CrudFeatures, ) { - skipIf<[(this: Suite) => void], void>( - !features.freeFormProperties, - describe, - 'free-form properties (strict: false)', - () => { - before(deleteAllModelsInDefaultDataSource); + @model({settings: {strict: false}}) + class Freeform extends Entity { + @property({ + type: features.idType, + id: true, + description: 'The unique identifier for a product', + }) + id: MixedIdType; - @model({settings: {strict: false}}) - class Freeform extends Entity { - @property({ - type: features.idType, - id: true, - description: 'The unique identifier for a product', - }) - id: MixedIdType; + @property({type: 'string', required: true}) + name: string; - @property({type: 'string', required: true}) - name: string; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [propName: string]: any; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [propName: string]: any; + constructor(data?: Partial) { + super(data); + } + } + /* istanbul ignore next */ + it('should warn that {strict: false} mode is not supported for SQL DBs ', async () => { + withCrudCtx(async (ctx: CrudTestContext) => { + new repositoryClass(Freeform, ctx.dataSource); + }); + if (!features.freeFormProperties) { + assert( + "WARNING: relational database doesn't support {strict: false} mode. {strict: true} " + + 'mode will be set for model Freeform instead.', + ); + } + }); - constructor(data?: Partial) { - super(data); - } - } + // test DBs that support freeform props + /* istanbul ignore next */ + skipIf( + !features.freeFormProperties, + it, + 'free-form properties {strict: false}', + async () => { + before(deleteAllModelsInDefaultDataSource); let repo: EntityCrudRepository;