Files
2024-07-25 09:45:02 +07:00

265 lines
9.2 KiB
JavaScript

import expect from "expect";
import axios from "axios";
import curlirize from "../src/main.js";
import { CurlHelper } from "../src/lib/CurlHelper.js";
import qs from 'qs'
import app from "./devapp.js";
curlirize(axios);
describe("Testing curlirize", () => {
it("should return a 200 with the value 'world'", (done) => {
axios.post("http://localhost:7500/", { dummy: "data" })
.then((res) => {
expect(res.status).toBe(200);
expect(res.data.hello).toBe("world");
done();
})
.catch((err) => {
console.error(err);
});
});
it("should allow to remove curlirize part on a request", (done) => {
axios.post("http://localhost:7500/", { dummy: "data" })
.then((res) => {
expect(res.status).toBe(200);
expect(res.data.hello).toBe("world");
res.config.clearCurl();
expect(res.config.curlObject).not.toBeDefined();
expect(res.config.curlCommand).not.toBeDefined();
expect(res.config.clearCurl).not.toBeDefined();
done();
})
.catch((err) => {
console.error(err);
});
});
it("should return a generated command with XML as data", (done) => {
axios.post("http://localhost:7500", "<myTestTag></myTestTag>")
.then((res) => {
expect(res.config.curlObject.getBody()).toBe("--data '<myTestTag></myTestTag>'");
expect(res.config.curlCommand).toContain("<myTestTag></myTestTag>");
done();
})
.catch((err) => {
console.error(err);
});
});
it("should return the response with the defined curl command", (done) => {
axios.post("http://localhost:7500/", { dummy: "data" })
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe(`curl -X POST "http://localhost:7500/" -H "Content-Type:application/x-www-form-urlencoded" --data '{"dummy":"data"}'`);
done();
})
.catch((err) => {
console.error(err);
});
});
it("should return the generated command with no --data attribute", (done) => {
axios.post("http://localhost:7500/")
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe(`curl -X POST "http://localhost:7500/" -H "Content-Type:application/x-www-form-urlencoded"`);
done();
})
.catch((err) => {
console.error(err);
});
});
it("should return the generated command with headers specified on method call", (done) => {
axios.post("http://localhost:7500/", null, {headers: {Authorization: "Bearer 123", testHeader: "Testing"}})
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe('curl -X POST "http://localhost:7500/" -H "Content-Type:application/x-www-form-urlencoded" -H "Authorization:Bearer 123" -H "testHeader:Testing"');
done();
})
.catch((err) => {
console.error(err);
});
});
it("should return the generated command with a queryString specified in the URL", (done) => {
axios.post("http://localhost:7500/", null, {params: {test: 1}})
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe('curl -X POST "http://localhost:7500/?test=1" -H "Content-Type:application/x-www-form-urlencoded"');
done();
})
.catch((err) => {
console.error(err);
});
});
it("should return the generated command with a queryString specified in the URL with paramsSerializer", (done) => {
const api = axios.create({
paramsSerializer: (params) => {
return qs.stringify(params)
}
})
curlirize(api)
api.post("http://localhost:7500/", null, {params: {test: 1, text: 'sim'}})
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe('curl -X POST "http://localhost:7500/?test=1&text=sim" -H "Content-Type:application/x-www-form-urlencoded"');
done();
})
.catch((err) => {
console.error(err);
});
});
it("do not add ? if params is empty", (done) => {
axios.post("http://localhost:7500/", null)
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe('curl -X POST "http://localhost:7500/" -H "Content-Type:application/x-www-form-urlencoded"');
done();
})
.catch((err) => {
console.log('--', err)
console.error(err);
});
});
it("do not cut end slash", (done) => {
const api = axios.create({
baseURL: 'http://localhost:7500',
})
curlirize(api)
api.post("api/", null, {params: {test: 1, text: 'sim'}})
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe('curl -X POST "http://localhost:7500/api/?test=1&text=sim" -H "Content-Type:application/x-www-form-urlencoded"');
done();
})
.catch((err) => {
console.error(err);
});
});
it("cut middle slash", (done) => {
const api = axios.create({
baseURL: 'http://localhost:7500/',
})
curlirize(api)
api.post("/api/", null, {params: {test: 1, text: 'sim'}})
.then((res) => {
expect(res.config.curlCommand).toBeDefined();
expect(res.config.curlCommand).toBe('curl -X POST "http://localhost:7500/api/?test=1&text=sim" -H "Content-Type:application/x-www-form-urlencoded"');
done();
})
.catch((err) => {
console.error(err);
});
});
});
describe("Testing curl-helper module", () => {
const fakeConfig = {
adapter: () => { return "dummy"; },
transformRequest: { "0": () => { return "dummy"; } },
transformResponse: { "0": () => { return "dummy"; } },
timeout: 0,
xsrfCookieName: "XSRF-TOKEN",
xsrfHeaderName: "X-XSRF-TOKEN",
maxContentLength: -1,
validateStatus: () => { return "dummy"; },
headers: { Accept: "application/json, text/plain, */*", "Content-Type": "application/json;charset=utf-8" },
method: "post",
url: "http://localhost:7500/",
data: { dummy: "data" },
params: { testParam: "test1", testParamTwo: "test2"}
};
const curl = new CurlHelper(fakeConfig);
it("should return an empty string if data is undefined", (done) => {
let emptyConfig = {
adapter: () => { return "dummy" },
transformRequest: { "0": () => { return "dummy" } },
transformResponse: { "0": () => { return "dummy" } },
timeout: 0,
xsrfCookieName: "XSRF-TOKEN",
xsrfHeaderName: "X-XSRF-TOKEN",
maxContentLength: -1,
validateStatus: () => { return "dummy" },
headers: { Accept: "application/json, text/plain, */*", "Content-Type": "application/json;charset=utf-8" },
method: "post",
url: "http://localhost:7500/",
data: undefined
};
const emptyDataCurl = new CurlHelper(emptyConfig);
expect(emptyDataCurl.getBody()).toBe("");
done();
});
it("should return an empty string if data is == empty string", (done) => {
let emptyConfig = {
adapter: () => { return "dummy" },
transformRequest: { "0": () => { return "dummy" } },
transformResponse: { "0": () => { return "dummy" } },
timeout: 0,
xsrfCookieName: "XSRF-TOKEN",
xsrfHeaderName: "X-XSRF-TOKEN",
maxContentLength: -1,
validateStatus: () => { return "dummy" },
headers: { Accept: "application/json, text/plain, */*", "Content-Type": "application/json;charset=utf-8" },
method: "post",
url: "http://localhost:7500/",
data: ""
};
const emptyDataCurl = new CurlHelper(emptyConfig);
expect(emptyDataCurl.getBody()).toBe('');
done();
});
it("should return {} as --data if req data is == {}", (done) => {
let emptyConfig = {
adapter: () => { return "dummy" },
transformRequest: { "0": () => { return "dummy" } },
transformResponse: { "0": () => { return "dummy" } },
timeout: 0,
xsrfCookieName: "XSRF-TOKEN",
xsrfHeaderName: "X-XSRF-TOKEN",
maxContentLength: -1,
validateStatus: () => { return "dummy" },
headers: { Accept: "application/json, text/plain, */*", "Content-Type": "application/json;charset=utf-8" },
method: "post",
url: "http://localhost:7500/",
data: {}
};
const emptyDataCurl = new CurlHelper(emptyConfig);
expect(emptyDataCurl.getBody()).toBe("--data '{}'");
done();
});
it("should return a string with headers", (done) => {
expect(curl.getHeaders()).toBe("-H \"Accept:application/json, text/plain, */*\" -H \"Content-Type:application/json;charset=utf-8\"");
done();
});
it("should return a string with HTTP method", (done) => {
expect(curl.getMethod()).toBe("-X POST");
done();
});
it("should return a string with request body", (done) => {
expect(curl.getBody()).toBe(`--data '{"dummy":"data"}'`);
done();
});
it("should return the URL of the request", (done) => {
expect(curl.getUrl()).toBe("http://localhost:7500/");
done();
});
it("should return the queryString of the request", (done) => {
expect(curl.getQueryString()).toBe("?testParam=test1&testParamTwo=test2");
done();
});
});