UNPKG

4.93 kBJavaScriptView Raw
1require("./common.js");
2var LastFmInfo = require("lastfm/lastfm-info");
3var LastFmRequest = require("lastfm/lastfm-request");
4var fakes = require("./fakes");
5
6(function() {
7describe("a new info instance")
8 var lastfm, gently;
9 before(function() {
10 lastfm = new LastFmNode();
11 gently = new Gently();
12 });
13
14 it("accepts listeners in options (deprecated)", function() {
15 var handlers = { error: function() {}, success: function() {} };
16 gently.expect(handlers, "error");
17 gently.expect(handlers, "success");
18 var info = new LastFmInfo(lastfm, "", handlers);
19 info.emit("success");
20 });
21
22 it("accepts listeners in handler options", function() {
23 var handlers = { error: function() {}, success: function() {} };
24 var options = { handlers: handlers };
25 gently.expect(handlers, "error");
26 gently.expect(handlers, "success");
27 var info = new LastFmInfo(lastfm, "", options);
28 info.emit("success");
29 });
30
31 it("emits error if type not specified", function() {
32 var handlers = { error: function() {}};
33 gently.expect(handlers, "error", function(error) {
34 assert.equal("Item type not specified", error.message);
35 });
36 var info = new LastFmInfo(lastfm, "", { handlers: handlers });
37 });
38
39 it("allows requests for user info", function() {
40 gently.expect(lastfm, "request", function() {
41 return new fakes.LastFmRequest();
42 });
43 var info = new LastFmInfo(lastfm, "user");
44 });
45
46 it("allows requests for track info", function() {
47 gently.expect(lastfm, "request", function() {
48 return new fakes.LastFmRequest();
49 });
50 var info = new LastFmInfo(lastfm, "track");
51 });
52
53 it("allows all [itemtype].getinfo calls", function() {
54 gently.expect(lastfm, "request", function(method, params) {
55 assert.equal("event.getinfo", method);
56 return new fakes.LastFmRequest();
57 });
58 new LastFmInfo(lastfm, "event");
59 });
60
61 it("passes through parameters", function() {
62 gently.expect(lastfm, "request", function(method, params) {
63 assert.equal("username", params.user);
64 assert.equal("anything", params.arbitrary);
65 return new fakes.LastFmRequest();
66 });
67 new LastFmInfo(lastfm, "user", { user: "username", arbitrary: "anything" });
68 });
69
70 it("doesnt pass through callback parameters", function() {
71 gently.expect(lastfm, "request", function(method, params) {
72 assert.ok(!params.error);
73 assert.ok(!params.success);
74 return new fakes.LastFmRequest();
75 });
76 new LastFmInfo(lastfm, "user", { handlers: { error: function() {}, success: function() {} } });
77 });
78})();
79
80(function() {
81describe("when receiving data")
82 var gently, lastfm, request;
83 before(function() {
84 gently = new Gently();
85 lastfm = new LastFmNode();
86 request = new fakes.LastFmRequest();
87 });
88
89 it("emits error if response contains error", function() {
90 gently.expect(lastfm, "request", function() {
91 return request;
92 });
93 new LastFmInfo(lastfm, "track", { handlers: {
94 error: gently.expect(function errorHandler(error) {
95 assert.equal("You must supply either a track & artist name or a track mbid.", error.message);
96 })
97 }});
98 request.emit("success", FakeData.NotEnoughTrackInfo);
99 });
100
101 it("emits error when receiving unexpected data", function() {
102 gently.expect(lastfm, "request", function() {
103 return request;
104 });
105 new LastFmInfo(lastfm, "track", { handlers: {
106 error: gently.expect(function errorHandler(error) {
107 assert.equal("Unexpected error", error.message);
108 })
109 }});
110 request.emit("success", FakeData.SuccessfulAuthorisation);
111 });
112
113 it("emits error if receiving junk", function() {
114 gently.expect(lastfm, "request", function() {
115 return request;
116 });
117 new LastFmInfo(lastfm, "track", { handlers: {
118 error: gently.expect(function errorHandler(error) {
119 assert.ok(error.message.indexOf(FakeData.Garbage) > -1);
120 assert.ok("Syntax error");
121 })
122 }});
123 request.emit("success", FakeData.Garbage);
124 });
125
126 it("emits success with received data when matches expected type", function() {
127 gently.expect(lastfm, "request", function() {
128 return request;
129 });
130 new LastFmInfo(lastfm, "track", { handlers: {
131 success: gently.expect(function success(track) {
132 assert.equal("Run To Your Grave", track.name);
133 assert.equal("232000", track.duration);
134 })
135 }});
136 request.emit("success", FakeData.RunToYourGraveTrackInfo);
137 });
138
139 it("bubbles up errors", function() {
140 gently.expect(lastfm, "request", function() {
141 return request;
142 });
143 var info = new LastFmInfo(lastfm, "track");
144 gently.expect(info, "emit", function(event, error) {
145 assert.equal("error", event);
146 assert.equal("Bubbled error", error.message);
147 });
148 request.emit("error", new Error("Bubbled error"));
149 });
150})();