134 lines
3.5 KiB
TypeScript
134 lines
3.5 KiB
TypeScript
import { describe, it, expect, afterEach, vi } from "vitest";
|
|
import { setup } from "../../__testData__/controller-test";
|
|
import * as ConfigDal from "../../../src/dal/config";
|
|
import { ObjectId } from "mongodb";
|
|
|
|
const { mockApp, uid } = setup();
|
|
|
|
describe("ConfigController", () => {
|
|
describe("get config", () => {
|
|
const getConfigMock = vi.spyOn(ConfigDal, "getConfig");
|
|
|
|
afterEach(() => {
|
|
getConfigMock.mockClear();
|
|
});
|
|
|
|
it("should get the users config", async () => {
|
|
//GIVEN
|
|
getConfigMock.mockResolvedValue({
|
|
_id: new ObjectId(),
|
|
uid: uid,
|
|
config: { language: "english" },
|
|
});
|
|
|
|
//WHEN
|
|
const { body } = await mockApp
|
|
.get("/configs")
|
|
.set("Authorization", `Bearer ${uid}`)
|
|
.expect(200);
|
|
|
|
//THEN
|
|
expect(body).toStrictEqual({
|
|
message: "Configuration retrieved",
|
|
data: { language: "english" },
|
|
});
|
|
|
|
expect(getConfigMock).toHaveBeenCalledWith(uid);
|
|
});
|
|
});
|
|
describe("update config", () => {
|
|
const saveConfigMock = vi.spyOn(ConfigDal, "saveConfig");
|
|
|
|
afterEach(() => {
|
|
saveConfigMock.mockClear();
|
|
});
|
|
|
|
it("should update the users config", async () => {
|
|
//GIVEN
|
|
saveConfigMock.mockResolvedValue({} as any);
|
|
|
|
//WHEN
|
|
const { body } = await mockApp
|
|
.patch("/configs")
|
|
.set("Authorization", `Bearer ${uid}`)
|
|
.accept("application/json")
|
|
.send({ language: "english" })
|
|
.expect(200);
|
|
|
|
//THEN
|
|
expect(body).toStrictEqual({
|
|
message: "Config updated",
|
|
data: null,
|
|
});
|
|
|
|
expect(saveConfigMock).toHaveBeenCalledWith(uid, {
|
|
language: "english",
|
|
});
|
|
});
|
|
it("should fail with unknown config", async () => {
|
|
//WHEN
|
|
const { body } = await mockApp
|
|
.patch("/configs")
|
|
.set("Authorization", `Bearer ${uid}`)
|
|
.accept("application/json")
|
|
.send({ unknownValue: "unknown" })
|
|
.expect(422);
|
|
|
|
//THEN
|
|
expect(body).toStrictEqual({
|
|
message: "Invalid request data schema",
|
|
validationErrors: [`Unrecognized key(s) in object: 'unknownValue'`],
|
|
});
|
|
|
|
expect(saveConfigMock).not.toHaveBeenCalled();
|
|
});
|
|
it("should fail with invalid configs", async () => {
|
|
//WHEN
|
|
const { body } = await mockApp
|
|
.patch("/configs")
|
|
.set("Authorization", `Bearer ${uid}`)
|
|
.accept("application/json")
|
|
.send({ autoSwitchTheme: "yes", confidenceMode: "pretty" })
|
|
.expect(422);
|
|
|
|
//THEN
|
|
expect(body).toStrictEqual({
|
|
message: "Invalid request data schema",
|
|
validationErrors: [
|
|
`"confidenceMode" Invalid enum value. Expected 'off' | 'on' | 'max', received 'pretty'`,
|
|
`"autoSwitchTheme" Expected boolean, received string`,
|
|
],
|
|
});
|
|
|
|
expect(saveConfigMock).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
describe("delete config", () => {
|
|
const deleteConfigMock = vi.spyOn(ConfigDal, "deleteConfig");
|
|
|
|
afterEach(() => {
|
|
deleteConfigMock.mockClear();
|
|
});
|
|
|
|
it("should delete the users config", async () => {
|
|
//GIVEN
|
|
deleteConfigMock.mockResolvedValue();
|
|
|
|
//WHEN
|
|
|
|
const { body } = await mockApp
|
|
.delete("/configs")
|
|
.set("Authorization", `Bearer ${uid}`)
|
|
.expect(200);
|
|
|
|
//THEN
|
|
expect(body).toStrictEqual({
|
|
message: "Config deleted",
|
|
data: null,
|
|
});
|
|
|
|
expect(deleteConfigMock).toHaveBeenCalledWith(uid);
|
|
});
|
|
});
|
|
});
|