PromucFlow_constructor/app/client/src/api/ApiUtils.test.ts

97 lines
3.0 KiB
TypeScript
Raw Normal View History

import {
apiRequestInterceptor,
apiSuccessResponseInterceptor,
apiFailureResponseInterceptor,
axiosConnectionAbortedCode,
} from "./ApiUtils";
import { AxiosRequestConfig, AxiosResponse } from "axios";
import { ActionExecutionResponse } from "api/ActionAPI";
import {
createMessage,
ERROR_0,
SERVER_API_TIMEOUT_ERROR,
refactor: admin settings (#9906) * refactor admin settings feature * separated save-restart bar to separate component * created new CE dir to facilitate code split * created separate ee dir and exporting everything we have in ce file. * little mod * minor fix * splitting settings types config * using object literals for category types instead of enums * CE: support use of component for each category * minor style fix * authentication page UI changes implemented * github signup doc url added back * removed comments * routing updates * made subcategories listing in left pane optional * added muted saml to auth listing * added breadcrumbs and enabled button * created separate component for auth page and auth config * added callout and disconnect components * updated breadcrumbs component * minor updates to common components * updated warning callout and added icon * ce: test cases fixed * updated test file name * warning banner callout added on auth page * updated callout banner for form login * CE: Split config files * CE: moved the window declaration in EE file as its dependency will be updated in EE * CE: Splitting ApiConstants and SocialLogin constants * CE: split login page * CE: moved getSocialLoginButtonProps func to EE file as it's dependencies will be updated in EE * added key icon * CE: created a factory class to share social auths list * Minor style fix for social btns * Updated the third party auth styles * Small fixes to styling * ce: splitting forms constants * breadcrumbs implemented for all pages in admin settings * Settings breadcrumbs separated * splitted settings breadcrumbs between ce and ee * renamed default import * minor style fix * added login form config. * updated login/signup pages to use form login disabled config * removed common functionality outside * implemented breadcrumb component from scratch without using blueprint * removed unwanted code * Small style update * updated breadcrumb categories file name and breadcrumb icon * added cypress tests for admin settings auth page * added comments * update locator for upgrade button * added link for intercom on upgrade button * removed unnecessary file * minor style fix * style fix for auth option cards * split messages constant * fixed imports for message constants splitting. * added message constants * updated unit test cases * fixed messages import in cypress index * fixed messages import again, cypress fails to read re-exported objs. * added OIDC auth method on authentication page * updated import statements from ee to @appsmith * removed dead code * updated read more link UI * PR comments fixes * some UI fixes * used color and fonts from theme * fixed some imports * fixed some imports * removed warning imports * updated OIDC logo and auth method desc copies * css changes * css changes * css changes * updated cypress test for breadcrumb * moved callout component to ads as calloutv2 * UI changes for form fields * updated css for spacing between form fields * added sub-text on auth pages * added active class for breadcrumb item * added config for disable signup toggle and fixed UI issues of restart banner * fixed admin settings page bugs * assigned true as default state for signup * fixed messages import statements * updated code for PR comments related suggestions * reverted file path change in cypress support * updated cypress test * updated cypress test Co-authored-by: Ankita Kinger <ankita@appsmith.com>
2022-02-11 18:08:46 +00:00
} from "@appsmith/constants/messages";
import { ERROR_CODES } from "@appsmith/constants/ApiConstants";
describe("axios api interceptors", () => {
describe("Axios api request interceptor", () => {
it("adds timer to the request object", () => {
const request: AxiosRequestConfig = {
url: "https://app.appsmith.com/v1/api/actions/execute",
};
const interceptedRequest = apiRequestInterceptor(request);
expect(interceptedRequest).toHaveProperty("timer");
});
});
describe("Axios api response success interceptor", () => {
it("transforms an action execution response", () => {
const response: AxiosResponse = {
data: "Test data",
headers: {
// @ts-expect-error: content-length should be string
"content-length": 123,
},
config: {
url: "https://app.appsmith.com/v1/api/actions/execute",
// @ts-expect-error: type mismatch
timer: 0,
},
};
const interceptedResponse: ActionExecutionResponse = apiSuccessResponseInterceptor(
response,
);
expect(interceptedResponse).toHaveProperty("clientMeta");
expect(interceptedResponse.clientMeta).toHaveProperty("size");
expect(interceptedResponse.clientMeta.size).toBe(123);
expect(interceptedResponse.clientMeta).toHaveProperty("duration");
});
it("just returns the response data for other requests", () => {
const response: AxiosResponse = {
data: "Test data",
config: {
url: "https://app.appsmith.com/v1/api/actions",
//@ts-expect-error: type mismatch
timer: 0,
},
};
const interceptedResponse: ActionExecutionResponse = apiSuccessResponseInterceptor(
response,
);
expect(interceptedResponse).toBe("Test data");
});
});
describe("Api response failure interceptor", () => {
beforeEach(() => {
jest.restoreAllMocks();
});
it("checks for no internet errors", () => {
jest.spyOn(navigator, "onLine", "get").mockReturnValue(false);
const interceptedResponse = apiFailureResponseInterceptor({});
expect(interceptedResponse).rejects.toStrictEqual({
message: createMessage(ERROR_0),
});
});
it.todo("handles axios cancel gracefully");
it("handles timeout errors", () => {
const error = {
code: axiosConnectionAbortedCode,
message: "timeout of 10000ms exceeded",
};
const interceptedResponse = apiFailureResponseInterceptor(error);
expect(interceptedResponse).rejects.toStrictEqual({
message: createMessage(SERVER_API_TIMEOUT_ERROR),
code: ERROR_CODES.REQUEST_TIMEOUT,
});
});
});
});