UNPKG

3.8 kBJavaScriptView Raw
1'use strict';
2
3var fs = require('fs');
4var path = require('path');
5var assert = require('chai').assert;
6var _ = require('lodash');
7var winston = require('winston');
8var config = require('../config');
9
10function 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
33describe('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});