From aa17391479985c8cbe4ab4eb0093672a4db79aa2 Mon Sep 17 00:00:00 2001 From: Abhinav Srivastava Date: Thu, 12 Dec 2019 16:48:53 +0530 Subject: [PATCH] Removing the set and get middleware chain method --- docs/ChaosHandlerSamples.md | 18 ++++++------ docs/CustomMiddlewareChain.md | 38 +----------------------- spec/core/HTTPClient.ts | 39 ------------------------- src/Client.ts | 19 ------------ src/HTTPClient.ts | 31 -------------------- src/middleware/AuthenticationHandler.ts | 9 ------ src/middleware/ChaosHandler.ts | 9 ------ src/middleware/IMiddleware.ts | 1 - src/middleware/RedirectHandler.ts | 9 ------ src/middleware/RetryHandler.ts | 9 ------ src/middleware/TelemetryHandler.ts | 9 ------ 11 files changed, 10 insertions(+), 181 deletions(-) diff --git a/docs/ChaosHandlerSamples.md b/docs/ChaosHandlerSamples.md index cb3f8cb2f..f0e3887b3 100644 --- a/docs/ChaosHandlerSamples.md +++ b/docs/ChaosHandlerSamples.md @@ -4,11 +4,15 @@ > Uses [Custom Middleware Chain](https://github.com/microsoftgraph/msgraph-sdk-javascript/blob/dev/docs/CustomMiddlewareChain.md), it's not included in default middleware chain -### Modes in Testing Handler +### Modes in Chaos Handler - Manual mode - Setting the Response code manually. - Global/Client Level - Provide a map declared manually containing response code for the requests. - Request Level - Providing response code per request. This would be overriding the Global level response code (if any). - Random mode - We get a random Response code from a set of response code defined for each method. +**A request Passes through to the Graph, if there is no entry for the request** + +**Note - Always add ChaosHandler before HttpMessageHandler in the midllewareChain** + ### Samples ```js @@ -25,16 +29,12 @@ const client = MicrosoftGraph.Client.init({ }, }); -// Declaring the Map, containing response codes for the urls -const manualMap = new Map([["/me/messages/.*", new Map([["GET", 429], ["PATCH", 429]])], ["/me", new Map([["POST", 502]])]]); +/* +Create a custom MiddlewareChain passing information in this way -// Declaring the chaosHandler and passing the map (if using map, we have to put default strategy as MANUAL) +const manualMap = new Map([["/me/messages/.*", new Map([["GET", 429], ["PATCH", 429]])], ["/me", new Map([["POST", 502]])]]); const chaosHandler = new MicrosoftGraph.ChaosHandler(new MicrosoftGraph.ChaosHandlerOptions(MicrosoftGraph.ChaosStrategy.MANUAL), manualMap); - -// Modifying the default middleware chain to add chaos handler, just before httpMessageHandler, otherwise there can be a problem -let arr = client.getMiddlewareChain(); -arr.splice(arr.length - 1, 0, chaosHandler); -client.setMiddlewareChain(arr); +*/ // This request would use the Map (Manual mode) const mail = { diff --git a/docs/CustomMiddlewareChain.md b/docs/CustomMiddlewareChain.md index 775c54104..d86163088 100644 --- a/docs/CustomMiddlewareChain.md +++ b/docs/CustomMiddlewareChain.md @@ -143,41 +143,5 @@ export class MyLoggingHandler implements Middleware { } } ``` -Refer [MiddlewareOptions](../src/middleware/options/IMiddlewareOptions.ts) interface to know its structure. - -### Modifying the Current Middleware Chain -```js -// initialising client -const client = MicrosoftGraph.Client.init({ - defaultVersion: "v1.0", - debugLogging: true, - authProvider: (done) => { - done(null, secrets.accessToken); - }, -}); - -// getting the current middleware chain (in this case, it's the default one) -let arr = client.getMiddlewareChain(); - -// Initialising the Middleware chain that we created -const dummyRandomHandler = new dummyRandomHandler(); - -// adding the dummy handler in the array of middlewares at 3rd position -arr.splice(2, 0, dummyRandomHandler); - -// setting the new middleware chain -client.setMiddlewareChain(arr); - -// calling the api -client - .api("/me") - .select("displayName") - .get() - .then((res) => { - console.log(res); - }) - .catch((err) => { - console.log(err); - }); -``` +Refer [MiddlewareOptions](../src/middleware/options/IMiddlewareOptions.ts) interface to know its structure. diff --git a/spec/core/HTTPClient.ts b/spec/core/HTTPClient.ts index f4a70c5ef..8c00d9aee 100644 --- a/spec/core/HTTPClient.ts +++ b/spec/core/HTTPClient.ts @@ -7,13 +7,9 @@ import { assert } from "chai"; -import { Client } from "../../src/Client"; import { HTTPClient } from "../../src/HTTPClient"; import { Context } from "../../src/IContext"; import { FetchOptions } from "../../src/IFetchOptions"; -import { RedirectHandlerOptions } from "../../src/middleware/options/RedirectHandlerOptions"; -import { RedirectHandler } from "../../src/middleware/RedirectHandler"; -import { TelemetryHandler } from "../../src/middleware/TelemetryHandler"; import { DummyHTTPMessageHandler } from "../DummyHTTPMessageHandler"; describe("HTTPClient.ts", () => { @@ -72,39 +68,4 @@ describe("HTTPClient.ts", () => { } }); }); - - describe("getMiddlewareArray", () => { - it("Should work fine for a single middleware in the chain, which does have a getNext method", () => { - const telemetryHandler = new TelemetryHandler(); - const tempHttpClient: HTTPClient = new HTTPClient(telemetryHandler); - assert.equal(tempHttpClient.getMiddlewareArray().length, 1); - }); - - it("Should work fine for a single middleware in the chain, which doesn't have a getNext method", () => { - const tempHttpClient: HTTPClient = new HTTPClient(httpMessageHandler); - assert.equal(tempHttpClient.getMiddlewareArray().length, 1); - }); - - it("Should work fine for a chain containing many middlewares", () => { - const telemetryHandler = new TelemetryHandler(); - const redirectHandler = new RedirectHandler(new RedirectHandlerOptions()); - redirectHandler.setNext(telemetryHandler); - telemetryHandler.setNext(httpMessageHandler); - const tempHttpClient: HTTPClient = new HTTPClient(redirectHandler); - assert.equal(tempHttpClient.getMiddlewareArray().length, 3); - }); - }); - - describe("setMiddlewareArray", () => { - it("Should make a chain out of the provided array of middlewares", () => { - const telemetryHandler = new TelemetryHandler(); - const redirectHandler = new RedirectHandler(new RedirectHandlerOptions()); - redirectHandler.setNext(httpMessageHandler); - const tempHttpClient: HTTPClient = new HTTPClient(redirectHandler); - const middlewareArray = tempHttpClient.getMiddlewareArray(); - middlewareArray.splice(1, 0, telemetryHandler); - tempHttpClient.setMiddlewareArray(middlewareArray); - assert.equal(tempHttpClient.getMiddlewareArray().length, 3); - }); - }); }); diff --git a/src/Client.ts b/src/Client.ts index 610144447..0cd9b04c8 100644 --- a/src/Client.ts +++ b/src/Client.ts @@ -16,7 +16,6 @@ import { HTTPClient } from "./HTTPClient"; import { HTTPClientFactory } from "./HTTPClientFactory"; import { ClientOptions } from "./IClientOptions"; import { Options } from "./IOptions"; -import { Middleware } from "./middleware/IMiddleware"; import { validatePolyFilling } from "./ValidatePolyFilling"; export class Client { @@ -104,24 +103,6 @@ export class Client { this.httpClient = httpClient; } - /** - * @public - * function to get the array of middlewares in use right now - * @returns An array of middlewares - */ - public getMiddlewareChain() { - return this.httpClient.getMiddlewareArray(); - } - - /** - * @public - * function to set the middleware chain - * @param {Middleware[]} middlewareArray - An array of middlewares - */ - public setMiddlewareChain(middlewareArray: Middleware[]) { - return this.httpClient.setMiddlewareArray(middlewareArray); - } - /** * @public * Entry point to make requests diff --git a/src/HTTPClient.ts b/src/HTTPClient.ts index ba4c3cf0a..2276fb227 100644 --- a/src/HTTPClient.ts +++ b/src/HTTPClient.ts @@ -33,37 +33,6 @@ export class HTTPClient { this.middleware = middleware; } - /** - * @public - * To get an array of Middleware, used in middleware chain - * @returns An array of middlewares - */ - public getMiddlewareArray(): Middleware[] { - const middlewareArray: Middleware[] = []; - let currentMiddleware = this.middleware; - while (currentMiddleware) { - middlewareArray.push(currentMiddleware); - if (typeof currentMiddleware.getNext !== "undefined") { - currentMiddleware = currentMiddleware.getNext(); - } else { - break; - } - } - return middlewareArray; - } - - /** - * @public - * To set the middleware chain - * @param {Middleware[]} middlewareArray - The array containing the middlewares - */ - public setMiddlewareArray(middlewareArray: Middleware[]) { - for (let num = 0; num < middlewareArray.length - 1; num += 1) { - middlewareArray[num].setNext(middlewareArray[num + 1]); - } - this.middleware = middlewareArray[0]; - } - /** * @public * @async diff --git a/src/middleware/AuthenticationHandler.ts b/src/middleware/AuthenticationHandler.ts index 358d900f9..3275c6092 100644 --- a/src/middleware/AuthenticationHandler.ts +++ b/src/middleware/AuthenticationHandler.ts @@ -94,13 +94,4 @@ export class AuthenticationHandler implements Middleware { public setNext(next: Middleware): void { this.nextMiddleware = next; } - - /** - * @public - * To get the next middleware in the chain - * @returns next Middleware instance - */ - public getNext(): Middleware { - return this.nextMiddleware; - } } diff --git a/src/middleware/ChaosHandler.ts b/src/middleware/ChaosHandler.ts index bc0ec53c1..c79252cd0 100644 --- a/src/middleware/ChaosHandler.ts +++ b/src/middleware/ChaosHandler.ts @@ -279,13 +279,4 @@ export class ChaosHandler implements Middleware { public setNext(next: Middleware): void { this.nextMiddleware = next; } - - /** - * @public - * To get the next middleware in the chain - * @returns next Middleware instance - */ - public getNext(): Middleware { - return this.nextMiddleware; - } } diff --git a/src/middleware/IMiddleware.ts b/src/middleware/IMiddleware.ts index 51e0821d0..70dacc703 100644 --- a/src/middleware/IMiddleware.ts +++ b/src/middleware/IMiddleware.ts @@ -15,5 +15,4 @@ import { Context } from "../IContext"; export interface Middleware { execute: (context: Context) => Promise; setNext?: (middleware: Middleware) => void; - getNext?: () => Middleware; } diff --git a/src/middleware/RedirectHandler.ts b/src/middleware/RedirectHandler.ts index 5878062e5..4bdcc9e39 100644 --- a/src/middleware/RedirectHandler.ts +++ b/src/middleware/RedirectHandler.ts @@ -243,13 +243,4 @@ export class RedirectHandler implements Middleware { public setNext(next: Middleware): void { this.nextMiddleware = next; } - - /** - * @public - * To get the next middleware in the chain - * @returns next Middleware instance - */ - public getNext(): Middleware { - return this.nextMiddleware; - } } diff --git a/src/middleware/RetryHandler.ts b/src/middleware/RetryHandler.ts index efd159a26..56b5c22c3 100644 --- a/src/middleware/RetryHandler.ts +++ b/src/middleware/RetryHandler.ts @@ -216,13 +216,4 @@ export class RetryHandler implements Middleware { public setNext(next: Middleware): void { this.nextMiddleware = next; } - - /** - * @public - * To get the next middleware in the chain - * @returns next Middleware instance - */ - public getNext(): Middleware { - return this.nextMiddleware; - } } diff --git a/src/middleware/TelemetryHandler.ts b/src/middleware/TelemetryHandler.ts index 1d1b09dec..e72d2c187 100644 --- a/src/middleware/TelemetryHandler.ts +++ b/src/middleware/TelemetryHandler.ts @@ -96,13 +96,4 @@ export class TelemetryHandler implements Middleware { public setNext(next: Middleware): void { this.nextMiddleware = next; } - - /** - * @public - * To get the next middleware in the chain - * @returns next Middleware instance - */ - public getNext(): Middleware { - return this.nextMiddleware; - } }