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