1 | require("./common");
|
2 | var LastFmRequest = require("lastfm/lastfm-request");
|
3 | var fakes = require("./fakes");
|
4 |
|
5 | (function() {
|
6 | describe("a LastFm request")
|
7 |
|
8 | var host, connection, url, gently, request;
|
9 |
|
10 | before(function() {
|
11 | host = "www.example.com";
|
12 | connection = new fakes.Client(80, host);
|
13 | url = "/resource";
|
14 | request = new fakes.ClientRequest();
|
15 | gently = new Gently();
|
16 | });
|
17 |
|
18 | it("creates a get request", function() {
|
19 | gently.expect(connection, "request", function(method, requestUrl, options) {
|
20 | assert.equal("GET", method);
|
21 | assert.equal(url, requestUrl);
|
22 | assert.equal(host, options.host);
|
23 | return request;
|
24 | });
|
25 | var lastfmRequest = new LastFmRequest(connection, url);
|
26 | });
|
27 |
|
28 | it("ends the request", function() {
|
29 | gently.expect(connection, "request", function(method, requestUrl, options) {
|
30 | return request;
|
31 | });
|
32 | gently.expect(request, "end");
|
33 | var lastfmRequest = new LastFmRequest(connection, url);
|
34 | });
|
35 |
|
36 | it("emits data received when response is complete", function() {
|
37 | var chunkOne = "test";
|
38 | var chunkTwo = "data";
|
39 | gently.expect(connection, "request", function(method, requestUrl, options) {
|
40 | return request;
|
41 | });
|
42 | var lastfmRequest = new LastFmRequest(connection, url);
|
43 | gently.expect(lastfmRequest, "emit", function(event, data) {
|
44 | assert.equal("success", event);
|
45 | assert.equal(chunkOne + chunkTwo, data);
|
46 | });
|
47 | var response = new fakes.ClientResponse();
|
48 | request.emit("response", response);
|
49 | response.emit("data", chunkOne);
|
50 | response.emit("data", chunkTwo);
|
51 | response.emit("end");
|
52 | });
|
53 |
|
54 | it("bubbles up connection errors", function() {
|
55 | var message = "Bubbled error";
|
56 | gently.expect(connection, "request", function(method, requestUrl, options) {
|
57 | return request;
|
58 | });
|
59 | var lastfmRequest = new LastFmRequest(connection, url);
|
60 | gently.expect(lastfmRequest, "emit", function(event, error) {
|
61 | assert.equal("error", event);
|
62 | assert.equal(message, error.message);
|
63 | });
|
64 | connection.emit("error", new Error(message));
|
65 | });
|
66 | })();
|
67 |
|
68 | (function() {
|
69 | describe("a LastFm request with a body")
|
70 |
|
71 | var host, connection, url, gently, request, body;
|
72 |
|
73 | before(function() {
|
74 | host = "www.example.com";
|
75 | connection = new fakes.Client(80, host);
|
76 | url = "/resource";
|
77 | request = new fakes.ClientRequest();
|
78 | gently = new Gently();
|
79 | body = "foo=bar";
|
80 | });
|
81 |
|
82 | it("creates a post request", function() {
|
83 | gently.expect(connection, "request", function(method, requestUrl, options) {
|
84 | assert.equal("POST", method);
|
85 | assert.equal(url, requestUrl);
|
86 | assert.equal(host, options.host);
|
87 | return request;
|
88 | });
|
89 | var lastFmRequest = new LastFmRequest(connection, url, body);
|
90 | });
|
91 |
|
92 | it("includes additional headers", function() {
|
93 | gently.expect(connection, "request", function(method, requestUrl, options) {
|
94 | assert.equal(body.length, options["Content-Length"]);
|
95 | assert.equal("application/x-www-form-urlencoded", options["Content-Type"]);
|
96 | return request;
|
97 | });
|
98 | var lastFmRequest = new LastFmRequest(connection, url, body);
|
99 | });
|
100 |
|
101 | it("writes body to request", function() {
|
102 | gently.expect(connection, "request", function() {
|
103 | return request;
|
104 | });
|
105 | gently.expect(request, "write", function(data) {
|
106 | assert.equal(body, data);
|
107 | });
|
108 | var lastFmRequest = new LastFmRequest(connection, url, body);
|
109 | });
|
110 | })();
|