import type { Session } from "next-auth"; import { describe, expect, test } from "vitest"; import { getPermissionsWithChildren } from "@homarr/definitions"; import { constructIntegrationPermissions } from "../integration-permissions"; describe("constructIntegrationPermissions", () => { test("should return hasFullAccess as true when session permissions include integration-full-all", () => { // Arrange const integration = { userPermissions: [], groupPermissions: [], }; const session = { user: { id: "2", permissions: getPermissionsWithChildren(["integration-full-all"]), }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(true); expect(result.hasInteractAccess).toBe(true); expect(result.hasUseAccess).toBe(true); }); test("should return hasInteractAccess as true when session permissions include integration-interact-all", () => { // Arrange const integration = { userPermissions: [], groupPermissions: [], }; const session = { user: { id: "2", permissions: getPermissionsWithChildren(["integration-interact-all"]), }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasInteractAccess).toBe(true); expect(result.hasUseAccess).toBe(true); }); test('should return hasInteractAccess as true when integration user permissions include "interact"', () => { // Arrange const integration = { userPermissions: [{ permission: "interact" as const }], groupPermissions: [], }; const session = { user: { id: "2", permissions: [], }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasInteractAccess).toBe(true); expect(result.hasUseAccess).toBe(true); }); test("should return hasInteractAccess as true when integration group permissions include interact", () => { // Arrange const integration = { userPermissions: [], groupPermissions: [{ permission: "interact" as const }], }; const session = { user: { id: "2", permissions: [], }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasInteractAccess).toBe(true); expect(result.hasUseAccess).toBe(true); }); test("should return hasUseAccess as true when session permissions include integration-use-all", () => { // Arrange const integration = { userPermissions: [], groupPermissions: [], }; const session = { user: { id: "2", permissions: getPermissionsWithChildren(["integration-use-all"]), }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasInteractAccess).toBe(false); expect(result.hasUseAccess).toBe(true); }); test("should return hasUseAccess as true when integration user permissions length is greater than or equal to 1", () => { // Arrange const integration = { userPermissions: [{ permission: "use" as const }], groupPermissions: [], }; const session = { user: { id: "2", permissions: [], }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasInteractAccess).toBe(false); expect(result.hasUseAccess).toBe(true); }); test("should return hasUseAccess as true when integration group permissions length is greater than or equal to 1", () => { // Arrange const integration = { userPermissions: [], groupPermissions: [{ permission: "use" as const }], }; const session = { user: { id: "2", permissions: [], }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasInteractAccess).toBe(false); expect(result.hasUseAccess).toBe(true); }); test("should return all false when integration no permissions", () => { // Arrange const integration = { userPermissions: [], groupPermissions: [], }; const session = { user: { id: "2", permissions: [], }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructIntegrationPermissions(integration, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasInteractAccess).toBe(false); expect(result.hasUseAccess).toBe(false); }); }); /* test("should return hasViewAccess as true when board is public", () => { // Arrange const board = { creator: { id: "1", }, userPermissions: [], groupPermissions: [], isPublic: true, }; const session = { user: { id: "2", permissions: [], }, expires: new Date().toISOString(), } satisfies Session; // Act const result = constructBoardPermissions(board, session); // Assert expect(result.hasFullAccess).toBe(false); expect(result.hasChangeAccess).toBe(false); expect(result.hasViewAccess).toBe(true); }); }); */