ngx-testing-tools
Version:
Makes Angular testing easier
61 lines • 12.3 kB
JavaScript
import { inject } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { isConstructor } from '../../../common/utils/constructor.util';
import { buildRouteSnapshot, getRouterState } from '../../../common/utils/router.util';
import { isCanActivateChildGuard, isCanActivateGuard, isCanDeactivateGuard, isCanLoadGuard, isCanMatchGuard } from '../../utils/guard.util';
export function buildChallengeTools(guardProxy, injector, guardType) {
const guard = guardProxy.instance;
switch (true) {
case isCanActivateGuard(guard, guardType):
return buildChallengeToolsForActivate(guardProxy, injector, 'canActivate');
case isCanActivateChildGuard(guard, guardType):
return buildChallengeToolsForActivate(guardProxy, injector, 'canActivateChild');
case isCanDeactivateGuard(guard, guardType):
return buildChallengeToolsForDeactivate(guardProxy, injector);
case isCanLoadGuard(guard, guardType):
return buildChallengeToolsForLoad(guardProxy, 'canLoad');
case isCanMatchGuard(guard, guardType):
return buildChallengeToolsForLoad(guardProxy, 'canMatch');
default:
throw new Error(`Unknown guard type (${guardType}) or invalid passed guard (${guard.name ?? guard}).`);
}
}
function buildChallengeToolsForActivate(guardProxy, injector, key) {
const challenge = () => {
const route = buildRouteSnapshot();
const state = getRouterState(injector);
return guardProxy[key](route, state);
};
challenge.withInfo = (info) => {
const { currentState: state = getRouterState(injector), data, params, queryParams, } = info;
const route = buildRouteSnapshot({ data, params, queryParams });
return guardProxy[key](route, state);
};
return challenge;
}
function buildChallengeToolsForDeactivate(guardProxy, injector) {
const challenge = () => {
const currentRoute = buildRouteSnapshot();
const state = getRouterState(injector);
return guardProxy.canDeactivate({}, currentRoute, state, state);
};
challenge.withInfo = (info) => {
const { currentState = getRouterState(injector), nextState = currentState, component: ComponentCtor, data, params, queryParams, } = info;
const component = (isConstructor(ComponentCtor)) ? TestBed.runInInjectionContext(() => inject(ComponentCtor)) : ComponentCtor;
const currentRoute = buildRouteSnapshot({ data, params, queryParams });
return guardProxy.canDeactivate(component ?? {}, currentRoute, currentState, nextState);
};
return challenge;
}
function buildChallengeToolsForLoad(guardProxy, key) {
const challenge = () => {
return guardProxy[key]({ data: {} }, []);
};
challenge.withInfo = (info) => {
const { route = {}, data = {}, segments = [], } = info;
route.data ??= data;
return guardProxy[key](route, segments);
};
return challenge;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlLXRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlc3RpbmctdG9vbHMvc3JjL2xpYi9ndWFyZC10ZXN0LWJlZC90b29scy9jaGFsbGVuZ2UvY2hhbGxlbmdlLXRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUk1SSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBc0IsRUFBRSxRQUFrQixFQUFFLFNBQTJCO0lBQ3pHLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFFbEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztZQUN2QyxPQUFPLDhCQUE4QixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFN0UsS0FBSyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO1lBQzVDLE9BQU8sOEJBQThCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBRWxGLEtBQUssb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztZQUN6QyxPQUFPLGdDQUFnQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVoRSxLQUFLLGNB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Q0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUU7UUFDekMsTUFBTSxFQUNKLEtBQUssR0FBRyxFQUFFLEVBQ1YsSUFBSSxHQUFHLEVBQUUsRUFDVCxRQUFRLEdBQUcsRUFBRSxHQUNkLEdBQUcsSUFBSSxDQUFDO1FBRVQsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7UUFDcEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZXN0QmVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgaXNDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi91dGlscy9jb25zdHJ1Y3Rvci51dGlsJztcbmltcG9ydCB7IGJ1aWxkUm91dGVTbmFwc2hvdCwgZ2V0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbHMvcm91dGVyLnV0aWwnO1xuaW1wb3J0IHsgSW50ZXJuYWxHdWFyZENhbiB9IGZyb20gJy4uLy4uL21vZGVscy9ndWFyZC1jYW4ubW9kZWwnO1xuaW1wb3J0IHsgR3VhcmRQcm94eSB9IGZyb20gJy4uLy4uL3Byb3h5L2d1YXJkLXByb3h5JztcbmltcG9ydCB7IGlzQ2FuQWN0aXZhdGVDaGlsZEd1YXJkLCBpc0NhbkFjdGl2YXRlR3VhcmQsIGlzQ2FuRGVhY3RpdmF0ZUd1YXJkLCBpc0NhbkxvYWRHdWFyZCwgaXNDYW5NYXRjaEd1YXJkIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ3VhcmQudXRpbCc7XG5pbXBvcnQgeyBDaGFsbGVuZ2VUb29scyB9IGZyb20gJy4vbW9kZWxzL2NoYWxsZW5nZS10b29scy5tb2RlbCc7XG5pbXBvcnQgeyBSb3V0aW5nSW5mbyB9IGZyb20gJy4vbW9kZWxzL3JvdXRpbmctaW5mby5tb2RlbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENoYWxsZW5nZVRvb2xzKGd1YXJkUHJveHk6IEd1YXJkUHJveHksIGluamVjdG9yOiBJbmplY3RvciwgZ3VhcmRUeXBlOiBJbnRlcm5hbEd1YXJkQ2FuKTogQ2hhbGxlbmdlVG9vbHM8YW55PiB7XG4gIGNvbnN0IGd1YXJkID0gZ3VhcmRQcm94eS5pbnN0YW5jZTtcblxuICBzd2l0Y2ggKHRydWUpIHtcbiAgICBjYXNlIGlzQ2FuQWN0aXZhdGVHdWFyZChndWFyZCwgZ3VhcmRUeXBlKTpcbiAgICAgIHJldHVybiBidWlsZENoYWxsZW5nZVRvb2xzRm9yQWN0aXZhdGUoZ3VhcmRQcm94eSwgaW5qZWN0b3IsICdjYW5BY3RpdmF0ZScpO1xuXG4gICAgY2FzZSBpc0NhbkFjdGl2YXRlQ2hpbGRHdWFyZChndWFyZCwgZ3VhcmRUeXBlKTpcbiAgICAgIHJldHVybiBidWlsZENoYWxsZW5nZVRvb2xzRm9yQWN0aXZhdGUoZ3VhcmRQcm94eSwgaW5qZWN0b3IsICdjYW5BY3RpdmF0ZUNoaWxkJyk7XG5cbiAgICBjYXNlIGlzQ2FuRGVhY3RpdmF0ZUd1YXJkKGd1YXJkLCBndWFyZFR5cGUpOlxuICAgICAgcmV0dXJuIGJ1aWxkQ2hhbGxlbmdlVG9vbHNGb3JEZWFjdGl2YXRlKGd1YXJkUHJveHksIGluamVjdG9yKTtcblxuICAgIGNhc2UgaXNDYW5Mb2FkR3VhcmQoZ3VhcmQsIGd1YXJkVHlwZSk6XG4gICAgICByZXR1cm4gYnVpbGRDaGFsbGVuZ2VUb29sc0ZvckxvYWQoZ3VhcmRQcm94eSwgJ2NhbkxvYWQnKTtcblxuICAgIGNhc2UgaXNDYW5NYXRjaEd1YXJkKGd1YXJkLCBndWFyZFR5cGUpOlxuICAgICAgcmV0dXJuIGJ1aWxkQ2hhbGxlbmdlVG9vbHNGb3JMb2FkKGd1YXJkUHJveHksICdjYW5NYXRjaCcpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBndWFyZCB0eXBlICgke2d1YXJkVHlwZX0pIG9yIGludmFsaWQgcGFzc2VkIGd1YXJkICgke2d1YXJkLm5hbWUgPz8gZ3VhcmR9KS5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENoYWxsZW5nZVRvb2xzRm9yQWN0aXZhdGUoZ3VhcmRQcm94eTogR3VhcmRQcm94eSwgaW5qZWN0b3I6IEluamVjdG9yLCBrZXk6ICdjYW5BY3RpdmF0ZScgfCAnY2FuQWN0aXZhdGVDaGlsZCcpOiBDaGFsbGVuZ2VUb29sczx1bmtub3duPiB7XG4gIGNvbnN0IGNoYWxsZW5nZTogQ2hhbGxlbmdlVG9vbHM8YW55PiA9ICgpID0+IHtcbiAgICBjb25zdCByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCA9IGJ1aWxkUm91dGVTbmFwc2hvdCgpO1xuICAgIGNvbnN0IHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90ID0gZ2V0Um91dGVyU3RhdGUoaW5qZWN0b3IpO1xuXG4gICAgcmV0dXJuIGd1YXJkUHJveHlba2V5XShyb3V0ZSwgc3RhdGUpO1xuICB9O1xuXG4gIGNoYWxsZW5nZS53aXRoSW5mbyA9IChpbmZvOiBSb3V0aW5nSW5mbykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRTdGF0ZTogc3RhdGUgPSBnZXRSb3V0ZXJTdGF0ZShpbmplY3RvciksXG4gICAgICBkYXRhLFxuICAgICAgcGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXMsXG4gICAgfSA9IGluZm87XG5cbiAgICBjb25zdCByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCA9IGJ1aWxkUm91dGVTbmFwc2hvdCh7IGRhdGEsIHBhcmFtcywgcXVlcnlQYXJhbXMgfSk7XG5cbiAgICByZXR1cm4gZ3VhcmRQcm94eVtrZXldKHJvdXRlLCBzdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIGNoYWxsZW5nZTtcbn1cblxuZnVuY3Rpb24gYnVpbGRDaGFsbGVuZ2VUb29sc0ZvckRlYWN0aXZhdGUoZ3VhcmRQcm94eTogR3VhcmRQcm94eSwgaW5qZWN0b3I6IEluamVjdG9yKTogQ2hhbGxlbmdlVG9vbHM8dW5rbm93bj4ge1xuICBjb25zdCBjaGFsbGVuZ2U6IENoYWxsZW5nZVRvb2xzPGFueT4gPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gYnVpbGRSb3V0ZVNuYXBzaG90KCk7XG4gICAgY29uc3Qgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgPSBnZXRSb3V0ZXJTdGF0ZShpbmplY3Rvcik7XG5cbiAgICByZXR1cm4gZ3VhcmRQcm94eS5jYW5EZWFjdGl2YXRlKHt9LCBjdXJyZW50Um91dGUsIHN0YXRlLCBzdGF0ZSk7XG4gIH07XG5cbiAgY2hhbGxlbmdlLndpdGhJbmZvID0gKGluZm86IFJvdXRpbmdJbmZvKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudFN0YXRlID0gZ2V0Um91dGVyU3RhdGUoaW5qZWN0b3IpLFxuICAgICAgbmV4dFN0YXRlID0gY3VycmVudFN0YXRlLFxuICAgICAgY29tcG9uZW50OiBDb21wb25lbnRDdG9yLFxuICAgICAgZGF0YSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgIH0gPSBpbmZvO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gKGlzQ29uc3RydWN0b3IoQ29tcG9uZW50Q3RvcikpID8gVGVzdEJlZC5ydW5JbkluamVjdGlvbkNvbnRleHQoKCkgPT4gaW5qZWN0KENvbXBvbmVudEN0b3IpKSA6IENvbXBvbmVudEN0b3I7XG4gICAgY29uc3QgY3VycmVudFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gYnVpbGRSb3V0ZVNuYXBzaG90KHsgZGF0YSwgcGFyYW1zLCBxdWVyeVBhcmFtcyB9KTtcblxuICAgIHJldHVybiBndWFyZFByb3h5LmNhbkRlYWN0aXZhdGUoY29tcG9uZW50ID8/IHt9LCBjdXJyZW50Um91dGUsIGN1cnJlbnRTdGF0ZSwgbmV4dFN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4gY2hhbGxlbmdlO1xufVxuXG5mdW5jdGlvbiBidWlsZENoYWxsZW5nZVRvb2xzRm9yTG9hZChndWFyZFByb3h5OiBHdWFyZFByb3h5LCBrZXk6ICdjYW5Mb2FkJyB8ICdjYW5NYXRjaCcpOiBDaGFsbGVuZ2VUb29sczx1bmtub3duPiB7XG4gIGNvbnN0IGNoYWxsZW5nZTogQ2hhbGxlbmdlVG9vbHM8YW55PiA9ICgpID0+IHtcbiAgICByZXR1cm4gZ3VhcmRQcm94eVtrZXldKHsgZGF0YToge30gfSwgW10pO1xuICB9O1xuXG4gIGNoYWxsZW5nZS53aXRoSW5mbyA9IChpbmZvOiBSb3V0aW5nSW5mbykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdXRlID0ge30sXG4gICAgICBkYXRhID0ge30sXG4gICAgICBzZWdtZW50cyA9IFtdLFxuICAgIH0gPSBpbmZvO1xuXG4gICAgcm91dGUuZGF0YSA/Pz0gZGF0YTtcbiAgICByZXR1cm4gZ3VhcmRQcm94eVtrZXldKHJvdXRlLCBzZWdtZW50cyk7XG4gIH07XG5cbiAgcmV0dXJuIGNoYWxsZW5nZTtcbn1cbiJdfQ==