refactor: implement factories for testing

This commit is contained in:
Hayden 2022-10-09 08:16:42 -05:00
parent a6e3989aee
commit acd91f9fb0
4 changed files with 41 additions and 37 deletions

View file

@ -0,0 +1,32 @@
import { faker } from "@faker-js/faker";
import { LabelCreate, LocationCreate, UserRegistration } from "../../types/data-contracts";
/**
* Returns a random user registration object that can be
* used to signup a new user.
*/
function user(): UserRegistration {
return {
email: faker.internet.email(),
password: faker.internet.password(),
name: faker.name.firstName(),
token: "",
};
}
function location(): LocationCreate {
return {
name: faker.address.city(),
description: faker.lorem.sentence(),
};
}
function label(): LabelCreate {
return {
name: faker.lorem.word(),
description: faker.lorem.sentence(),
color: faker.internet.color(),
};
}
export const factories = { user, location, label };

View file

@ -1,17 +1,7 @@
import { describe, test, expect } from "vitest";
import { faker } from "@faker-js/faker";
import { UserRegistration } from "../types/data-contracts";
import { factories } from "./factories";
import { client, sharedUserClient, userClient } from "./test-utils";
function userFactory(): UserRegistration {
return {
email: faker.internet.email(),
password: faker.internet.password(),
name: faker.name.firstName(),
token: "",
};
}
describe("[GET] /api/v1/status", () => {
test("server should respond", async () => {
const api = client();
@ -23,7 +13,7 @@ describe("[GET] /api/v1/status", () => {
describe("first time user workflow (register, login, join group)", () => {
const api = client();
const userData = userFactory();
const userData = factories.user();
test("user should be able to register", async () => {
const { response } = await api.register(userData);
@ -59,7 +49,7 @@ describe("first time user workflow (register, login, join group)", () => {
// Create User 2 with token
const duplicateUser = userFactory();
const duplicateUser = factories.user();
duplicateUser.token = data.token;
const { response: registerResp } = await api.register(duplicateUser);

View file

@ -1,23 +1,17 @@
import { describe, expect, test } from "vitest";
import { LabelOut } from "../../types/data-contracts";
import { UserClient } from "../../user";
import { factories } from "../factories";
import { sharedUserClient } from "../test-utils";
describe("locations lifecycle (create, update, delete)", () => {
let increment = 0;
/**
* useLabel sets up a label resource for testing, and returns a function
* that can be used to delete the label from the backend server.
*/
async function useLabel(api: UserClient): Promise<[LabelOut, () => Promise<void>]> {
const { response, data } = await api.labels.create({
name: `__test__.label.name_${increment}`,
description: `__test__.label.description_${increment}`,
color: "",
});
const { response, data } = await api.labels.create(factories.label());
expect(response.status).toBe(201);
increment++;
const cleanup = async () => {
const { response } = await api.labels.delete(data.id);
@ -29,11 +23,7 @@ describe("locations lifecycle (create, update, delete)", () => {
test("user should be able to create a label", async () => {
const api = await sharedUserClient();
const labelData = {
name: "test-label",
description: "test-description",
color: "",
};
const labelData = factories.label();
const { response, data } = await api.labels.create(labelData);

View file

@ -1,22 +1,17 @@
import { describe, expect, test } from "vitest";
import { LocationOut } from "../../types/data-contracts";
import { UserClient } from "../../user";
import { factories } from "../factories";
import { sharedUserClient } from "../test-utils";
describe("locations lifecycle (create, update, delete)", () => {
let increment = 0;
/**
* useLocatio sets up a location resource for testing, and returns a function
* that can be used to delete the location from the backend server.
*/
async function useLocation(api: UserClient): Promise<[LocationOut, () => Promise<void>]> {
const { response, data } = await api.locations.create({
name: `__test__.location.name_${increment}`,
description: `__test__.location.description_${increment}`,
});
const { response, data } = await api.locations.create(factories.location());
expect(response.status).toBe(201);
increment++;
const cleanup = async () => {
const { response } = await api.locations.delete(data.id);
@ -29,10 +24,7 @@ describe("locations lifecycle (create, update, delete)", () => {
test("user should be able to create a location", async () => {
const api = await sharedUserClient();
const locationData = {
name: "test-location",
description: "test-description",
};
const locationData = factories.location();
const { response, data } = await api.locations.create(locationData);