From 5aaf1436d3e09af6b207c11cd7eb65a4657979b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kry=C5=9Bkiewicz?= Date: Mon, 25 Sep 2017 21:28:52 +0200 Subject: [PATCH] [axios-mock-adapter] add typings (#19973) * [axios-mock-adapter] add typings * [axios-mock-adapter] include dependencies and fix linting issues --- .../axios-mock-adapter-tests.ts | 113 ++++++++++++++++++ types/axios-mock-adapter/index.d.ts | 51 ++++++++ types/axios-mock-adapter/package.json | 6 + types/axios-mock-adapter/tsconfig.json | 22 ++++ types/axios-mock-adapter/tslint.json | 6 + 5 files changed, 198 insertions(+) create mode 100644 types/axios-mock-adapter/axios-mock-adapter-tests.ts create mode 100644 types/axios-mock-adapter/index.d.ts create mode 100644 types/axios-mock-adapter/package.json create mode 100644 types/axios-mock-adapter/tsconfig.json create mode 100644 types/axios-mock-adapter/tslint.json diff --git a/types/axios-mock-adapter/axios-mock-adapter-tests.ts b/types/axios-mock-adapter/axios-mock-adapter-tests.ts new file mode 100644 index 0000000000..83fb345cd0 --- /dev/null +++ b/types/axios-mock-adapter/axios-mock-adapter-tests.ts @@ -0,0 +1,113 @@ +import axios from "axios"; +import MockAdapter = require("axios-mock-adapter"); + +const instance = axios.create(); +const mock = new MockAdapter(instance); + +namespace AllowsConstructing { + new MockAdapter(instance); +} + +namespace AllowsConstructingWithOptions { + new MockAdapter(instance, { + delayResponse: 2000, + }); +} + +namespace ExposesAdapter { + mock.adapter(); +} + +namespace SupportsReset { + mock.reset(); +} + +namespace SupportsRestore { + mock.restore(); +} + +namespace SupportsAllHttpVerbs { + mock.onGet; + mock.onPost; + mock.onPut; + mock.onHead; + mock.onDelete; + mock.onPatch; +} + +namespace SupportsAnyVerb { + mock.onAny; +} + +namespace AllowsVerbOnlyMatcher { + mock.onGet(); +} + +namespace AllowsUrlMatcher { + mock.onGet("/foo"); +} + +namespace AllowsUrlRegExpMatcher { + mock.onGet(/\/fo+/); +} + +namespace AllowsStringBodyMatcher { + mock.onPatch("/foo", "bar"); +} + +namespace AllowsBodyMatcher { + mock.onGet("/foo", { + id: 4, + name: "foo", + }); +} + +namespace AllowsParameterMatcher { + mock.onGet("/foo", { + params: { + searchText: "John", + }, + }); +} + +namespace AllowsReplyWithStatus { + mock.onGet().reply(200); +} + +namespace SupportsReplyOnce { + mock.onGet().replyOnce(200); +} + +namespace SupportsPassThrough { + mock.onGet().passThrough(); +} + +namespace SupportsTimeout { + mock.onGet().timeout(); +} + +namespace AllowsFunctionReply { + mock.onGet().reply((config) => { + return [ + 200, + { data: "foo" }, + { RequestedURL: config.url }, + ]; + }); +} + +namespace AllowsPromiseReply { + mock.onGet().reply((config) => { + return Promise.resolve([ + 200, + { data: "bar" }, + { RequestedURL: config.url }, + ]); + }); +} + +namespace SupportsChanining { + mock + .onGet("/users").reply(200, [/* users */]) + .onGet("/posts").reply(200, [/* posts */]); +} diff --git a/types/axios-mock-adapter/index.d.ts b/types/axios-mock-adapter/index.d.ts new file mode 100644 index 0000000000..dbc37f1b80 --- /dev/null +++ b/types/axios-mock-adapter/index.d.ts @@ -0,0 +1,51 @@ +// Type definitions for axios-mock-adapter 1.9 +// Project: https://github.com/ctimmerm/axios-mock-adapter +// Definitions by: Tomasz Kryskiewicz +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version 2.1 + +import { AxiosAdapter, AxiosInstance, AxiosRequestConfig } from "axios"; + +type CallbackResponseSpecFunc = (config: AxiosRequestConfig) => any[] | Promise; + +type ResponseSpecFunc = (statusOrCallback: number | CallbackResponseSpecFunc, data?: any, headers?: any) => MockAdapter; + +interface RequestHandler { + reply: ResponseSpecFunc; + replyOnce: ResponseSpecFunc; + + passThrough(): void; + networkError(): void; + timeout(): void; +} + +interface MockAdapterOptions { + delayResponse?: number; +} + +interface RequestDataMatcher { + [index: string]: any; + params?: { + [index: string]: any, + }; +} + +type RequestMatcherFunc = (matcher?: string | RegExp, body?: string | RequestDataMatcher) => RequestHandler; + +declare class MockAdapter { + constructor(axiosInstance: AxiosInstance, options?: MockAdapterOptions); + + adapter(): AxiosAdapter; + reset(): void; + restore(): void; + + onGet: RequestMatcherFunc; + onPost: RequestMatcherFunc; + onPut: RequestMatcherFunc; + onHead: RequestMatcherFunc; + onDelete: RequestMatcherFunc; + onPatch: RequestMatcherFunc; + onAny: RequestMatcherFunc; +} + +export = MockAdapter; diff --git a/types/axios-mock-adapter/package.json b/types/axios-mock-adapter/package.json new file mode 100644 index 0000000000..bd5a40b16d --- /dev/null +++ b/types/axios-mock-adapter/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "dependencies": { + "axios": "^0.16.2" + } +} diff --git a/types/axios-mock-adapter/tsconfig.json b/types/axios-mock-adapter/tsconfig.json new file mode 100644 index 0000000000..d03b805201 --- /dev/null +++ b/types/axios-mock-adapter/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "baseUrl": "../", + "types": [], + "typeRoots": [ + "../" + ], + "module": "commonjs", + "lib": [ + "es6" + ], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true + }, + "files": [ + "index.d.ts", + "axios-mock-adapter-tests.ts" + ] +} diff --git a/types/axios-mock-adapter/tslint.json b/types/axios-mock-adapter/tslint.json new file mode 100644 index 0000000000..1f85ae1a3b --- /dev/null +++ b/types/axios-mock-adapter/tslint.json @@ -0,0 +1,6 @@ +{ + "extends": "dtslint/dt.json", + "rules": { + "no-namespace": false + } +}