1 | 'use strict';
|
2 |
|
3 | var fs = require('fs');
|
4 | var path = require('path');
|
5 | var assert = require('chai').assert;
|
6 | var _ = require('lodash');
|
7 | var winston = require('winston');
|
8 | var config = require('../config');
|
9 |
|
10 | function createClient() {
|
11 | var schema = _.clone(
|
12 | require('../assets/7digital-api-schema.json'));
|
13 | var port = 9876;
|
14 | var logger = new winston.Logger({
|
15 | transports: [
|
16 | new winston.transports.Console({ level: 'error' })
|
17 | ]
|
18 | });
|
19 |
|
20 | schema.host = 'localhost';
|
21 | schema.port = port;
|
22 | schema.prefix = undefined;
|
23 |
|
24 | var api = require('../').configure({
|
25 | logger: logger
|
26 | }, schema);
|
27 |
|
28 | api.IS_STUB_CLIENT = true;
|
29 |
|
30 | return api;
|
31 | }
|
32 |
|
33 | describe('api', function () {
|
34 | var api;
|
35 | var childProcess = require('child_process');
|
36 | var serverProcess;
|
37 | var processStarted;
|
38 |
|
39 | before(function (done) {
|
40 | var nodeProcessPath;
|
41 | try {
|
42 | nodeProcessPath = require.resolve('api-stub');
|
43 | } catch (e) {
|
44 | console.log('Make sure api-stub module is installed!');
|
45 | done(e);
|
46 | }
|
47 |
|
48 | console.log('spawning node api-stub process : ', nodeProcessPath,
|
49 | '\n');
|
50 |
|
51 | serverProcess = childProcess.spawn('node', [nodeProcessPath], {});
|
52 |
|
53 | serverProcess.stdout.on('data', function (data) {
|
54 | if (!processStarted) {
|
55 | processStarted = true;
|
56 | done();
|
57 | }
|
58 | });
|
59 |
|
60 | serverProcess.stderr.on('data', function (data) {
|
61 | console.log('' + data);
|
62 | });
|
63 |
|
64 | api = createClient();
|
65 | });
|
66 |
|
67 | after(function () {
|
68 | console.log('\nshutting down api-stub process');
|
69 | serverProcess.kill('SIGKILL');
|
70 | });
|
71 |
|
72 | it('ensures empty basketItems is an array', function (done) {
|
73 | var basket = new api.Basket();
|
74 | basket.create(function (err, data) {
|
75 | assert.instanceOf(data.basket.basketItems, Array);
|
76 | done();
|
77 | });
|
78 | });
|
79 |
|
80 | it('ensures release formats is an array', function (done) {
|
81 | var release = new api.Releases();
|
82 | release.getDetails({ releaseId: 2431 }, function (err, data) {
|
83 | assert.instanceOf(data.release.formats.format, Array);
|
84 | done();
|
85 | });
|
86 | });
|
87 |
|
88 | it('ensures editorial list items is an array', function (done) {
|
89 | var editorial = new api.Editorial();
|
90 | editorial.getList({ key: 'home2', shopId: 34 },
|
91 | function (err, data) {
|
92 |
|
93 | assert.instanceOf(data.list.listItems.listItem, Array);
|
94 | done();
|
95 | });
|
96 | });
|
97 |
|
98 | it('ensures search results searchResult is an array', function (done) {
|
99 | var tracks = new api.Tracks();
|
100 | tracks.search({ q: 'timbalake' }, function (err, data) {
|
101 | assert.instanceOf(data.searchResults.searchResult, Array);
|
102 | done();
|
103 | });
|
104 |
|
105 | });
|
106 |
|
107 | it('gets a release by id', function (done) {
|
108 | var releases = new api.Releases();
|
109 | releases.getDetails({ releaseId: 1192901 }, function (err, data) {
|
110 | assert.equal(data.release.title, 'Wasting Light');
|
111 | done();
|
112 | });
|
113 | });
|
114 |
|
115 | it('handles bad xml from the api', function (done) {
|
116 | var releases = new api.Releases();
|
117 | releases.getDetails({ releaseId: 'error' }, function (err, data) {
|
118 | assert(err);
|
119 | done();
|
120 | });
|
121 | });
|
122 |
|
123 | it('handles missing resources from the api', function (done) {
|
124 | var releases = new api.Releases();
|
125 | var params = { releaseId: 'missing' };
|
126 | releases.getDetails(params, function (err, data) {
|
127 | assert(err);
|
128 | assert.equal(err.code, '2001');
|
129 | assert.deepEqual(err.params, params);
|
130 | done();
|
131 | });
|
132 | });
|
133 |
|
134 | it('handles unexpected but valid xml from the api', function (done) {
|
135 | var releases = new api.Releases();
|
136 | releases.getDetails({ releaseId: 'strangeResponse' },
|
137 | function (err, data) {
|
138 |
|
139 | assert(err);
|
140 | assert.equal(err.message,
|
141 | 'Missing response node from: /release/details');
|
142 | done();
|
143 | });
|
144 | });
|
145 |
|
146 | it('handles unrecognised statuses from the api', function (done) {
|
147 | var releases = new api.Releases();
|
148 | releases.getDetails({ releaseId: 'unrecognisedStatus' },
|
149 | function (err, data) {
|
150 |
|
151 | assert(err);
|
152 | assert.equal(err.message,
|
153 | 'Unexpected response status from: /release/details');
|
154 | done();
|
155 | });
|
156 | });
|
157 |
|
158 | });
|