* Revert "fix: resolve flaky integration tests (#25030)"
This reverts commit 4e5d4f67d5.
* update
* test
* Remove connection pool setup in Prisma index
Set the connection pool to undefined, removing conditional pooling logic.
* update
142 lines
3.9 KiB
TypeScript
142 lines
3.9 KiB
TypeScript
import type { Request, Response } from "express";
|
|
import type { NextApiRequest, NextApiResponse } from "next";
|
|
import { createMocks } from "node-mocks-http";
|
|
import { describe, it, expect, beforeAll } from "vitest";
|
|
|
|
import prisma from "@calcom/prisma";
|
|
|
|
import { isAdminGuard } from "../../../lib/utils/isAdmin";
|
|
import { ScopeOfAdmin } from "../../../lib/utils/scopeOfAdmin";
|
|
|
|
type CustomNextApiRequest = NextApiRequest & Request;
|
|
type CustomNextApiResponse = NextApiResponse & Response;
|
|
|
|
describe("isAdmin guard", () => {
|
|
beforeAll(async () => {
|
|
const acmeOrg = await prisma.team.findFirst({
|
|
where: {
|
|
slug: "acme",
|
|
isOrganization: true,
|
|
},
|
|
});
|
|
|
|
if (acmeOrg) {
|
|
await prisma.organizationSettings.upsert({
|
|
where: {
|
|
organizationId: acmeOrg.id,
|
|
},
|
|
update: {
|
|
isAdminAPIEnabled: true,
|
|
},
|
|
create: {
|
|
organizationId: acmeOrg.id,
|
|
orgAutoAcceptEmail: "acme.com",
|
|
isAdminAPIEnabled: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
const dunderOrg = await prisma.team.findFirst({
|
|
where: {
|
|
slug: "dunder-mifflin",
|
|
isOrganization: true,
|
|
},
|
|
});
|
|
|
|
if (dunderOrg) {
|
|
await prisma.organizationSettings.upsert({
|
|
where: {
|
|
organizationId: dunderOrg.id,
|
|
},
|
|
update: {
|
|
isAdminAPIEnabled: false,
|
|
},
|
|
create: {
|
|
organizationId: dunderOrg.id,
|
|
orgAutoAcceptEmail: "dunder-mifflin.com",
|
|
isAdminAPIEnabled: false,
|
|
},
|
|
});
|
|
}
|
|
});
|
|
it("Returns false when user does not exist in the system", async () => {
|
|
const { req } = createMocks<CustomNextApiRequest, CustomNextApiResponse>({
|
|
method: "POST",
|
|
body: {},
|
|
});
|
|
|
|
req.userId = 0;
|
|
req.user = undefined;
|
|
|
|
const { isAdmin, scope } = await isAdminGuard(req);
|
|
|
|
expect(isAdmin).toBe(false);
|
|
expect(scope).toBe(null);
|
|
});
|
|
|
|
it("Returns false when org user is a member", async () => {
|
|
const { req } = createMocks<CustomNextApiRequest, CustomNextApiResponse>({
|
|
method: "POST",
|
|
body: {},
|
|
});
|
|
|
|
const memberUser = await prisma.user.findFirstOrThrow({ where: { email: "member2-acme@example.com" } });
|
|
|
|
req.userId = memberUser.id;
|
|
req.user = memberUser;
|
|
|
|
const { isAdmin, scope } = await isAdminGuard(req);
|
|
|
|
expect(isAdmin).toBe(false);
|
|
expect(scope).toBe(null);
|
|
});
|
|
|
|
it("Returns system-wide admin when user is marked as such", async () => {
|
|
const { req } = createMocks<CustomNextApiRequest, CustomNextApiResponse>({
|
|
method: "POST",
|
|
body: {},
|
|
});
|
|
|
|
const adminUser = await prisma.user.findFirstOrThrow({ where: { email: "admin@example.com" } });
|
|
|
|
req.userId = adminUser.id;
|
|
req.user = adminUser;
|
|
|
|
const { isAdmin, scope } = await isAdminGuard(req);
|
|
|
|
expect(isAdmin).toBe(true);
|
|
expect(scope).toBe(ScopeOfAdmin.SystemWide);
|
|
});
|
|
|
|
it("Returns org-wide admin when user is set as such & admin API access is granted", async () => {
|
|
const { req } = createMocks<CustomNextApiRequest, CustomNextApiResponse>({
|
|
method: "POST",
|
|
body: {},
|
|
});
|
|
|
|
const adminUser = await prisma.user.findFirstOrThrow({ where: { email: "owner1-acme@example.com" } });
|
|
|
|
req.userId = adminUser.id;
|
|
req.user = adminUser;
|
|
|
|
const { isAdmin, scope } = await isAdminGuard(req);
|
|
expect(isAdmin).toBe(true);
|
|
expect(scope).toBe(ScopeOfAdmin.OrgOwnerOrAdmin);
|
|
});
|
|
|
|
it("Returns no admin when user is set as org admin but admin API access is revoked", async () => {
|
|
const { req } = createMocks<CustomNextApiRequest, CustomNextApiResponse>({
|
|
method: "POST",
|
|
body: {},
|
|
});
|
|
|
|
const adminUser = await prisma.user.findFirstOrThrow({ where: { email: "owner1-dunder@example.com" } });
|
|
|
|
req.userId = adminUser.id;
|
|
req.user = adminUser;
|
|
|
|
const { isAdmin } = await isAdminGuard(req);
|
|
expect(isAdmin).toBe(false);
|
|
});
|
|
});
|