1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | 'use strict';
|
7 |
|
8 | const composer = require('../lib/model-key-composer');
|
9 | const expect = require('chai').expect;
|
10 | const Promise = require('bluebird');
|
11 |
|
12 | describe('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 |
|
34 |
|
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 | });
|