UNPKG

3.07 kBJavaScriptView Raw
1// Copyright IBM Corp. 2019. All Rights Reserved.
2// Node module: loopback-connector
3// This file is licensed under the MIT License.
4// License text available at https://opensource.org/licenses/MIT
5
6'use strict';
7
8const expect = require('chai').expect;
9const {ModelBuilder} = require('loopback-datasource-juggler');
10const Connector = require('../lib/connector');
11
12describe('Connector', () => {
13 describe('getPropertyDefinition()', () => {
14 let connector, builder;
15
16 beforeEach(() => {
17 connector = new Connector('MyConnector');
18 builder = new ModelBuilder();
19
20 const MyModel = builder.define('MyModel', {
21 firstname: String,
22 phoneList: [
23 {
24 number: Number,
25 label: {
26 title: String,
27 },
28 },
29 ],
30 address: {
31 line1: String,
32 },
33 someProp: {
34 innerArray: [
35 {
36 date: Date,
37 },
38 ],
39 },
40 });
41
42 connector.define({
43 model: MyModel,
44 });
45 });
46
47 it('supports retrieving first level properties definitions', () => {
48 const propDefinition1 = connector.getPropertyDefinition(
49 'MyModel',
50 'phoneList',
51 );
52
53 expect(propDefinition1.type).to.be.an('array');
54
55 const propDefinition2 = connector.getPropertyDefinition(
56 'MyModel',
57 'firstname',
58 );
59
60 expect(propDefinition2.type).to.be.equal(String);
61 });
62
63 it('supports first level nested array property definitions', () => {
64 const propDefinition = connector.getPropertyDefinition(
65 'MyModel',
66 'phoneList.number',
67 );
68
69 expect(propDefinition.type).to.equal(Number);
70 });
71
72 it('supports second level nested array property definitions', () => {
73 const propDefinition = connector.getPropertyDefinition(
74 'MyModel',
75 'phoneList.label.title',
76 );
77
78 expect(propDefinition.type).to.equal(String);
79 });
80
81 it('supports nested property definitions on objects', () => {
82 const propDefinition = connector.getPropertyDefinition(
83 'MyModel',
84 'address.line1',
85 );
86
87 expect(propDefinition.type).to.equal(String);
88 });
89
90 it('supports nested property definitions on array within object', () => {
91 const propDefinition = connector.getPropertyDefinition(
92 'MyModel',
93 'someProp.innerArray.date',
94 );
95
96 expect(propDefinition.type).to.equal(Date);
97 });
98
99 it('should return undefined for non-existing nested property', () => {
100 const definition = connector.getPropertyDefinition('MyModel',
101 'someProp.innerArray.foo');
102 // eslint-disable-next-line no-unused-expressions
103 expect(definition).to.be.undefined;
104 });
105
106 it('should preserve backward-compatibility for non-existing property', () => {
107 const definition = connector.getPropertyDefinition('MyModel', 'idontexist');
108 // eslint-disable-next-line no-unused-expressions
109 expect(definition).to.be.undefined;
110 });
111 });
112});