Skip to content

Commit f7dad92

Browse files
committed
Merge pull request delighted#4 from delighted/add-bounces-and-unsubscribes
Add bounce.all and unsubscribe.all methods
2 parents e23c4d7 + 58c5faf commit f7dad92

File tree

7 files changed

+77
-15
lines changed

7 files changed

+77
-15
lines changed

lib/Delighted.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ var DEFAULT_HEADERS = {
1111
};
1212

1313
var resources = {
14+
'bounce': require('./resources/Bounce'),
1415
'metrics': require('./resources/Metrics'),
1516
'person': require('./resources/Person'),
1617
'surveyRequest': require('./resources/SurveyRequest'),

lib/resources/Bounce.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
var Resource = require('../Resource');
2+
3+
module.exports = Resource.extend({
4+
path: '/bounces'
5+
}, { except: ['create', 'retrieve', 'save'] });

lib/resources/Unsubscribe.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ var Resource = require('../Resource');
22

33
module.exports = Resource.extend({
44
path: '/unsubscribes'
5-
}, { except: ['all', 'retrieve', 'save'] });
5+
}, { except: ['retrieve', 'save'] });

test/resources/bounce_test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var expect = require('chai').expect;
2+
var Bounce = require('../../lib/resources/Bounce');
3+
var helper = require('../test_helper');
4+
5+
describe('Bounce', function() {
6+
var server;
7+
8+
beforeEach(function() {
9+
server = helper.server(helper.port, helper.requests);
10+
});
11+
12+
afterEach(function() {
13+
server.close();
14+
});
15+
16+
describe('#all', function() {
17+
it('retrieves all bounces', function() {
18+
var bounce = new Bounce(helper.client);
19+
20+
return bounce.all().then(function(response) {
21+
expect(response).to.have.length(2);
22+
});
23+
});
24+
});
25+
});

test/resources/unsubscribe_test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,14 @@ describe('Unsubscribe', function() {
2323
});;
2424
});
2525
});
26+
27+
describe('#all', function() {
28+
it('retrieves all unsubcribes', function() {
29+
var unsubscribe = new Unsubscribe(helper.client);
30+
31+
return unsubscribe.all().then(function(response) {
32+
expect(response).to.have.length(2);
33+
});
34+
});
35+
});
2636
});

test/support/server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ var http = require('http');
22

33
module.exports = function(port, mapping) {
44
var handler = function(request, response) {
5-
var mapped = mapping[request.url];
5+
var mapped = mapping[request.method + " " + request.url];
66
var body = JSON.stringify(mapped.body);
77

88
response.writeHead(mapped.status);

test/test_helper.js

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,69 +2,90 @@ var server = require('./support/server');
22
var Client = require('../lib/Client');
33

44
var requests = {
5-
'/fake': {
5+
'GET /fake': {
66
status: 200,
77
body: { message: 'OK' }
88
},
99

10-
'/fake?per_page=20&page=10': {
10+
'GET /fake?per_page=20&page=10': {
1111
status: 200,
1212
body: { message: 'ALRIGHT' }
1313
},
1414

15-
'/201': {
15+
'POST /201': {
1616
status: 201,
1717
body: { ok: true }
1818
},
1919

20-
'/204': {
20+
'PUT /204': {
2121
status: 204,
2222
body: null
2323
},
2424

25-
'/401': {
25+
'GET /401': {
2626
status: 401,
2727
body: null
2828
},
2929

30-
'/metrics': {
30+
'GET /metrics': {
3131
status: 200,
3232
body: { nps: 0 }
3333
},
3434

35-
'/metrics?since=1424359740': {
35+
'GET /metrics?since=1424359740': {
3636
status: 200,
3737
body: { nps: 10 }
3838
},
3939

40-
'/people': {
40+
'POST /people': {
4141
status: 201,
4242
body: { email: 'foo@example.com' }
4343
},
4444

45-
'/people/foo%40example.com/survey_requests/pending': {
45+
'PUT /people': {
46+
status: 201,
47+
body: { email: 'foo@example.com' }
48+
},
49+
50+
'DELETE /people/foo%40example.com/survey_requests/pending': {
4651
status: 200,
4752
body: { ok: true }
4853
},
4954

50-
'/survey_responses': {
55+
'POST /survey_responses': {
5156
status: 201,
5257
body: { person: '321' }
5358
},
5459

55-
'/survey_responses/321': {
60+
'GET /survey_responses/321': {
5661
status: 200,
5762
body: { person: '321' }
5863
},
5964

60-
'/survey_responses?order=desc': {
65+
'GET /survey_responses?order=desc': {
6166
status: 200,
6267
body: [{ id: 1 }, { id: 2 }]
6368
},
6469

65-
'/unsubscribes': {
70+
'POST /unsubscribes': {
6671
status: 201,
6772
body: { person_email: 'foo@example.com' }
73+
},
74+
75+
'GET /unsubscribes': {
76+
status: 200,
77+
body: [
78+
{ person_id: '475', email: 'foo@example.com', name: 'Foo', unsubscribed_at: 1440621400 },
79+
{ person_id: '634', email: 'bar@example.com', name: 'Bar', unsubscribed_at: 1440621453 }
80+
]
81+
},
82+
83+
'GET /bounces': {
84+
status: 200,
85+
body: [
86+
{ person_id: '475', email: 'foo@example.com', name: 'Foo', bounced_at: 1440621400 },
87+
{ person_id: '634', email: 'bar@example.com', name: 'Bar', bounced_at: 1440621453 }
88+
]
6889
}
6990
};
7091

0 commit comments

Comments
 (0)