UNPKG

3.63 kBJavaScriptView Raw
1'use strict';
2
3var assert = require('chai').assert;
4var https = require('https');
5var uncachedRequire = require('../test/util').uncachedRequire;
6var OAuthError = require('../lib/errors').OAuthError;
7
8function die(msg) {
9 throw new Error(msg);
10}
11
12function fromEnvOrDie(key) {
13 return process.env[key] || die('no ' + key + ' set');
14}
15
16describe('api when oauth is required', function () {
17 var voucherCode, userToken, userSecret, api;
18
19 before(function () {
20 fromEnvOrDie('_7D_API_CLIENT_CONSUMER_KEY');
21 fromEnvOrDie('_7D_API_CLIENT_CONSUMER_SECRET');
22 voucherCode = fromEnvOrDie('_7D_API_CLIENT_TEST_VOUCHER_CODE');
23 userToken = fromEnvOrDie('_7D_API_CLIENT_USER_TOKEN');
24 userSecret = fromEnvOrDie('_7D_API_CLIENT_USER_SECRET');
25
26 api = uncachedRequire('../index');
27 });
28
29 it('propagates errors when unauthorised (2-legged)', function (done) {
30 var unauthedApi = uncachedRequire('../index').configure({
31 consumerkey: '',
32 consumersecret: ''
33 });
34 var basketApi = new unauthedApi.Basket();
35
36 basketApi.applyVoucher({}, function (err, rs) {
37 assert.ok(err, 'no error returned from api');
38 assert.instanceOf(err, OAuthError);
39 assert.match(err.message, /oauth/i,
40 'error message did not mention oauth');
41 done();
42 });
43 });
44
45 it('applies a voucher (2-legged oauth)', function (done) {
46 var basketApi = new api.Basket();
47
48 basketApi.create({}, function (err, rs) {
49 var basket;
50
51 assert.notOk(err, 'error after basket/create: ' + err);
52
53 basket = rs.basket;
54
55 assert.ok(basket.id, 'no basketId returned by api basket/create');
56
57 basketApi.addItem({
58 basketId: basket.id,
59 releaseId: 1188827,
60 itemId: 30173868
61 }, function (err, rs) {
62 var basketAfterAddItem;
63 assert.notOk(err, 'error after basket/addItem: ' + err);
64
65 basketAfterAddItem = rs.basket;
66
67 assert.lengthOf(basketAfterAddItem.basketItems, 1,
68 'unexpected number of basket items after basket/addItem');
69
70 assert(+basketAfterAddItem.amountDue.amount > 0,
71 'expected non-zero amountDue in basket after basket/addItem');
72
73 basketApi.applyVoucher({
74 basketId: basket.id,
75 voucherCode: voucherCode
76 }, function (err, rs) {
77 var basketAfterVoucher;
78
79 assert.notOk(err,
80 'error after basket/applyVoucher: ' + err);
81
82 basketAfterVoucher = rs.basket;
83
84 assert.equal(basketAfterVoucher.amountDue.amount, 0,
85 'expected free basket after basket/applyVoucher');
86
87 done();
88 });
89 });
90 });
91 });
92
93 it('propagates errors when unauthorised (3-legged oauth)',
94 function (done) {
95
96 var user = new api.User();
97
98 user.getLocker({}, function (err, res) {
99 assert.ok(err, 'expected an error');
100 assert.instanceOf(err, OAuthError);
101 assert.match(err.message, /oauth.*token/i,
102 'error message did not mention oauth or tokens');
103 done();
104 });
105 });
106
107 it('fetches a pre-authorised user\'s locker (3-legged oauth)',
108 function (done) {
109 var user = new api.User();
110
111 this.timeout(30000);
112 user.getLocker({
113 accesstoken: userToken,
114 accesssecret: userSecret
115 }, function (err, res) {
116 var errMsg = err ? err.data : '';
117 assert.notOk(err, 'unexpected error: ' + errMsg);
118 done();
119 });
120 });
121
122 it('signs 3-legged locker stream urls', function (done) {
123 var oauth = new api.OAuth({
124 defaultParams: {
125 country: 'gb',
126 accesstoken: userToken,
127 accesssecret: userSecret
128 }
129 });
130 var signedUrl = oauth.sign(
131 'https://stream.svc.7digital.net/stream/locker',
132 { trackId: 29286733, formatId: 26 });
133
134 https.get(signedUrl, function checkResponse(response) {
135 assert.equal(response.statusCode, 200);
136 done();
137 }).on('error', done);
138 });
139
140});