UNPKG

@kitstack/nest-powertools

Version:

A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development

83 lines 3.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const composite_guard_hook_1 = require("../composite-guard.hook"); const hooks_1 = require("../../types/hooks"); describe('CompositeGuard', () => { const createMockGuard = (result) => ({ canActivate: jest.fn().mockResolvedValue(result), }); const mockContext = {}; it('should pass AND logic if all guards pass', async () => { const guard = new composite_guard_hook_1.CompositeGuard({ guards: [createMockGuard(true), createMockGuard(true)], logic: hooks_1.GuardLogic.AND, name: 'AndGuard', }); expect(await guard.canActivate(mockContext)).toBe(true); }); it('should fail AND logic if any guard fails', async () => { const guard = new composite_guard_hook_1.CompositeGuard({ guards: [createMockGuard(true), createMockGuard(false)], logic: hooks_1.GuardLogic.AND, name: 'AndGuard', }); expect(await guard.canActivate(mockContext)).toBe(false); }); it('should pass OR logic if any guard passes', async () => { const guard = new composite_guard_hook_1.CompositeGuard({ guards: [createMockGuard(false), createMockGuard(true)], logic: hooks_1.GuardLogic.OR, name: 'OrGuard', }); expect(await guard.canActivate(mockContext)).toBe(true); }); it('should fail OR logic if all guards fail', async () => { const guard = new composite_guard_hook_1.CompositeGuard({ guards: [createMockGuard(false), createMockGuard(false)], logic: hooks_1.GuardLogic.OR, name: 'OrGuard', }); expect(await guard.canActivate(mockContext)).toBe(false); }); it('should invert result for NOT logic', async () => { const guard = new composite_guard_hook_1.CompositeGuard({ guards: [createMockGuard(true)], logic: hooks_1.GuardLogic.NOT, name: 'NotGuard', }); expect(await guard.canActivate(mockContext)).toBe(false); }); it('should pass NOT logic if guard fails', async () => { const guard = new composite_guard_hook_1.CompositeGuard({ guards: [createMockGuard(false)], logic: hooks_1.GuardLogic.NOT, name: 'NotGuard', }); expect(await guard.canActivate(mockContext)).toBe(true); }); it('should throw for unsupported logic', async () => { const guard = new composite_guard_hook_1.CompositeGuard({ guards: [], logic: 'INVALID', name: 'InvalidGuard', }); await expect(guard.canActivate(mockContext)).rejects.toThrow('Unsupported guard logic: INVALID'); }); }); describe('CompositeGuardHelper', () => { it('should create AND, OR, NOT, and Custom guards', () => { const andGuard = composite_guard_hook_1.CompositeGuardHelper.And(() => true, () => true); expect(andGuard).toBeInstanceOf(composite_guard_hook_1.CompositeGuard); const orGuard = composite_guard_hook_1.CompositeGuardHelper.Or(() => true, () => false); expect(orGuard).toBeInstanceOf(composite_guard_hook_1.CompositeGuard); const notGuard = composite_guard_hook_1.CompositeGuardHelper.Not(() => false); expect(notGuard).toBeInstanceOf(composite_guard_hook_1.CompositeGuard); const customGuard = composite_guard_hook_1.CompositeGuardHelper.Custom({ guards: [], logic: hooks_1.GuardLogic.AND, name: 'Custom', }); expect(customGuard).toBeInstanceOf(composite_guard_hook_1.CompositeGuard); }); }); //# sourceMappingURL=composite-guard.hook.spec.js.map