You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.9 KiB
99 lines
2.9 KiB
import axios from "axios";
|
|
import MockAdapter from "axios-mock-adapter";
|
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
|
|
import { RequestClient } from "./request-client";
|
|
|
|
describe("requestClient", () => {
|
|
let mock: MockAdapter;
|
|
let requestClient: RequestClient;
|
|
|
|
beforeEach(() => {
|
|
mock = new MockAdapter(axios);
|
|
requestClient = new RequestClient();
|
|
});
|
|
|
|
afterEach(() => {
|
|
mock.reset();
|
|
});
|
|
|
|
it("should successfully make a GET request", async () => {
|
|
mock.onGet("test/url").reply(200, { data: "response" });
|
|
|
|
const response = await requestClient.get("test/url");
|
|
|
|
expect(response.data).toEqual({ data: "response" });
|
|
});
|
|
|
|
it("should successfully make a POST request", async () => {
|
|
const postData = { key: "value" };
|
|
const mockData = { data: "response" };
|
|
mock.onPost("/test/post", postData).reply(200, mockData);
|
|
const response = await requestClient.post("/test/post", postData);
|
|
expect(response.data).toEqual(mockData);
|
|
});
|
|
|
|
it("should successfully make a PUT request", async () => {
|
|
const putData = { key: "updatedValue" };
|
|
const mockData = { data: "updated response" };
|
|
mock.onPut("/test/put", putData).reply(200, mockData);
|
|
const response = await requestClient.put("/test/put", putData);
|
|
expect(response.data).toEqual(mockData);
|
|
});
|
|
|
|
it("should successfully make a DELETE request", async () => {
|
|
const mockData = { data: "delete response" };
|
|
mock.onDelete("/test/delete").reply(200, mockData);
|
|
const response = await requestClient.delete("/test/delete");
|
|
expect(response.data).toEqual(mockData);
|
|
});
|
|
|
|
it("should handle network errors", async () => {
|
|
mock.onGet("/test/error").networkError();
|
|
try {
|
|
await requestClient.get("/test/error");
|
|
expect(true).toBe(false);
|
|
} catch (error: any) {
|
|
expect(error.isAxiosError).toBe(true);
|
|
expect(error.message).toBe("Network Error");
|
|
}
|
|
});
|
|
|
|
it("should handle timeout", async () => {
|
|
mock.onGet("/test/timeout").timeout();
|
|
try {
|
|
await requestClient.get("/test/timeout");
|
|
expect(true).toBe(false);
|
|
} catch (error: any) {
|
|
expect(error.isAxiosError).toBe(true);
|
|
expect(error.code).toBe("ECONNABORTED");
|
|
}
|
|
});
|
|
|
|
it("should successfully upload a file", async () => {
|
|
const fileData = new Blob(["file contents"], { type: "text/plain" });
|
|
|
|
mock.onPost("/test/upload").reply((config) => {
|
|
return config.data instanceof FormData && config.data.has("file")
|
|
? [200, { data: "file uploaded" }]
|
|
: [400, { error: "Bad Request" }];
|
|
});
|
|
|
|
const response = await requestClient.upload("/test/upload", {
|
|
file: fileData,
|
|
});
|
|
expect(response.data).toEqual({ data: "file uploaded" });
|
|
});
|
|
|
|
it("should successfully download a file as a blob", async () => {
|
|
const mockFileContent = new Blob(["mock file content"], {
|
|
type: "text/plain",
|
|
});
|
|
|
|
mock.onGet("/test/download").reply(200, mockFileContent);
|
|
|
|
const res = await requestClient.download("/test/download");
|
|
|
|
expect(res.data).toBeInstanceOf(Blob);
|
|
});
|
|
});
|
|
|