mirror of
https://github.com/anuraghazra/github-readme-stats.git
synced 2025-03-07 15:08:07 +08:00
tests: added integration tests for the api endpoints
This commit is contained in:
parent
3e9ce48777
commit
40e0937100
122
tests/api.test.js
Normal file
122
tests/api.test.js
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
require("@testing-library/jest-dom");
|
||||||
|
const axios = require("axios");
|
||||||
|
const MockAdapter = require("axios-mock-adapter");
|
||||||
|
const api = require("../api/index");
|
||||||
|
const renderStatsCard = require("../src/renderStatsCard");
|
||||||
|
const { renderError } = require("../src/utils");
|
||||||
|
|
||||||
|
const stats = {
|
||||||
|
name: "Anurag Hazra",
|
||||||
|
totalStars: 100,
|
||||||
|
totalCommits: 200,
|
||||||
|
totalIssues: 300,
|
||||||
|
totalPRs: 400,
|
||||||
|
contributedTo: 500,
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
data: {
|
||||||
|
user: {
|
||||||
|
name: stats.name,
|
||||||
|
repositoriesContributedTo: { totalCount: stats.contributedTo },
|
||||||
|
contributionsCollection: { totalCommitContributions: stats.totalCommits },
|
||||||
|
pullRequests: { totalCount: stats.totalPRs },
|
||||||
|
issues: { totalCount: stats.totalIssues },
|
||||||
|
repositories: {
|
||||||
|
nodes: [{ stargazers: { totalCount: 100 } }],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const error = {
|
||||||
|
errors: [
|
||||||
|
{
|
||||||
|
type: "NOT_FOUND",
|
||||||
|
path: ["user"],
|
||||||
|
locations: [],
|
||||||
|
message: "Could not fetch user",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
const mock = new MockAdapter(axios);
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
mock.reset();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Test /api/", () => {
|
||||||
|
it("should test the request", async () => {
|
||||||
|
const req = {
|
||||||
|
query: {
|
||||||
|
username: "anuraghazra",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const res = {
|
||||||
|
setHeader: jest.fn(),
|
||||||
|
send: jest.fn(),
|
||||||
|
};
|
||||||
|
mock.onPost("https://api.github.com/graphql").reply(200, data);
|
||||||
|
|
||||||
|
await api(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(renderStatsCard(stats, { ...req.query }));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should render error card on error", async () => {
|
||||||
|
const req = {
|
||||||
|
query: {
|
||||||
|
username: "anuraghazra",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const res = {
|
||||||
|
setHeader: jest.fn(),
|
||||||
|
send: jest.fn(),
|
||||||
|
};
|
||||||
|
mock.onPost("https://api.github.com/graphql").reply(200, error);
|
||||||
|
|
||||||
|
await api(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(renderError(error.errors[0].message));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should get the query options", async () => {
|
||||||
|
const req = {
|
||||||
|
query: {
|
||||||
|
username: "anuraghazra",
|
||||||
|
hide: `["issues","prs","contribs"]`,
|
||||||
|
show_icons: true,
|
||||||
|
hide_border: true,
|
||||||
|
line_height: 100,
|
||||||
|
title_color: "fff",
|
||||||
|
icon_color: "fff",
|
||||||
|
text_color: "fff",
|
||||||
|
bg_color: "fff",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const res = {
|
||||||
|
setHeader: jest.fn(),
|
||||||
|
send: jest.fn(),
|
||||||
|
};
|
||||||
|
mock.onPost("https://api.github.com/graphql").reply(200, data);
|
||||||
|
|
||||||
|
await api(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(
|
||||||
|
renderStatsCard(stats, {
|
||||||
|
hide: ["issues", "prs", "contribs"],
|
||||||
|
show_icons: true,
|
||||||
|
hide_border: true,
|
||||||
|
line_height: 100,
|
||||||
|
title_color: "fff",
|
||||||
|
icon_color: "fff",
|
||||||
|
text_color: "fff",
|
||||||
|
bg_color: "fff",
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
123
tests/pin.test.js
Normal file
123
tests/pin.test.js
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
require("@testing-library/jest-dom");
|
||||||
|
const axios = require("axios");
|
||||||
|
const MockAdapter = require("axios-mock-adapter");
|
||||||
|
const pin = require("../api/pin");
|
||||||
|
const renderRepoCard = require("../src/renderRepoCard");
|
||||||
|
const { renderError } = require("../src/utils");
|
||||||
|
|
||||||
|
const data_repo = {
|
||||||
|
repository: {
|
||||||
|
name: "convoychat",
|
||||||
|
stargazers: { totalCount: 38000 },
|
||||||
|
description: "Help us take over the world! React + TS + GraphQL Chat App",
|
||||||
|
primaryLanguage: {
|
||||||
|
color: "#2b7489",
|
||||||
|
id: "MDg6TGFuZ3VhZ2UyODc=",
|
||||||
|
name: "TypeScript",
|
||||||
|
},
|
||||||
|
forkCount: 100,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const data_user = {
|
||||||
|
data: {
|
||||||
|
user: { repository: data_repo.repository },
|
||||||
|
organization: null,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const mock = new MockAdapter(axios);
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
mock.reset();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("Test /api/pin", () => {
|
||||||
|
it("should test the request", async () => {
|
||||||
|
const req = {
|
||||||
|
query: {
|
||||||
|
username: "anuraghazra",
|
||||||
|
repo: "convoychat",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const res = {
|
||||||
|
setHeader: jest.fn(),
|
||||||
|
send: jest.fn(),
|
||||||
|
};
|
||||||
|
mock.onPost("https://api.github.com/graphql").reply(200, data_user);
|
||||||
|
|
||||||
|
await pin(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(renderRepoCard(data_repo.repository));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should get the query options", async () => {
|
||||||
|
const req = {
|
||||||
|
query: {
|
||||||
|
username: "anuraghazra",
|
||||||
|
repo: "convoychat",
|
||||||
|
title_color: "fff",
|
||||||
|
icon_color: "fff",
|
||||||
|
text_color: "fff",
|
||||||
|
bg_color: "fff",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const res = {
|
||||||
|
setHeader: jest.fn(),
|
||||||
|
send: jest.fn(),
|
||||||
|
};
|
||||||
|
mock.onPost("https://api.github.com/graphql").reply(200, data_user);
|
||||||
|
|
||||||
|
await pin(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(
|
||||||
|
renderRepoCard(data_repo.repository, { ...req.query })
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should render error card if user repo not found", async () => {
|
||||||
|
const req = {
|
||||||
|
query: {
|
||||||
|
username: "anuraghazra",
|
||||||
|
repo: "convoychat",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const res = {
|
||||||
|
setHeader: jest.fn(),
|
||||||
|
send: jest.fn(),
|
||||||
|
};
|
||||||
|
mock
|
||||||
|
.onPost("https://api.github.com/graphql")
|
||||||
|
.reply(200, { data: { user: { repository: null }, organization: null } });
|
||||||
|
|
||||||
|
await pin(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(renderError("User Repository Not found"));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should render error card if org repo not found", async () => {
|
||||||
|
const req = {
|
||||||
|
query: {
|
||||||
|
username: "anuraghazra",
|
||||||
|
repo: "convoychat",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const res = {
|
||||||
|
setHeader: jest.fn(),
|
||||||
|
send: jest.fn(),
|
||||||
|
};
|
||||||
|
mock
|
||||||
|
.onPost("https://api.github.com/graphql")
|
||||||
|
.reply(200, { data: { user: null, organization: { repository: null } } });
|
||||||
|
|
||||||
|
await pin(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(
|
||||||
|
renderError("Organization Repository Not found")
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user