From 876462d4951ed0a5d764da2dab1c14b3acc2d9c3 Mon Sep 17 00:00:00 2001 From: Fahri Gedik Date: Fri, 19 Sep 2025 14:46:40 +0300 Subject: [PATCH] Update test setup and refactor permission tests --- .../packages/components/src/test-setup.ts | 3 +- .../lib/tests/permission.directive.spec.ts | 8 +- .../src/lib/tests/permission.guard.spec.ts | 125 +----------------- .../core/src/lib/tests/safe-html.pipe.spec.ts | 2 + npm/ng-packs/packages/core/src/test-setup.ts | 3 +- npm/ng-packs/packages/oauth/src/test-setup.ts | 3 +- 6 files changed, 15 insertions(+), 129 deletions(-) diff --git a/npm/ng-packs/packages/components/src/test-setup.ts b/npm/ng-packs/packages/components/src/test-setup.ts index 03a1d1d3a7..1e2322cf13 100644 --- a/npm/ng-packs/packages/components/src/test-setup.ts +++ b/npm/ng-packs/packages/components/src/test-setup.ts @@ -1,5 +1,6 @@ import 'jest-canvas-mock'; -import 'jest-preset-angular/setup-jest'; +import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; +setupZoneTestEnv(); import { getTestBed } from '@angular/core/testing'; import { diff --git a/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts index a8c0c70000..a2f07e7be9 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/permission.directive.spec.ts @@ -19,8 +19,8 @@ describe('PermissionDirective', () => { }); beforeEach(() => { - spectator = createDirective('
', { - hostProps: { permission: 'test', requiresAll: false }, + spectator = createDirective('
', { + hostProps: { permission: 'test', runCD: false }, }); directive = spectator.directive; }); @@ -35,8 +35,8 @@ describe('PermissionDirective', () => { expect(directive).toBeTruthy(); }); - it('should handle requiresAll input', () => { - spectator.setHostInput({ requiresAll: true }); + it('should handle runChangeDetection input', () => { + spectator.setHostInput({ runCD: true }); spectator.detectChanges(); expect(directive).toBeTruthy(); }); diff --git a/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts index b15a956144..baddabd3b9 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/permission.guard.spec.ts @@ -2,14 +2,9 @@ import { APP_BASE_HREF } from '@angular/common'; import { HttpClientTestingModule } from '@angular/common/http/testing'; import { Component } from '@angular/core'; import { provideRouter, Route, Router, RouterModule } from '@angular/router'; -import { - createServiceFactory, - createSpyObject, - SpectatorService, - SpyObject, -} from '@ngneat/spectator/jest'; +import { createSpyObject, SpyObject } from '@ngneat/spectator/jest'; import { of } from 'rxjs'; -import { permissionGuard, PermissionGuard } from '../guards/permission.guard'; +import { permissionGuard } from '../guards/permission.guard'; import { HttpErrorReporterService } from '../services/http-error-reporter.service'; import { PermissionService } from '../services/permission.service'; import { RoutesService } from '../services/routes.service'; @@ -24,121 +19,7 @@ import { AuthService } from '../abstracts'; @Component({ template: '' }) class DummyComponent {} -describe('PermissionGuard', () => { - let spectator: SpectatorService; - let guard: PermissionGuard; - let routes: SpyObject; - let httpErrorReporter: SpyObject; - let permissionService: SpyObject; - - const mockOAuthService = { - isAuthenticated: true, - }; - - const createService = createServiceFactory({ - service: PermissionGuard, - mocks: [PermissionService], - imports: [ - HttpClientTestingModule, - RouterModule.forRoot([ - { - path: 'test', - component: DummyComponent, - data: { - requiredPolicy: 'TestPolicy', - }, - }, - ]), - DummyComponent, - ], - providers: [ - { - provide: APP_BASE_HREF, - useValue: '/', - }, - { provide: AuthService, useValue: mockOAuthService }, - { - provide: CORE_OPTIONS, - useValue: { - skipGetAppConfiguration: true, - environment: { - apis: { - default: { - url: 'http://localhost:4200', - }, - }, - application: { - baseUrl: 'http://localhost:4200', - name: 'TestApp', - }, - remoteEnv: {}, - }, - } - }, - { provide: OTHERS_GROUP, useValue: 'AbpUi::OthersGroup' }, - { provide: SORT_COMPARE_FUNC, useValue: compareFuncFactory }, - IncludeLocalizationResourcesProvider, - ], - }); - - beforeEach(() => { - spectator = createService(); - guard = spectator.service; - routes = spectator.inject(RoutesService); - httpErrorReporter = spectator.inject(HttpErrorReporterService); - permissionService = spectator.inject(PermissionService); - }); - - it('should return true when the grantedPolicy is true', done => { - permissionService.getGrantedPolicy$.andReturn(of(true)); - const spy = jest.spyOn(httpErrorReporter, 'reportError'); - guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { - expect(res).toBe(true); - expect(spy.mock.calls).toHaveLength(0); - done(); - }); - }); - - it('should return false and report an error when the grantedPolicy is false', () => { - permissionService.getGrantedPolicy$.andReturn(of(false)); - const spy = jest.spyOn(httpErrorReporter, 'reportError'); - guard.canActivate({ data: { requiredPolicy: 'test' } } as any, null).subscribe(res => { - expect(res).toBe(false); - expect(spy.mock.calls[0][0]).toEqual({ - status: 403, - }); - }); - expect(guard).toBeTruthy(); - }); - - it('should check the requiredPolicy from RoutesService', done => { - routes.add([ - { - path: '/test', - name: 'Test', - requiredPolicy: 'TestPolicy', - }, - ]); - permissionService.getGrantedPolicy$.mockImplementation(policy => of(policy === 'TestPolicy')); - guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { - expect(result).toBe(true); - done(); - }); - }); - - it('should return Observable if RoutesService does not have requiredPolicy for given URL', done => { - routes.add([ - { - path: '/test', - name: 'Test', - }, - ]); - guard.canActivate({ data: {} } as any, { url: 'test' } as any).subscribe(result => { - expect(result).toBe(true); - done(); - }); - }); -}); +// Removed deprecated class-based PermissionGuard tests; function-based guard is covered below. describe('authGuard', () => { let permissionService: SpyObject; diff --git a/npm/ng-packs/packages/core/src/lib/tests/safe-html.pipe.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/safe-html.pipe.spec.ts index 34d372ebbb..69ecfeb3a2 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/safe-html.pipe.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/safe-html.pipe.spec.ts @@ -27,8 +27,10 @@ describe('SafeHtmlPipe', () => { }); it('should sanitize unsafe HTML content', () => { + const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => undefined); const input = `

Click here!

`; const result = pipe.transform(input); expect(result).toBe(`

Click here!

`); + warnSpy.mockRestore(); }); }); diff --git a/npm/ng-packs/packages/core/src/test-setup.ts b/npm/ng-packs/packages/core/src/test-setup.ts index daa5cfc35e..ebbb75f974 100644 --- a/npm/ng-packs/packages/core/src/test-setup.ts +++ b/npm/ng-packs/packages/core/src/test-setup.ts @@ -1,4 +1,5 @@ -import 'jest-preset-angular/setup-jest'; +import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; +setupZoneTestEnv(); import { getTestBed } from '@angular/core/testing'; import { diff --git a/npm/ng-packs/packages/oauth/src/test-setup.ts b/npm/ng-packs/packages/oauth/src/test-setup.ts index 1100b3e8a6..4555f138a7 100644 --- a/npm/ng-packs/packages/oauth/src/test-setup.ts +++ b/npm/ng-packs/packages/oauth/src/test-setup.ts @@ -1 +1,2 @@ -import 'jest-preset-angular/setup-jest'; +import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; +setupZoneTestEnv();