@kitstack/nest-powertools
Version:
A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development
83 lines • 3.76 kB
JavaScript
"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