UNPKG

3.85 kBJavaScriptView Raw
1import { expect } from "chai";
2import http from "../src/http-server";
3import nodeHttp from "http";
4import { HttpError, HttpParseError } from "../src/errors";
5import nock from "nock";
6
7let requestBody;
8beforeEach(() => { requestBody = undefined; });
9
10
11const stubGET = (path, status, response) => {
12 nock("http://domain.com").get(path).reply(status, response);
13};
14
15const stubPOST = (path, status, response) => {
16 nock("http://domain.com").post(path).reply(status, response);
17};
18
19const stubPUT = (path, status, response) => {
20 nock("http://domain.com").put(path).reply(status, response);
21};
22
23const stubDELETE = (path, status, response) => {
24 nock("http://domain.com").delete(path).reply(status, response);
25};
26
27
28// ----------------------------------------------------------------------------
29
30
31describe("Http (Server)", () => {
32 it("exposes error classes", () => {
33 expect(http.HttpError).to.equal(HttpError);
34 expect(http.HttpParseError).to.equal(HttpParseError);
35 });
36
37
38 describe("get()", () => {
39 it("resolves a promise with a [String] response", (done) => {
40 stubGET("/user", 200, "hello");
41 http.get("http://domain.com/user")
42 .then((result) => {
43 expect(result).to.equal("hello");
44 done();
45 });
46 });
47
48
49 it("resolves a promise with a [Number] response", (done) => {
50 stubGET("/user", 200, 123);
51 http.get("http://domain.com/user")
52 .then((result) => {
53 expect(result).to.equal(123);
54 done();
55 });
56 });
57
58 it("resolves a promise with a [Boolean] response", (done) => {
59 stubGET("/user", 200, true);
60 http.get("http://domain.com/user")
61 .then((result) => {
62 expect(result).to.equal(true);
63 done();
64 });
65 });
66
67
68 it("resolves a promise with an [Object] response (JSON)", (done) => {
69 stubGET("/user", 200, { name:"phil" });
70 http.get("http://domain.com/user")
71 .then((result) => {
72 expect(result).to.eql({ name:"phil" });
73 done();
74 });
75 });
76
77 it("resolves a promise with an [Array] response (JSON)", (done) => {
78 stubGET("/user", 200, [1, 2, 3]);
79 http.get("http://domain.com/user")
80 .then((result) => {
81 expect(result).to.eql([1, 2, 3]);
82 done();
83 });
84 });
85
86
87 it("throws an [HttpError] when status code is not 200", (done) => {
88 stubGET("/user", 404, "Failed while making Http request.");
89 http.get("http://domain.com/user")
90 .catch(HttpError, (err) => {
91 expect(err.message).to.equal("Failed while making Http request.");
92 expect(err.status).to.equal(404);
93 done()
94 });
95 });
96
97 it("throws if the response cannot be parsed as JSON", (done) => {
98 stubGET("/user", 200, "{not-json}");
99 http.get("http://domain.com/user")
100 .catch(HttpParseError, (err) => {
101 expect(err.message).to.equal(`Failed to parse: "{not-json}"`);
102 expect(err.responseText).to.equal("{not-json}");
103 expect(err.parseError.message).to.equal("Unexpected token n");
104 done();
105 });
106 });
107 });
108
109
110 describe("post | put | delete", () => {
111 it("sends POSTs", (done) => {
112 stubPOST("/user", 200, { result:true })
113 http.post("http://domain.com/user", 999)
114 .then((result) => {
115 expect(result).to.eql({ result:true });
116 done();
117 });
118 });
119
120 it("sends PUTs", (done) => {
121 stubPUT("/user", 200, { result:true })
122 http.put("http://domain.com/user", 999)
123 .then((result) => {
124 expect(result).to.eql({ result:true });
125 done();
126 });
127 });
128
129 it("sends DELETEs", (done) => {
130 stubDELETE("/user", 200, { result:true })
131 http.delete("http://domain.com/user", 999)
132 .then((result) => {
133 expect(result).to.eql({ result:true });
134 done();
135 });
136 });
137 });
138});