Files
Benny JooandGitHub ff38d6c7db refactor: Remove circular deps between @calcom/lib and @calcom/features [1] (#24399)
* add eslint config

* migrate autoLock to features

* migrate teamService to features

* migrate userCreationService

* migrate insights services to features

* migrate ProfileRepository

* update imports

* migrate filter segmen tests

* migrate filter segment repository

* migrate getBusyTimes

* migrate getLocaleFromRequest

* refactor csvUtils

* make filename clearer

* migrate getLuckyUser integration test

* migrate autoLock test to features

* wip

* refactors

* migrate useBookerUrl

* migrate more

* wip

* Migrate eventTypeRepository

* membership repository

* update imports

* update imports

* migrate

* move organization repository

* update imports

* update imports

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix tests

* fix type checks

* fix

* fix

* migrate

* update imports

* fix tests

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix

* fix
2025-10-13 12:01:02 -03:00

114 lines
3.0 KiB
TypeScript

import { describe, it, beforeEach, vi, expect } from "vitest";
import { getTeamWithoutMembers } from "@calcom/features/ee/teams/lib/queries";
import { MembershipRepository } from "@calcom/features/membership/repositories/MembershipRepository";
import type { TrpcSessionUser } from "../../../types";
import getTeam from "./get.handler";
vi.mock("@calcom/features/membership/repositories/MembershipRepository", () => ({
MembershipRepository: {
findUniqueByUserIdAndTeamId: vi.fn(),
},
}));
vi.mock("@calcom/features/ee/teams/lib/queries", () => ({
getTeamWithoutMembers: vi.fn(),
}));
describe("getTeam", () => {
const user = {
id: 1,
organization: { isOrgAdmin: false },
} as NonNullable<TrpcSessionUser>;
const input = {
teamId: 123,
isOrg: false,
};
beforeEach(() => {
// Reset all mocks before each test
vi.clearAllMocks();
});
it("throws UNAUTHORIZED if user is not a member of the team", async () => {
(MembershipRepository.findUniqueByUserIdAndTeamId as any).mockResolvedValue(null);
await expect(getTeam({ ctx: { user }, input })).rejects.toMatchObject({
code: "UNAUTHORIZED",
message: "You are not a member of this team.",
});
});
it("throws NOT_FOUND if team does not exist", async () => {
(MembershipRepository.findUniqueByUserIdAndTeamId as any).mockResolvedValue({
role: "member",
accepted: true,
});
(getTeamWithoutMembers as any).mockResolvedValue(null);
await expect(getTeam({ ctx: { user }, input })).rejects.toMatchObject({
code: "NOT_FOUND",
message: "Team not found",
});
});
it("passes undefined as userId if user is org admin", async () => {
const adminUser = {
...user,
organization: { isOrgAdmin: true },
};
(MembershipRepository.findUniqueByUserIdAndTeamId as any).mockResolvedValue({
role: "admin",
accepted: true,
});
(getTeamWithoutMembers as any).mockResolvedValue({
id: input.teamId,
name: "Admin Team",
});
await getTeam({ ctx: { user: adminUser }, input });
expect(getTeamWithoutMembers).toHaveBeenCalledWith({
id: input.teamId,
userId: undefined,
isOrgView: input.isOrg,
});
});
it("returns team data with membership info if authorized", async () => {
const membershipData = {
role: "admin",
accepted: true,
};
const teamData = {
id: input.teamId,
name: "Team Name",
description: "A team",
};
(MembershipRepository.findUniqueByUserIdAndTeamId as any).mockResolvedValue(membershipData);
(getTeamWithoutMembers as any).mockResolvedValue(teamData);
const result = await getTeam({ ctx: { user }, input });
expect(result).toEqual({
...teamData,
membership: membershipData,
});
expect(MembershipRepository.findUniqueByUserIdAndTeamId).toHaveBeenCalledWith({
userId: user.id,
teamId: input.teamId,
});
expect(getTeamWithoutMembers).toHaveBeenCalledWith({
id: input.teamId,
userId: user.id,
isOrgView: input.isOrg,
});
});
});