import { describe, it, expect, beforeEach } from "vitest";
import { InMemoryContactsRepository } from "../repositories/in-memory-contacts-repository";
import { UnsubscribeContactUseCase } from "./unsubscribe-contact-use-case";

let contactsRepository: InMemoryContactsRepository;
let sut: UnsubscribeContactUseCase;

describe("Unsubscribe Contact Use Case", () => {
  beforeEach(() => {
    contactsRepository = new InMemoryContactsRepository();
    sut = new UnsubscribeContactUseCase(contactsRepository);
  });

  it("should mark the contact as unsubscribed", async () => {
    await contactsRepository.createMany(["someone@example.com"]);
    const [contact] = await contactsRepository.findAll();

    const result = await sut.execute({ contactId: contact.id });

    expect(result.success).toBe(true);
    const updated = await contactsRepository.findAll();
    expect(updated[0].status).toEqual("UNSUBSCRIBED");
  });

  it("should be idempotent for an unknown contactId", async () => {
    const result = await sut.execute({ contactId: "does-not-exist" });
    expect(result.success).toBe(true);
  });
});
