189 lines
7.0 KiB
TypeScript
189 lines
7.0 KiB
TypeScript
import { TestBed } from '@/testing';
|
|
import { CommonModule } from '@angular/common';
|
|
import { lastValueFrom, of } from 'rxjs';
|
|
import { vi } from 'vitest';
|
|
import { StoragePersistenceService } from '../storage/storage-persistence.service';
|
|
import { mockProvider } from '../testing/mock';
|
|
import type { LoginResponse } from './login-response';
|
|
import { LoginService } from './login.service';
|
|
import { ParLoginService } from './par/par-login.service';
|
|
import { PopUpLoginService } from './popup/popup-login.service';
|
|
import { PopUpService } from './popup/popup.service';
|
|
import { StandardLoginService } from './standard/standard-login.service';
|
|
|
|
describe('LoginService', () => {
|
|
let service: LoginService;
|
|
let parLoginService: ParLoginService;
|
|
let popUpLoginService: PopUpLoginService;
|
|
let standardLoginService: StandardLoginService;
|
|
let storagePersistenceService: StoragePersistenceService;
|
|
let popUpService: PopUpService;
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [CommonModule],
|
|
providers: [
|
|
LoginService,
|
|
mockProvider(ParLoginService),
|
|
mockProvider(PopUpLoginService),
|
|
mockProvider(StandardLoginService),
|
|
mockProvider(StoragePersistenceService),
|
|
mockProvider(PopUpService),
|
|
],
|
|
});
|
|
service = TestBed.inject(LoginService);
|
|
parLoginService = TestBed.inject(ParLoginService);
|
|
popUpLoginService = TestBed.inject(PopUpLoginService);
|
|
standardLoginService = TestBed.inject(StandardLoginService);
|
|
storagePersistenceService = TestBed.inject(StoragePersistenceService);
|
|
popUpService = TestBed.inject(PopUpService);
|
|
});
|
|
|
|
it('should create', () => {
|
|
expect(service).toBeTruthy();
|
|
});
|
|
|
|
describe('login', () => {
|
|
it('calls parLoginService loginPar if usePushedAuthorisationRequests is true', () => {
|
|
const config = { usePushedAuthorisationRequests: true };
|
|
const loginParSpy = vi.spyOn(parLoginService, 'loginPar');
|
|
const standardLoginSpy = vi.spyOn(standardLoginService, 'loginStandard');
|
|
|
|
service.login(config);
|
|
|
|
expect(loginParSpy).toHaveBeenCalledTimes(1);
|
|
expect(standardLoginSpy).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('calls standardLoginService loginStandard if usePushedAuthorisationRequests is false', () => {
|
|
const config = { usePushedAuthorisationRequests: false };
|
|
const loginParSpy = vi.spyOn(parLoginService, 'loginPar');
|
|
const standardLoginSpy = vi.spyOn(standardLoginService, 'loginStandard');
|
|
|
|
service.login(config);
|
|
|
|
expect(loginParSpy).not.toHaveBeenCalled();
|
|
expect(standardLoginSpy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('stores the customParams to the storage if customParams are given', () => {
|
|
// arrange
|
|
const config = { usePushedAuthorisationRequests: false };
|
|
const storagePersistenceServiceSpy = vi.spyOn(
|
|
storagePersistenceService,
|
|
'write'
|
|
);
|
|
const authOptions = { customParams: { custom: 'params' } };
|
|
|
|
service.login(config, authOptions);
|
|
|
|
expect(storagePersistenceServiceSpy).toHaveBeenCalledExactlyOnceWith(
|
|
'storageCustomParamsAuthRequest',
|
|
{ custom: 'params' },
|
|
config
|
|
);
|
|
});
|
|
|
|
it("should throw error if configuration is null and doesn't call loginPar or loginStandard", () => {
|
|
// arrange
|
|
// biome-ignore lint/suspicious/noEvolvingTypes: <explanation>
|
|
const config = null;
|
|
const loginParSpy = vi.spyOn(parLoginService, 'loginPar');
|
|
const standardLoginSpy = vi.spyOn(standardLoginService, 'loginStandard');
|
|
const authOptions = { customParams: { custom: 'params' } };
|
|
|
|
// act
|
|
const fn = (): void => service.login(config, authOptions);
|
|
|
|
// assert
|
|
expect(fn).toThrow(
|
|
new Error('Please provide a configuration before setting up the module')
|
|
);
|
|
expect(loginParSpy).not.toHaveBeenCalled();
|
|
expect(standardLoginSpy).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe('loginWithPopUp', () => {
|
|
it('calls parLoginService loginWithPopUpPar if usePushedAuthorisationRequests is true', async () => {
|
|
// arrange
|
|
const config = { usePushedAuthorisationRequests: true };
|
|
const loginWithPopUpPar = vi
|
|
.spyOn(parLoginService, 'loginWithPopUpPar')
|
|
.mockReturnValue(of({} as LoginResponse));
|
|
const loginWithPopUpStandardSpy = vi
|
|
.spyOn(popUpLoginService, 'loginWithPopUpStandard')
|
|
.mockReturnValue(of({} as LoginResponse));
|
|
|
|
// act
|
|
await lastValueFrom(service.loginWithPopUp(config, [config]));
|
|
expect(loginWithPopUpPar).toHaveBeenCalledTimes(1);
|
|
expect(loginWithPopUpStandardSpy).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('calls standardLoginService loginstandard if usePushedAuthorisationRequests is false', async () => {
|
|
// arrange
|
|
const config = { usePushedAuthorisationRequests: false };
|
|
const loginWithPopUpPar = vi
|
|
.spyOn(parLoginService, 'loginWithPopUpPar')
|
|
.mockReturnValue(of({} as LoginResponse));
|
|
const loginWithPopUpStandardSpy = vi
|
|
.spyOn(popUpLoginService, 'loginWithPopUpStandard')
|
|
.mockReturnValue(of({} as LoginResponse));
|
|
|
|
// act
|
|
await lastValueFrom(service.loginWithPopUp(config, [config]));
|
|
expect(loginWithPopUpPar).not.toHaveBeenCalled();
|
|
expect(loginWithPopUpStandardSpy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('stores the customParams to the storage if customParams are given', async () => {
|
|
// arrange
|
|
const config = { usePushedAuthorisationRequests: false };
|
|
const storagePersistenceServiceSpy = vi.spyOn(
|
|
storagePersistenceService,
|
|
'write'
|
|
);
|
|
const authOptions = { customParams: { custom: 'params' } };
|
|
|
|
vi.spyOn(popUpLoginService, 'loginWithPopUpStandard').mockReturnValue(
|
|
of({} as LoginResponse)
|
|
);
|
|
|
|
// act
|
|
await lastValueFrom(
|
|
service.loginWithPopUp(config, [config], authOptions)
|
|
);
|
|
expect(storagePersistenceServiceSpy).toHaveBeenCalledExactlyOnceWith(
|
|
'storageCustomParamsAuthRequest',
|
|
{ custom: 'params' },
|
|
config
|
|
);
|
|
});
|
|
|
|
it('returns error if there is already a popup open', async () => {
|
|
// arrange
|
|
const config = { usePushedAuthorisationRequests: false };
|
|
const authOptions = { customParams: { custom: 'params' } };
|
|
const loginWithPopUpPar = vi
|
|
.spyOn(parLoginService, 'loginWithPopUpPar')
|
|
.mockReturnValue(of({} as LoginResponse));
|
|
const loginWithPopUpStandardSpy = vi
|
|
.spyOn(popUpLoginService, 'loginWithPopUpStandard')
|
|
.mockReturnValue(of({} as LoginResponse));
|
|
|
|
vi.spyOn(popUpService, 'isCurrentlyInPopup').mockReturnValue(true);
|
|
|
|
// act
|
|
const result = await lastValueFrom(
|
|
service.loginWithPopUp(config, [config], authOptions)
|
|
);
|
|
expect(result).toEqual({
|
|
errorMessage: 'There is already a popup open.',
|
|
} as LoginResponse);
|
|
expect(loginWithPopUpPar).not.toHaveBeenCalled();
|
|
expect(loginWithPopUpStandardSpy).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|