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

import { checkForEmptyAssignment } from "@calcom/lib/event-types/utils/checkForEmptyAssignment";

describe("Tests to Check if Event Types have empty Assignment", () => {
  it("should return true if managed event type has no assigned users", () => {
    expect(
      checkForEmptyAssignment({
        assignedUsers: [],
        assignAllTeamMembers: false,
        hosts: [{ userId: 101, isFixed: false, priority: 2, weight: 100, scheduleId: null }],
        isManagedEventType: true,
      })
    ).toBe(true);
  });
  it("should return true if non-managed event type has no hosts assigned", () => {
    expect(
      checkForEmptyAssignment({
        assignedUsers: [
          {
            created: true,
            owner: {
              id: 101,
              avatar: "avatar.svg",
              email: "firstuser@cal.com",
              membership: "OWNER",
              name: "First user",
              username: "firstuser",
              profile: {
                username: "firstuser",
                upId: "usr-101",
                id: null,
                organization: null,
                organizationId: null,
              },
              avatarUrl: null,
              nonProfileUsername: null,
            },
            slug: "managedevent",
            hidden: false,
          },
        ],
        assignAllTeamMembers: false,
        hosts: [],
        isManagedEventType: false,
      })
    ).toBe(true);
  });
  it("should return false if assignAllTeamMembers is selected", () => {
    expect(
      checkForEmptyAssignment({
        assignedUsers: [],
        assignAllTeamMembers: true,
        hosts: [],
        isManagedEventType: false,
      })
    ).toBe(false);
  });
  it("should return false if non-managed event type has hosts assigned", () => {
    expect(
      checkForEmptyAssignment({
        assignedUsers: [],
        assignAllTeamMembers: false,
        hosts: [{ userId: 101, isFixed: false, priority: 2, weight: 100, scheduleId: null }],
        isManagedEventType: false,
      })
    ).toBe(false);
  });
  it("should return false if managed event type has assigned users", () => {
    expect(
      checkForEmptyAssignment({
        assignedUsers: [
          {
            created: true,
            owner: {
              id: 101,
              avatar: "avatar.svg",
              email: "firstuser@cal.com",
              membership: "OWNER",
              name: "First user",
              username: "firstuser",
              profile: {
                username: "firstuser",
                upId: "usr-101",
                id: null,
                organization: null,
                organizationId: null,
              },
              avatarUrl: null,
              nonProfileUsername: null,
            },
            slug: "managedevent",
            hidden: false,
          },
        ],
        assignAllTeamMembers: false,
        hosts: [],
        isManagedEventType: true,
      })
    ).toBe(false);
  });
});
