raviqqe/tasks

View on GitHub
src/application/project-updater.test.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { beforeEach, expect, it } from "vitest";
import { type Project } from "../domain/project.js";
import { ProjectUpdater } from "./project-updater.js";
import { MockManager } from "./test/mock-manager.js";

const dummyProject: Project = { archived: false, id: "", name: "foo" };

let mockManager: MockManager;
let projectUpdater: ProjectUpdater;

beforeEach(() => {
  mockManager = new MockManager();
  projectUpdater = new ProjectUpdater(
    mockManager.projectRepository,
    mockManager.projectPresenter,
    mockManager.messagePresenter,
  );
});

it("updates and persists a project", async () => {
  await projectUpdater.update(dummyProject);

  expect(mockManager.projectRepository.update.mock.calls).toEqual([
    [dummyProject],
  ]);
  expect(mockManager.projectPresenter.presentUpdatedProject.mock.calls).toEqual(
    [[dummyProject]],
  );
});

it("formats a project before update", async () => {
  await projectUpdater.update({ ...dummyProject, name: " foo" });

  expect(mockManager.projectRepository.update.mock.calls).toEqual([
    [dummyProject],
  ]);
});

it("does not update any projects with empty names", async () => {
  await projectUpdater.update({ ...dummyProject, name: "" });

  expect(mockManager.messagePresenter.present).toHaveBeenCalledTimes(1);
  expect(mockManager.projectRepository.update).not.toHaveBeenCalled();
  expect(
    mockManager.projectPresenter.presentUpdatedProject,
  ).not.toHaveBeenCalled();
});