This PR mainly refactors the code by extracting a "core" package which is then used by the "backend" and "frontend" apps. Apart from this the PR also contains several smaller changes like fixing dependabot, upgrading dependencies, aligned "package.json" files, added tests, ... addresses step 1 of #32 closes #136 --------- Co-authored-by: Marco Pasqualetti <marco.pasqualetti@live.com>
106 lines
2.8 KiB
JavaScript
106 lines
2.8 KiB
JavaScript
import axios from "axios";
|
|
import MockAdapter from "axios-mock-adapter";
|
|
import { afterEach, describe, expect, it } from "vitest";
|
|
|
|
import { fetchRepo } from "../src/fetchers/repo.js";
|
|
|
|
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 data_org = {
|
|
data: {
|
|
user: null,
|
|
organization: { repository: data_repo.repository },
|
|
},
|
|
};
|
|
|
|
const mock = new MockAdapter(axios);
|
|
|
|
afterEach(() => {
|
|
mock.reset();
|
|
});
|
|
|
|
describe("Test fetchRepo", () => {
|
|
it("should fetch correct user repo", async () => {
|
|
mock.onPost("https://api.github.com/graphql").reply(200, data_user);
|
|
|
|
let repo = await fetchRepo("anuraghazra", "convoychat");
|
|
|
|
expect(repo).toStrictEqual({
|
|
...data_repo.repository,
|
|
starCount: data_repo.repository.stargazers.totalCount,
|
|
});
|
|
});
|
|
|
|
it("should fetch correct org repo", async () => {
|
|
mock.onPost("https://api.github.com/graphql").reply(200, data_org);
|
|
|
|
let repo = await fetchRepo("anuraghazra", "convoychat");
|
|
expect(repo).toStrictEqual({
|
|
...data_repo.repository,
|
|
starCount: data_repo.repository.stargazers.totalCount,
|
|
});
|
|
});
|
|
|
|
it("should throw error if user is found but repo is null", async () => {
|
|
mock
|
|
.onPost("https://api.github.com/graphql")
|
|
.reply(200, { data: { user: { repository: null }, organization: null } });
|
|
|
|
await expect(fetchRepo("anuraghazra", "convoychat")).rejects.toThrow(
|
|
"User Repository Not found",
|
|
);
|
|
});
|
|
|
|
it("should throw error if org is found but repo is null", async () => {
|
|
mock
|
|
.onPost("https://api.github.com/graphql")
|
|
.reply(200, { data: { user: null, organization: { repository: null } } });
|
|
|
|
await expect(fetchRepo("anuraghazra", "convoychat")).rejects.toThrow(
|
|
"Organization Repository Not found",
|
|
);
|
|
});
|
|
|
|
it("should throw error if both user & org data not found", async () => {
|
|
mock
|
|
.onPost("https://api.github.com/graphql")
|
|
.reply(200, { data: { user: null, organization: null } });
|
|
|
|
await expect(fetchRepo("anuraghazra", "convoychat")).rejects.toThrow(
|
|
"Not found",
|
|
);
|
|
});
|
|
|
|
it("should throw error if repository is private", async () => {
|
|
mock.onPost("https://api.github.com/graphql").reply(200, {
|
|
data: {
|
|
user: { repository: { ...data_repo, isPrivate: true } },
|
|
organization: null,
|
|
},
|
|
});
|
|
|
|
await expect(fetchRepo("anuraghazra", "convoychat")).rejects.toThrow(
|
|
"User Repository Not found",
|
|
);
|
|
});
|
|
});
|