UNPKG

postmark

Version:

Official Node.js client library for the Postmark HTTP API - https://www.postmarkapp.com

151 lines (123 loc) 6.2 kB
import {expect} from "chai"; import "mocha"; import * as sinon from "sinon"; import {AxiosHttpClient} from "../../src/client/HttpClient"; import {ClientOptions} from "../../src/client/models"; import {Errors} from "../../src"; describe("AxiosHttpClient", () => { let sandbox: sinon.SinonSandbox; const httpClient = new AxiosHttpClient(); beforeEach(() => { sandbox = sinon.createSandbox(); }); afterEach(() => { sandbox.restore(); }); it("default error", () => { sandbox.stub(httpClient.client, "request").rejects(new Error("test")); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.PostmarkError); expect(error.message).to.equal("test"); expect(error.code).to.equal(0); expect(error.statusCode).to.equal(0); }); }); it("error with no message in it", () => { const errorToThrow: any = { stack: 'Hello stack' }; sandbox.stub(httpClient.client, "request").rejects(errorToThrow); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.an.instanceof(Errors.PostmarkError); expect(error.name).to.equal("PostmarkError"); expect(error.message).to.equal(JSON.stringify(errorToThrow)); }); }); describe("http status code errors", () => { const buildAxiosFormatError = (statusNumber: number) => ({ response: { data: { Message: "Basic error", ErrorCode: 0 }, status: statusNumber } }); it("401", () => { sandbox.stub(httpClient.client, "request").rejects(buildAxiosFormatError(401)); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.InvalidAPIKeyError); }); }); it("404", () => { sandbox.stub(httpClient.client, "request").rejects(buildAxiosFormatError(404)); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.PostmarkError); }); }); it("422", () => { sandbox.stub(httpClient.client, "request").rejects(buildAxiosFormatError(422)); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.ApiInputError); }); }); it("422 - inactive recipients", () => { const errorToThrow = buildAxiosFormatError(422) errorToThrow.response.data.ErrorCode=300 sandbox.stub(httpClient.client, "request").rejects(errorToThrow); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.InvalidEmailRequestError); }); }); it("422 - invalid email", () => { const errorToThrow = buildAxiosFormatError(422) errorToThrow.response.data.ErrorCode=406 sandbox.stub(httpClient.client, "request").rejects(errorToThrow); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.InactiveRecipientsError); }); }); it("429", () => { const errorToThrow = buildAxiosFormatError(429) sandbox.stub(httpClient.client, "request").rejects(errorToThrow); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.RateLimitExceededError); }); }); it("500", () => { const errorToThrow = buildAxiosFormatError(500) sandbox.stub(httpClient.client, "request").rejects(errorToThrow); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.InternalServerError); }); }); it("503", () => { const errorToThrow = buildAxiosFormatError(500) sandbox.stub(httpClient.client, "request").rejects(errorToThrow); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.InternalServerError); }); }); it("unknown status", () => { const errorToThrow = buildAxiosFormatError(-1) sandbox.stub(httpClient.client, "request").rejects(errorToThrow); return httpClient.httpRequest(ClientOptions.HttpMethod.GET, "", {}, null, {}).then((result) => { throw Error(`Should not be here with result: ${result}`); }, (error) => { expect(error).to.be.instanceOf(Errors.UnknownError); }); }); }); });