// Copyright IBM Corp. 2016. All Rights Reserved. // Node module: loopback-connector // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT 'use strict'; const expect = require('chai').expect; const {ModelBuilder} = require('loopback-datasource-juggler'); const Connector = require('../lib/connector'); describe('Connector', () => { describe('getPropertyDefinition()', () => { let connector, builder; beforeEach(() => { connector = new Connector('MyConnector'); builder = new ModelBuilder(); const MyModel = builder.define('MyModel', { firstname: String, phoneList: [ { number: Number, label: { title: String, }, }, ], address: { line1: String, }, someProp: { innerArray: [ { date: Date, }, ], }, }); connector.define({ model: MyModel, }); }); it('supports retrieving first level properties definitions', () => { const propDefinition1 = connector.getPropertyDefinition( 'MyModel', 'phoneList' ); expect(propDefinition1.type).to.be.an('array'); const propDefinition2 = connector.getPropertyDefinition( 'MyModel', 'firstname' ); expect(propDefinition2.type).to.be.equal(String); }); it('supports first level nested array property definitions', () => { const propDefinition = connector.getPropertyDefinition( 'MyModel', 'phoneList.number' ); expect(propDefinition.type).to.equal(Number); }); it('supports second level nested array property definitions', () => { const propDefinition = connector.getPropertyDefinition( 'MyModel', 'phoneList.label.title' ); expect(propDefinition.type).to.equal(String); }); it('supports nested property definitions on objects', () => { const propDefinition = connector.getPropertyDefinition( 'MyModel', 'address.line1' ); expect(propDefinition.type).to.equal(String); }); it('supports nested property definitions on array within object', () => { const propDefinition = connector.getPropertyDefinition( 'MyModel', 'someProp.innerArray.date' ); expect(propDefinition.type).to.equal(Date); }); it('should fail for non-existing properties', () => { expect(() => connector.getPropertyDefinition( 'MyModel', 'non.existing.property' )).to.throw(/Invalid property path/); }); }); });