RegistrationPage shows the signed-in BSN and submits to the BFF via the generated api-client, confirming with the returned reference; built from NL Design System (Utrecht) components. Wire the guarded route + app providers (DigiD OIDC + token interceptor + HttpClient), the NL DS theme, and lang=nl. Component tests (Testing Library) + axe (WCAG 2.1 AA) pass; a guard test covers libs/auth. Replace the demo eslint depConstraints (scope:shop/shared) with a permissive default. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { signal } from '@angular/core';
|
|
import { TestBed } from '@angular/core/testing';
|
|
import { AuthService } from './auth.service';
|
|
import { authenticatedGuard } from './authenticated.guard';
|
|
|
|
class FakeAuth extends AuthService {
|
|
readonly isAuthenticated = signal(false);
|
|
readonly bsn = signal<string | undefined>(undefined);
|
|
login(): void {
|
|
/* spied in tests */
|
|
}
|
|
logout(): void {
|
|
/* noop */
|
|
}
|
|
}
|
|
|
|
function runGuard(authenticated: boolean) {
|
|
const auth = new FakeAuth();
|
|
auth.isAuthenticated.set(authenticated);
|
|
const loginSpy = vi.spyOn(auth, 'login');
|
|
TestBed.configureTestingModule({
|
|
providers: [{ provide: AuthService, useValue: auth }],
|
|
});
|
|
const result = TestBed.runInInjectionContext(() =>
|
|
authenticatedGuard(null as never, null as never),
|
|
);
|
|
return { result, loginSpy };
|
|
}
|
|
|
|
describe('authenticatedGuard', () => {
|
|
it('allows the route for an authenticated user', () => {
|
|
const { result, loginSpy } = runGuard(true);
|
|
expect(result).toBe(true);
|
|
expect(loginSpy).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('blocks and starts DigiD login when not authenticated', () => {
|
|
const { result, loginSpy } = runGuard(false);
|
|
expect(result).toBe(false);
|
|
expect(loginSpy).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|