aboutsummaryrefslogtreecommitdiff
path: root/test/int
diff options
context:
space:
mode:
Diffstat (limited to 'test/int')
-rw-r--r--test/int/api.int.test.ts177
1 files changed, 162 insertions, 15 deletions
diff --git a/test/int/api.int.test.ts b/test/int/api.int.test.ts
index fcb69b3..2f7ead2 100644
--- a/test/int/api.int.test.ts
+++ b/test/int/api.int.test.ts
@@ -4,6 +4,7 @@ import { EnvironmentVariables } from "../util";
import { readFile } from "fs-extra";
import { exec, ExecException } from "child_process";
import { Response } from "light-my-request";
+import { Info, Repository, RepositorySummary } from "../../packages/shared_types/src";
const env = process.env as EnvironmentVariables;
@@ -11,25 +12,171 @@ const host = "localhost";
const port = 8080;
describe("API", () => {
- describe("Git HTTP", () => {
- let app: FastifyInstance;
-
- beforeAll(() => {
- app = buildApp({
- host: host,
- port: port,
- dev_port: 0,
- title: "",
- about: "",
- base_dir: env.BASE_DIR,
- production: false
- }, "");
+ let app: FastifyInstance;
+
+ beforeAll(() => {
+ app = buildApp({
+ host: host,
+ port: port,
+ dev_port: 0,
+ title: "Bob's cool projects",
+ about: "All of my personal projects. Completely FOSS.",
+ base_dir: env.BASE_DIR,
+ production: false
+ }, "");
+ });
+
+ afterAll(async() => {
+ await app.close();
+ });
+
+ describe("GET /api/v1/info", () => {
+ let res: Response;
+
+ beforeAll(async() => {
+ res = await app.inject({
+ method: "GET",
+ url: "api/v1/info"
+ });
+ });
+
+ it("Should respond", () => {
+ expect.assertions(4);
+
+ expect(res).toBeDefined();
+ expect(res).toHaveProperty("statusCode");
+ expect(res).toHaveProperty("payload");
+ expect(res.payload).toBeDefined();
+ });
+
+ it("Should respond without an error", () => {
+ expect.assertions(5);
+
+ expect(res.statusCode).toEqual(200);
+
+ const json: Record<string, string> = res.json();
+
+ expect(json).toBeDefined();
+ expect(json.error).toBeUndefined();
+ expect(json).toHaveProperty("data");
+ expect(json.data).toBeDefined();
+ });
+
+ it("Should have a valid response", () => {
+ expect.assertions(4);
+
+ const info = res.json().data as Info;
+
+ expect(info).toHaveProperty("title");
+ expect(info.title).toEqual("Bob's cool projects");
+
+ expect(info).toHaveProperty("about");
+ expect(info.about).toEqual("All of my personal projects. Completely FOSS.");
+ });
+ });
+
+ describe("GET /api/v1/repos", () => {
+ let res: Response;
+
+ beforeAll(async() => {
+ res = await app.inject({
+ method: "GET",
+ url: "api/v1/repos"
+ });
+ });
+
+ it("Should respond", () => {
+ expect.assertions(4);
+
+ expect(res).toBeDefined();
+ expect(res).toHaveProperty("statusCode");
+ expect(res).toHaveProperty("payload");
+ expect(res.payload).toBeDefined();
+ });
+
+ it("Should respond without an error", () => {
+ expect.assertions(5);
+
+ expect(res.statusCode).toEqual(200);
+
+ const json: Record<string, string> = res.json();
+
+ expect(json).toBeDefined();
+ expect(json.error).toBeUndefined();
+ expect(json).toHaveProperty("data");
+ expect(json.data).toBeDefined();
+ });
+
+ it("Should have a valid response", () => {
+ expect.hasAssertions();
+
+ const repositories = res.json().data as RepositorySummary[];
+
+ expect(repositories).toBeDefined();
+
+ for(const repository of repositories) {
+ expect(repository).toHaveProperty("name");
+ expect(repository.name).toEqual(env.AVAIL_REPO.slice(0, -4));
+
+ expect(repository).toHaveProperty("description");
+ expect(repository.description).toEqual("Unnamed repository; edit this file 'description' to name the repository.");
+
+ expect(repository).toHaveProperty("last_updated");
+ expect(repository.last_updated).toBeDefined();
+ }
+
+ });
+ });
+
+ describe("GET /api/v1/repos/:repository", () => {
+ let res: Response;
+
+ beforeAll(async() => {
+ res = await app.inject({
+ method: "GET",
+ url: `api/v1/repos/${env.AVAIL_REPO.slice(0, -4)}`
+ });
+ });
+
+ it("Should respond", () => {
+ expect.assertions(4);
+
+ expect(res).toBeDefined();
+ expect(res).toHaveProperty("statusCode");
+ expect(res).toHaveProperty("payload");
+ expect(res.payload).toBeDefined();
});
- afterAll(async() => {
- await app.close();
+ it("Should respond without an error", () => {
+ expect.assertions(5);
+
+ expect(res.statusCode).toEqual(200);
+
+ const json: Record<string, string> = res.json();
+
+ expect(json).toBeDefined();
+ expect(json.error).toBeUndefined();
+ expect(json).toHaveProperty("data");
+ expect(json.data).toBeDefined();
});
+ it("Should have a valid response", () => {
+ expect.hasAssertions();
+
+ const repository = res.json().data as Repository;
+
+ expect(repository).toHaveProperty("name");
+ expect(repository.name).toEqual(env.AVAIL_REPO.slice(0, -4));
+
+ expect(repository).toHaveProperty("description");
+ expect(repository.description).toEqual("Unnamed repository; edit this file 'description' to name the repository.");
+
+ expect(repository).toHaveProperty("has_readme");
+ expect(repository.has_readme).toBeDefined();
+ });
+ });
+
+ describe("Git HTTP", () => {
describe("GET /:repository/info/refs", () => {
let res: Response;