Skip to content

Commit 84a1af7

Browse files
authored
test: Added testing for someone request response API (#156)
1 parent 6e1d9b1 commit 84a1af7

File tree

1 file changed

+111
-20
lines changed

1 file changed

+111
-20
lines changed

tests/renderCard.test.ts

Lines changed: 111 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
1-
import readmeStats, { UiConfig } from '../api/index';
2-
import escapeHTML from 'escape-html';
3-
import svg2img from '@fajarkim/svg2img';
4-
import getData from '../src/getData';
5-
import cardStyle from '../src/card';
6-
import { themes, Themes } from '../themes/index';
7-
import { isValidHexColor, isValidGradient, parseBoolean } from '../src/common/utils';
8-
9-
jest.mock('@fajarkim/svg2img');
10-
jest.mock('../src/getData');
11-
jest.mock('../src/card');
12-
jest.mock('express');
13-
14-
describe('Test GitHub Readme Profile API', () => {
1+
import readmeStats from "../api/index";
2+
import escapeHTML from "escape-html";
3+
import svg2img from "@fajarkim/svg2img";
4+
import getData from "../src/getData";
5+
import cardStyle from "../src/card";
6+
import { themes } from "../themes/index";
7+
import { locales } from "../src/translations";
8+
9+
jest.mock("@fajarkim/svg2img");
10+
jest.mock("../src/getData");
11+
jest.mock("../src/card");
12+
jest.mock("express");
13+
14+
function valueReturn(value: string): string {
15+
return `${value}`;
16+
}
17+
18+
describe("Test GitHub Readme Profile API", () => {
1519
let mockRequest: any;
1620
let mockResponse: any;
1721

@@ -31,15 +35,102 @@ describe('Test GitHub Readme Profile API', () => {
3135
jest.clearAllMocks();
3236
});
3337

34-
it('should handle request and generate JSON response', async () => {
35-
mockRequest.query.username = 'FajarKim';
36-
mockRequest.query.format = 'json';
38+
it("should handle request and generate JSON response", async () => {
39+
mockRequest.query.username = "FajarKim";
40+
mockRequest.query.format = "json";
3741

3842
await readmeStats(mockRequest, mockResponse);
3943

40-
expect(getData).toHaveBeenCalledWith(mockRequest.query.username);
41-
expect(mockResponse.json).toHaveBeenCalledWith(getData(mockRequest.query.username));
44+
expect(await getData).toHaveBeenCalledWith(mockRequest.query.username);
45+
expect(mockResponse.json).toHaveBeenCalledWith(await getData(mockRequest.query.username));
4246
expect(mockResponse.send).not.toHaveBeenCalled();
43-
expect(mockResponse.setHeader).toHaveBeenCalledWith('Cache-Control', 's-maxage=3600, stale-while-revalidate');
47+
expect(mockResponse.setHeader).toHaveBeenCalledWith("Cache-Control", "s-maxage=3600, stale-while-revalidate");
48+
});
49+
50+
it("should handle request and generate SVG response", async () => {
51+
mockRequest.query.username = "FajarKim";
52+
mockRequest.query.format = "svg";
53+
54+
await readmeStats(mockRequest, mockResponse);
55+
56+
expect(await getData).toHaveBeenCalledWith(mockRequest.query.username);
57+
expect(cardStyle).toHaveBeenCalledWith(await getData(mockRequest.query.username), expect.any(Object));
58+
expect(mockResponse.send).toHaveBeenCalled();
59+
expect(mockResponse.json).not.toHaveBeenCalled();
60+
expect(mockResponse.setHeader).toHaveBeenCalledWith("Content-Type", "image/svg+xml");
61+
});
62+
63+
it("should handle request theme and generate SVG response", async () => {
64+
const availableThemes = Object.keys(themes);
65+
for (let i = 0; i < availableThemes.length; i += 1) {
66+
const themesSlice = availableThemes.slice(i, i + 1);
67+
const row = themesSlice.map(theme => valueReturn(theme)).join("");
68+
69+
mockRequest.query.username = "FajarKim";
70+
mockRequest.query.theme = row;
71+
72+
await readmeStats(mockRequest, mockResponse);
73+
74+
expect(await getData).toHaveBeenCalledWith(mockRequest.query.username);
75+
expect(cardStyle).toHaveBeenCalledWith(await getData(mockRequest.query.username), expect.any(Object));
76+
expect(mockResponse.send).toHaveBeenCalled();
77+
expect(mockResponse.json).not.toHaveBeenCalled();
78+
expect(mockResponse.setHeader).toHaveBeenCalledWith("Content-Type", "image/svg+xml");
79+
}
80+
});
81+
82+
it("should handle request locale and generate SVG response", async () => {
83+
const availableLocales = Object.keys(locales);
84+
for (let i = 0; i < availableLocales.length; i += 1) {
85+
const localesSlice = availableLocales.slice(i, i + 1);
86+
const row = localesSlice.map(locale => valueReturn(locale)).join("");
87+
88+
mockRequest.query.username = "FajarKim";
89+
mockRequest.query.locale = row;
90+
91+
await readmeStats(mockRequest, mockResponse);
92+
93+
expect(await getData).toHaveBeenCalledWith(mockRequest.query.username);
94+
expect(cardStyle).toHaveBeenCalledWith(await getData(mockRequest.query.username), expect.any(Object));
95+
expect(mockResponse.send).toHaveBeenCalled();
96+
expect(mockResponse.json).not.toHaveBeenCalled();
97+
expect(mockResponse.setHeader).toHaveBeenCalledWith("Content-Type", "image/svg+xml");
98+
}
99+
});
100+
101+
it("should handle request hide stats and generate SVG response", async () => {
102+
mockRequest.query.username = "FajarKim";
103+
mockRequest.query.hide = "repos,forks,prs_merged";
104+
105+
await readmeStats(mockRequest, mockResponse);
106+
107+
expect(await getData).toHaveBeenCalledWith(mockRequest.query.username);
108+
expect(cardStyle).toHaveBeenCalledWith(await getData(mockRequest.query.username), expect.any(Object));
109+
expect(mockResponse.send).toHaveBeenCalled();
110+
expect(mockResponse.json).not.toHaveBeenCalled();
111+
expect(mockResponse.setHeader).toHaveBeenCalledWith("Content-Type", "image/svg+xml");
112+
});
113+
114+
it("should handle request show stats and generate SVG response", async () => {
115+
mockRequest.query.username = "FajarKim";
116+
mockRequest.query.show = "reviews,issues_closed";
117+
118+
await readmeStats(mockRequest, mockResponse);
119+
120+
expect(await getData).toHaveBeenCalledWith(mockRequest.query.username);
121+
expect(cardStyle).toHaveBeenCalledWith(await getData(mockRequest.query.username), expect.any(Object));
122+
expect(mockResponse.send).toHaveBeenCalled();
123+
expect(mockResponse.json).not.toHaveBeenCalled();
124+
expect(mockResponse.setHeader).toHaveBeenCalledWith("Content-Type", "image/svg+xml");
125+
});
126+
127+
it("should handle invalid username and send error response", async () => {
128+
await readmeStats(mockRequest, mockResponse);
129+
130+
expect(await getData).not.toHaveBeenCalledWith();
131+
expect(cardStyle).not.toHaveBeenCalledWith();
132+
expect(mockResponse.send).toHaveBeenCalled();
133+
expect(mockResponse.json).not.toHaveBeenCalled();
134+
expect(mockResponse.setHeader).toHaveBeenCalledWith("Cache-Control", "s-maxage=3600, stale-while-revalidate");
44135
});
45136
});

0 commit comments

Comments
 (0)