From f73a7fc755141171b2b8e8b832fa5531734dd9cd Mon Sep 17 00:00:00 2001 From: Nishchal Gautam Date: Thu, 1 Oct 2020 10:40:44 +0700 Subject: [PATCH 1/3] test(ContentTypeMiddleware): add tests --- src/middlewares/ContentTypeMiddleware.spec.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/middlewares/ContentTypeMiddleware.spec.ts diff --git a/src/middlewares/ContentTypeMiddleware.spec.ts b/src/middlewares/ContentTypeMiddleware.spec.ts new file mode 100644 index 00000000..80b67448 --- /dev/null +++ b/src/middlewares/ContentTypeMiddleware.spec.ts @@ -0,0 +1,21 @@ +import {ContentTypeMiddleware} from "./ContentTypeMiddleware"; +import {IFetchRequest} from "./FetchMiddleware"; + +describe("ContentTypeMiddleware", () => { + it("should add a content type application/json by default", () => { + const spy = jest.fn((options: IFetchRequest) => { + const contentType = options.headers && options.headers["content-type"]; + expect(contentType).toBe("application/json"); + }); + const mw = new ContentTypeMiddleware(); + mw.process({}, spy); + }); + it("should accept a content type in constructor if we want to change it", () => { + const spy = jest.fn((options: IFetchRequest) => { + const contentType = options.headers && options.headers["content-type"]; + expect(contentType).toBe("text/plain"); + }); + const mw = new ContentTypeMiddleware("text/plain"); + mw.process({}, spy); + }); +}); From b4848f7dfa5bc3aec0ef70da34c3c2789ae54c23 Mon Sep 17 00:00:00 2001 From: Nishchal Gautam Date: Thu, 1 Oct 2020 10:41:20 +0700 Subject: [PATCH 2/3] Create ContentTypeMiddleware.ts --- src/middlewares/ContentTypeMiddleware.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/middlewares/ContentTypeMiddleware.ts diff --git a/src/middlewares/ContentTypeMiddleware.ts b/src/middlewares/ContentTypeMiddleware.ts new file mode 100644 index 00000000..20b10ef4 --- /dev/null +++ b/src/middlewares/ContentTypeMiddleware.ts @@ -0,0 +1,15 @@ +import {IMiddleware} from "../Stack"; +import {IFetchRequest, IFetchResponse} from "./FetchMiddleware"; + +export class ContentTypeMiddleware implements IMiddleware>> { + constructor(private contentType: string = "application/json") { + } + + public process(options: IFetchRequest, next: (nextOptions: IFetchRequest) => Promise>): Promise> { + if (!options.headers) { + options.headers = {}; + } + options.headers["content-type"] = this.contentType; + return next(options); + } +} From c2de7e8fdc480aa76f316888bf2fd9d218f30058 Mon Sep 17 00:00:00 2001 From: Nishchal Gautam Date: Thu, 1 Oct 2020 10:42:10 +0700 Subject: [PATCH 3/3] feat(ContentTypeMiddleware): add middleware --- src/middlewares/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/middlewares/index.ts b/src/middlewares/index.ts index 0c663fac..8c697c6d 100644 --- a/src/middlewares/index.ts +++ b/src/middlewares/index.ts @@ -7,3 +7,4 @@ export * from "./FetchMiddleware"; export * from "./MockMiddleware"; export * from "./CacheMiddleware"; export * from "./IncludeCredentialsMiddleware"; +export * from "./ContentTypeMiddleware";