UNPKG

2.51 kBJavaScriptView Raw
1// Copyright IBM Corp. 2016,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 composer = require('../lib/model-key-composer');
9const expect = require('chai').expect;
10const Promise = require('bluebird');
11
12describe('ModelKeyComposer', function() {
13 describe('compose()', function() {
14 it('honours the key', function() {
15 return Promise.all([
16 composer.compose('Car', 'vin'),
17 composer.compose('Car', 'name'),
18 ]).spread(function(key1, key2) {
19 expect(key1).to.not.equal(key2);
20 });
21 });
22
23 it('honours the model name', function() {
24 return Promise.all([
25 composer.compose('Product', 'name'),
26 composer.compose('Category', 'name'),
27 ]).spread(function(key1, key2) {
28 expect(key1).to.not.equal(key2);
29 });
30 });
31
32 it('encodes values', function() {
33 // This test is based on the knowledge that we are using ':' separator
34 // when building the composed string
35 return Promise.all([
36 composer.compose('a', 'b:c'),
37 composer.compose('a:b', 'c'),
38 ]).spread(function(key1, key2) {
39 expect(key1).to.not.equal(key2);
40 });
41 });
42
43 it('supports invocation with a callback', function(done) {
44 composer.compose('Car', 'vin', done);
45 });
46 });
47
48 describe('parse()', function() {
49 it('decodes valid value', function() {
50 return composer.compose('Car', 'vin')
51 .then(function(data) {
52 return composer.parse(data);
53 })
54 .then(function(parsed) {
55 expect(parsed).to.eql({
56 modelName: 'Car',
57 key: 'vin',
58 });
59 });
60 });
61
62 it('handles invalid values', function() {
63 return composer.parse('invalid').then(
64 function onSuccess() {
65 throw new Error('composer.parse() should have failed');
66 },
67 function onError(err) {
68 expect(err).to.have.property('code', 'NO_MODEL_PREFIX');
69 },
70 );
71 });
72
73 it('supports invocation with a callback', function(done) {
74 composer.compose('Car', 'vin', function(err, key) {
75 if (err) return done(err);
76 composer.parse(key, function(err, parsed) {
77 if (err) return done(err);
78 expect(parsed).to.eql({
79 modelName: 'Car',
80 key: 'vin',
81 });
82 done();
83 });
84 });
85 });
86 });
87});