// eslint-disable-next-line @typescript-eslint/no-unused-vars
import prismaMock from "../../../../tests/libs/__mocks__/prismaMock";

import { describe, it, expect } from "vitest";

import { WorkflowRepository } from "./workflow";

describe("WorkflowRepository", () => {
  describe("getVerifiedEmails", () => {
    it("should return the email of the user", async () => {
      prismaMock.secondaryEmail.findMany.mockResolvedValue([]);
      prismaMock.verifiedEmail.findMany.mockResolvedValue([]);

      const emails = await WorkflowRepository.getVerifiedEmails({
        userEmail: "user@example.com",
        userId: 1,
      });
      expect(emails).toEqual(["user@example.com"]);
    });

    it("should return the email of the user and verified secondary emails", async () => {
      prismaMock.verifiedEmail.findMany.mockResolvedValue([]);
      prismaMock.secondaryEmail.findMany.mockResolvedValue([
        {
          id: 101,
          email: "secondary@example.com",
          emailVerified: new Date(),
        },
      ]);

      const emails = await WorkflowRepository.getVerifiedEmails({
        userEmail: "user@example.com",
        userId: 1,
      });
      expect(emails).toEqual(["user@example.com", "secondary@example.com"]);
    });

    it("should return the email of the user and verified secondary emails from the team", async () => {
      prismaMock.verifiedEmail.findMany.mockResolvedValue([]);
      prismaMock.secondaryEmail.findMany.mockResolvedValue([
        {
          id: 101,
          email: "secondary@example.com",
          emailVerified: new Date(),
        },
      ]);

      prismaMock.user.findMany.mockResolvedValue([
        {
          id: 1,
          email: "organizer@example.com",
        },
        {
          id: 2,
          email: "teammember1@example.com",
          secondaryEmails: [],
        },
        {
          id: 3,
          email: "teammember2@example.com",
          secondaryEmails: [
            {
              email: "secondary2@example.com",
              emailVerified: new Date(),
            },
          ],
        },
      ]);

      const emails = await WorkflowRepository.getVerifiedEmails({
        userEmail: "user@example.com",
        userId: 1,
        teamId: 1,
      });
      expect(emails).toEqual([
        "user@example.com",
        "secondary@example.com",
        "teammember1@example.com",
        "teammember2@example.com",
        "secondary2@example.com",
      ]);
    });
  });
});
