From 356d579b132b81baa0b47fcb05a5cecf0c6d42b0 Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Tue, 30 Oct 2018 14:58:40 -0700 Subject: [PATCH] fix(repository): remove hidden properties from entities See https://github.com/strongloop/loopback-next/issues/1914 --- packages/repository/package.json | 2 +- .../src/repositories/legacy-juggler-bridge.ts | 2 +- .../repositories/legacy-juggler-bridge.unit.ts | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/repository/package.json b/packages/repository/package.json index 58b7205717cd..52edc2ab61bc 100644 --- a/packages/repository/package.json +++ b/packages/repository/package.json @@ -30,7 +30,7 @@ "@types/debug": "0.0.30", "debug": "^4.0.1", "lodash": "^4.17.10", - "loopback-datasource-juggler": "^4.0.0" + "loopback-datasource-juggler": "^4.1.2" }, "files": [ "README.md", diff --git a/packages/repository/src/repositories/legacy-juggler-bridge.ts b/packages/repository/src/repositories/legacy-juggler-bridge.ts index 73a095bac6dc..81fc66fa524f 100644 --- a/packages/repository/src/repositories/legacy-juggler-bridge.ts +++ b/packages/repository/src/repositories/legacy-juggler-bridge.ts @@ -326,7 +326,7 @@ export class DefaultCrudRepository } protected toEntity(model: juggler.PersistedModel): T { - return new this.entityClass(model.toObject()) as T; + return new this.entityClass(model.toJSON()) as T; } protected toEntities(models: juggler.PersistedModel[]): T[] { diff --git a/packages/repository/test/unit/repositories/legacy-juggler-bridge.unit.ts b/packages/repository/test/unit/repositories/legacy-juggler-bridge.unit.ts index 2e49897563bd..d7c745cec640 100644 --- a/packages/repository/test/unit/repositories/legacy-juggler-bridge.unit.ts +++ b/packages/repository/test/unit/repositories/legacy-juggler-bridge.unit.ts @@ -49,12 +49,17 @@ describe('DefaultCrudRepository', () => { properties: { title: 'string', content: 'string', + secret: 'string', id: {name: 'id', type: 'number', id: true}, }, + settings: { + hiddenProperties: ['secret'], + }, }); title?: string; content?: string; + secret?: string; id: number; constructor(data: Partial) { @@ -137,6 +142,18 @@ describe('DefaultCrudRepository', () => { expect(result.toJSON()).to.eql(note.toJSON()); }); + it('hides hidden properties', async () => { + const repo = new DefaultCrudRepository(Note, ds); + const note = await repo.create({ + title: 't3', + content: 'c3', + secret: 'secret', + }); + expect(note.secret).to.be.undefined(); + const result = await repo.findById(note.id); + expect(result.secret).to.be.undefined(); + }); + it('implements Repository.createAll()', async () => { const repo = new DefaultCrudRepository(Note, ds); const notes = await repo.createAll([