1 | 'use strict';
|
2 |
|
3 | var assert = require('chai').assert;
|
4 | var https = require('https');
|
5 | var uncachedRequire = require('../test/util').uncachedRequire;
|
6 | var OAuthError = require('../lib/errors').OAuthError;
|
7 |
|
8 | function die(msg) {
|
9 | throw new Error(msg);
|
10 | }
|
11 |
|
12 | function fromEnvOrDie(key) {
|
13 | return process.env[key] || die('no ' + key + ' set');
|
14 | }
|
15 |
|
16 | describe('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 | });
|