From 0120e197cae7399c1695d1e3eee1e78ccf9164d2 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Sun, 9 Oct 2022 10:45:18 -0500 Subject: [PATCH] add additional factories --- frontend/lib/api/__test__/factories/index.ts | 46 +++++++++++++++++++- frontend/lib/api/__test__/public.test.ts | 10 ++--- frontend/lib/api/__test__/test-utils.ts | 25 +++-------- 3 files changed, 55 insertions(+), 26 deletions(-) diff --git a/frontend/lib/api/__test__/factories/index.ts b/frontend/lib/api/__test__/factories/index.ts index 6d2ab6f..ce905fe 100644 --- a/frontend/lib/api/__test__/factories/index.ts +++ b/frontend/lib/api/__test__/factories/index.ts @@ -1,5 +1,10 @@ import { faker } from "@faker-js/faker"; +import { overrideParts } from "../../base/urls"; +import { PublicApi } from "../../public"; import { LabelCreate, LocationCreate, UserRegistration } from "../../types/data-contracts"; +import * as config from "../../../../test/config"; +import { UserClient } from "../../user"; +import { Requests } from "../../../requests"; /** * Returns a random user registration object that can be @@ -29,4 +34,43 @@ function label(): LabelCreate { }; } -export const factories = { user, location, label }; +function publicClient(): PublicApi { + overrideParts(config.BASE_URL, "/api/v1"); + const requests = new Requests(""); + return new PublicApi(requests); +} + +function userClient(token: string): UserClient { + overrideParts(config.BASE_URL, "/api/v1"); + const requests = new Requests("", token); + return new UserClient(requests); +} + +type TestUser = { + client: UserClient; + user: UserRegistration; +}; + +async function userSingleUse(): Promise { + const usr = user(); + + const pub = publicClient(); + pub.register(usr); + const result = await pub.login(usr.name, usr.password); + + return { + client: new UserClient(new Requests("", result.data.token)), + user: usr, + }; +} + +export const factories = { + user, + location, + label, + client: { + public: publicClient, + user: userClient, + singleUse: userSingleUse, + }, +}; diff --git a/frontend/lib/api/__test__/public.test.ts b/frontend/lib/api/__test__/public.test.ts index 5137f11..044558e 100644 --- a/frontend/lib/api/__test__/public.test.ts +++ b/frontend/lib/api/__test__/public.test.ts @@ -1,10 +1,10 @@ import { describe, test, expect } from "vitest"; import { factories } from "./factories"; -import { client, sharedUserClient, userClient } from "./test-utils"; +import { sharedUserClient } from "./test-utils"; describe("[GET] /api/v1/status", () => { test("server should respond", async () => { - const api = client(); + const api = factories.client.public(); const { response, data } = await api.status(); expect(response.status).toBe(200); expect(data.health).toBe(true); @@ -12,7 +12,7 @@ describe("[GET] /api/v1/status", () => { }); describe("first time user workflow (register, login, join group)", () => { - const api = client(); + const api = factories.client.public(); const userData = factories.user(); test("user should be able to register", async () => { @@ -26,7 +26,7 @@ describe("first time user workflow (register, login, join group)", () => { expect(data.token).toBeTruthy(); // Cleanup - const userApi = userClient(data.token); + const userApi = factories.client.user(data.token); { const { response } = await userApi.user.delete(); expect(response.status).toBe(204); @@ -60,7 +60,7 @@ describe("first time user workflow (register, login, join group)", () => { // Get Self and Assert - const client2 = userClient(loginData.token); + const client2 = factories.client.user(loginData.token); const { data: user2 } = await client2.user.self(); diff --git a/frontend/lib/api/__test__/test-utils.ts b/frontend/lib/api/__test__/test-utils.ts index 2cef4a3..41ef871 100644 --- a/frontend/lib/api/__test__/test-utils.ts +++ b/frontend/lib/api/__test__/test-utils.ts @@ -1,21 +1,6 @@ import { beforeAll, expect } from "vitest"; -import { Requests } from "../../requests"; -import { overrideParts } from "../base/urls"; -import { PublicApi } from "../public"; -import * as config from "../../../test/config"; import { UserClient } from "../user"; - -export function client() { - overrideParts(config.BASE_URL, "/api/v1"); - const requests = new Requests(""); - return new PublicApi(requests); -} - -export function userClient(token: string) { - overrideParts(config.BASE_URL, "/api/v1"); - const requests = new Requests("", token); - return new UserClient(requests); -} +import { factories } from "./factories"; const cache = { token: "", @@ -27,7 +12,7 @@ const cache = { */ export async function sharedUserClient(): Promise { if (cache.token) { - return userClient(cache.token); + return factories.client.user(cache.token); } const testUser = { email: "__test__@__test__.com", @@ -36,12 +21,12 @@ export async function sharedUserClient(): Promise { token: "", }; - const api = client(); + const api = factories.client.public(); const { response: tryLoginResp, data } = await api.login(testUser.email, testUser.password); if (tryLoginResp.status === 200) { cache.token = data.token; - return userClient(cache.token); + return factories.client.user(cache.token); } const { response: registerResp } = await api.register(testUser); @@ -51,7 +36,7 @@ export async function sharedUserClient(): Promise { expect(loginResp.status).toBe(200); cache.token = loginData.token; - return userClient(data.token); + return factories.client.user(data.token); } beforeAll(async () => {