@@ -2,8 +2,10 @@ import 'isomorphic-fetch';
22import MatcherUtils from './../src/matcher-utils' ;
33import ResponseUtils from './../src/response-utils' ;
44import FetchMock from '../src/yet-another-fetch-mock' ;
5- import { HandlerArgument , RequestUrl } from '../src/types' ;
5+ import { HandlerArgument , RequestUrl , ResponseData } from '../src/types' ;
66import { findBody , findPathParams } from '../src/internal-utils' ;
7+ import MiddlewareUtils from '../src/middleware-utils' ;
8+ import MathMock from './math-mock' ;
79
810function fetchToJson ( url : string , options ?: RequestInit ) {
911 return fetch ( url , options ) . then ( resp => resp . json ( ) ) ;
@@ -240,3 +242,75 @@ describe('FetchMock', () => {
240242 } ) ;
241243 } ) ;
242244} ) ;
245+
246+ describe ( 'middleware-utils' , ( ) => {
247+ beforeAll ( MathMock . setup ) ;
248+ afterAll ( MathMock . teardown ) ;
249+
250+ it ( 'should combine middlewares' , done => {
251+ MathMock . fixRandom ( 0.2 ) ;
252+ const delay = jest . fn ( MiddlewareUtils . delayMiddleware ( 100 ) ) ;
253+ const failure = jest . fn ( MiddlewareUtils . failurerateMiddleware ( 0.3 , { status : 1337 } ) ) ;
254+ const startTime = new Date ( ) . getTime ( ) ;
255+
256+ const combined = MiddlewareUtils . combine ( delay , failure ) ;
257+ const result = combined ( { } as HandlerArgument , 'data' as ResponseData ) ;
258+
259+ ( result as Promise < ResponseData > ) . then ( res => {
260+ const endTime = new Date ( ) . getTime ( ) ;
261+ expect ( endTime - startTime ) . toBeGreaterThanOrEqual ( 100 ) ;
262+
263+ expect ( res . status ) . toBe ( 1337 ) ;
264+ expect ( delay ) . toHaveBeenCalledTimes ( 1 ) ;
265+ expect ( failure ) . toHaveBeenCalledTimes ( 1 ) ;
266+ done ( ) ;
267+ } ) ;
268+ } ) ;
269+
270+ it ( 'should delay the response' , done => {
271+ const delay = MiddlewareUtils . delayMiddleware ( 100 ) ;
272+ const result = delay ( { } as HandlerArgument , 'delayed' as ResponseData ) ;
273+ const startTime = new Date ( ) . getTime ( ) ;
274+
275+ ( result as Promise < String > ) . then ( res => {
276+ const endTime = new Date ( ) . getTime ( ) ;
277+
278+ expect ( endTime - startTime ) . toBeGreaterThanOrEqual ( 100 ) ;
279+ expect ( res ) . toBe ( 'delayed' ) ;
280+ done ( ) ;
281+ } ) ;
282+ } ) ;
283+
284+ it ( 'should have a random failure rate' , done => {
285+ MathMock . fixRandom ( 0.2 ) ;
286+ const delay = MiddlewareUtils . failurerateMiddleware ( 0.3 ) ;
287+ const result = delay ( { } as HandlerArgument , 'normal-response' as ResponseData ) ;
288+
289+ ( result as Promise < ResponseData > ) . then ( res => {
290+ expect ( res . status ) . toBe ( 500 ) ;
291+ done ( ) ;
292+ } ) ;
293+ } ) ;
294+
295+ it ( 'should have a random failure rate2' , done => {
296+ MathMock . fixRandom ( 0.4 ) ;
297+ const delay = MiddlewareUtils . failurerateMiddleware ( 0.3 ) ;
298+ const result = delay ( { } as HandlerArgument , 'normal-response' as ResponseData ) ;
299+
300+ ( result as Promise < String > ) . then ( res => {
301+ expect ( res ) . toBe ( 'normal-response' ) ;
302+ done ( ) ;
303+ } ) ;
304+ } ) ;
305+
306+ it ( 'should support custom error response' , done => {
307+ MathMock . fixRandom ( 0.2 ) ;
308+ const delay = MiddlewareUtils . failurerateMiddleware ( 0.3 , { status : 1337 } ) ;
309+ const result = delay ( { } as HandlerArgument , 'normal-response' as ResponseData ) ;
310+
311+ ( result as Promise < ResponseData > ) . then ( res => {
312+ expect ( res . status ) . toBe ( 1337 ) ;
313+ done ( ) ;
314+ } ) ;
315+ } ) ;
316+ } ) ;
0 commit comments