mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 03:39:55 +00:00
In the latest versions of ESLint, more and more formatting rules were removed or declared deprecated. These rules have been integrated into the new Stylistic package (https://eslint.style/guide/why) and expanded. Stylistic acts as a better formatter for JavaScript as Prettier. With this PR there are many changes that make the code more uniform, but it may be difficult to review due to the large amount. Even if I have no worries about the changes, perhaps this would be something for the release after next. Let me know what you think.
147 lines
4.5 KiB
JavaScript
147 lines
4.5 KiB
JavaScript
const { cors } = require("../../../js/server_functions");
|
|
|
|
describe("server_functions tests", () => {
|
|
describe("The cors method", () => {
|
|
let fetchResponse;
|
|
let fetchResponseHeadersGet;
|
|
let fetchResponseHeadersText;
|
|
let corsResponse;
|
|
let request;
|
|
|
|
let fetchMock;
|
|
|
|
beforeEach(() => {
|
|
fetchResponseHeadersGet = jest.fn(() => {});
|
|
fetchResponseHeadersText = jest.fn(() => {});
|
|
fetchResponse = {
|
|
headers: {
|
|
get: fetchResponseHeadersGet
|
|
},
|
|
text: fetchResponseHeadersText
|
|
};
|
|
// eslint-disable-next-line
|
|
fetch = jest.fn();
|
|
fetch.mockImplementation(() => fetchResponse);
|
|
|
|
fetchMock = fetch;
|
|
|
|
corsResponse = {
|
|
set: jest.fn(() => {}),
|
|
send: jest.fn(() => {})
|
|
};
|
|
|
|
request = {
|
|
url: "/cors?url=www.test.com"
|
|
};
|
|
});
|
|
|
|
it("Calls correct URL once", async () => {
|
|
const urlToCall = "http://www.test.com/path?param1=value1";
|
|
request.url = `/cors?url=${urlToCall}`;
|
|
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchMock.mock.calls).toHaveLength(1);
|
|
expect(fetchMock.mock.calls[0][0]).toBe(urlToCall);
|
|
});
|
|
|
|
it("Forewards Content-Type if json", async () => {
|
|
fetchResponseHeadersGet.mockImplementation(() => "json");
|
|
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchResponseHeadersGet.mock.calls).toHaveLength(1);
|
|
expect(fetchResponseHeadersGet.mock.calls[0][0]).toBe("Content-Type");
|
|
|
|
expect(corsResponse.set.mock.calls).toHaveLength(1);
|
|
expect(corsResponse.set.mock.calls[0][0]).toBe("Content-Type");
|
|
expect(corsResponse.set.mock.calls[0][1]).toBe("json");
|
|
});
|
|
|
|
it("Forewards Content-Type if xml", async () => {
|
|
fetchResponseHeadersGet.mockImplementation(() => "xml");
|
|
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchResponseHeadersGet.mock.calls).toHaveLength(1);
|
|
expect(fetchResponseHeadersGet.mock.calls[0][0]).toBe("Content-Type");
|
|
|
|
expect(corsResponse.set.mock.calls).toHaveLength(1);
|
|
expect(corsResponse.set.mock.calls[0][0]).toBe("Content-Type");
|
|
expect(corsResponse.set.mock.calls[0][1]).toBe("xml");
|
|
});
|
|
|
|
it("Sends correct data from response", async () => {
|
|
const responseData = "some data";
|
|
fetchResponseHeadersText.mockImplementation(() => responseData);
|
|
|
|
let sentData;
|
|
corsResponse.send = jest.fn((input) => {
|
|
sentData = input;
|
|
});
|
|
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchResponseHeadersText.mock.calls).toHaveLength(1);
|
|
expect(sentData).toBe(responseData);
|
|
});
|
|
|
|
it("Sends error data from response", async () => {
|
|
const error = new Error("error data");
|
|
fetchResponseHeadersText.mockImplementation(() => {
|
|
throw error;
|
|
});
|
|
|
|
let sentData;
|
|
corsResponse.send = jest.fn((input) => {
|
|
sentData = input;
|
|
});
|
|
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchResponseHeadersText.mock.calls).toHaveLength(1);
|
|
expect(sentData).toBe(error);
|
|
});
|
|
|
|
it("Fetches with user agent by default", async () => {
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchMock.mock.calls).toHaveLength(1);
|
|
expect(fetchMock.mock.calls[0][1]).toHaveProperty("headers");
|
|
expect(fetchMock.mock.calls[0][1].headers).toHaveProperty("User-Agent");
|
|
});
|
|
|
|
it("Fetches with specified headers", async () => {
|
|
const headersParam = "sendheaders=header1:value1,header2:value2";
|
|
const urlParam = "http://www.test.com/path?param1=value1";
|
|
request.url = `/cors?${headersParam}&url=${urlParam}`;
|
|
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchMock.mock.calls).toHaveLength(1);
|
|
expect(fetchMock.mock.calls[0][1]).toHaveProperty("headers");
|
|
expect(fetchMock.mock.calls[0][1].headers).toHaveProperty("header1", "value1");
|
|
expect(fetchMock.mock.calls[0][1].headers).toHaveProperty("header2", "value2");
|
|
});
|
|
|
|
it("Sends specified headers", async () => {
|
|
fetchResponseHeadersGet.mockImplementation((input) => input.replace("header", "value"));
|
|
|
|
const expectedheaders = "expectedheaders=header1,header2";
|
|
const urlParam = "http://www.test.com/path?param1=value1";
|
|
request.url = `/cors?${expectedheaders}&url=${urlParam}`;
|
|
|
|
await cors(request, corsResponse);
|
|
|
|
expect(fetchMock.mock.calls).toHaveLength(1);
|
|
expect(fetchMock.mock.calls[0][1]).toHaveProperty("headers");
|
|
expect(corsResponse.set.mock.calls).toHaveLength(3);
|
|
expect(corsResponse.set.mock.calls[0][0]).toBe("Content-Type");
|
|
expect(corsResponse.set.mock.calls[1][0]).toBe("header1");
|
|
expect(corsResponse.set.mock.calls[1][1]).toBe("value1");
|
|
expect(corsResponse.set.mock.calls[2][0]).toBe("header2");
|
|
expect(corsResponse.set.mock.calls[2][1]).toBe("value2");
|
|
});
|
|
});
|
|
});
|