refactor: id-cards related test

This commit is contained in:
Rainer Killinger
2026-10-01 16:44:56 +02:00
parent c5e60ab9e5
commit 32cc443600
2 changed files with 82 additions and 15 deletions
@@ -41,8 +41,8 @@ describe('favorites', function () {
});
cy.get('stapps-favorite-button').click();
cy.get('stapps-favorite-button > ion-button > ion-icon')
.invoke('attr', 'ng-reflect-fill')
.should('eq', 'true');
.invoke('attr', 'class')
.should('eq', 'selected');
});
cy.visit('/favorites');
cy.get('stapps-data-list-item').within(() => {
@@ -4,6 +4,13 @@ import {HttpClient} from '@angular/common/http';
import {AuthHelperService} from '../auth/auth-helper.service';
import {BehaviorSubject, firstValueFrom, of} from 'rxjs';
import {EncryptedStorageProvider} from '../storage/encrypted-storage.provider';
import {TestBed} from '@angular/core/testing';
import {TranslateService} from '@ngx-translate/core';
import {StorageBackend, Requestor} from '@openid/appauth';
import {IonicStorage, Browser} from 'ionic-appauth';
import {LoggerTestingModule} from 'ngx-logger/testing';
import {StAppsWebHttpClient} from '../data/stapps-web-http-client.provider';
import {SimpleBrowser} from '../../util/browser.factory';
class FakeAuth {
isLoggedIn$ = new BehaviorSubject(false);
@@ -13,40 +20,100 @@ class FakeAuth {
}
describe('IdCards', () => {
let configProvider: ConfigProvider;
let configProviderSpy: ConfigProvider;
let httpClient: HttpClient;
let authHelper: AuthHelperService;
let encryptedStorageProvider: EncryptedStorageProvider;
let fakeAuth: FakeAuth;
const authHelperServiceMock = jasmine.createSpyObj('AuthHelperService', ['getProvider']);
const translateServiceSpy = jasmine.createSpyObj('TranslateService', ['setDefaultLang', 'use']);
let storageBackendSpy: jasmine.SpyObj<StorageBackend>;
const simpleBrowserMock = jasmine.createSpyObj('SimpleBrowser', ['open']);
beforeEach(() => {
configProvider = jasmine.createSpyObj('ConfigProvider', ['config']);
configProvider.config = {
storageBackendSpy = jasmine.createSpyObj('StorageBackend', ['getItem']);
configProviderSpy = jasmine.createSpyObj('ConfigProvider', ['config', 'getAnyValue']);
configProviderSpy.config = {
app: {features: {extern: {idCards: {url: 'http://id-cards.local', authProvider: 'fakeAuth'}}}},
} as never;
httpClient = jasmine.createSpyObj('HttpClient', ['get']);
fakeAuth = new FakeAuth();
authHelper = jasmine.createSpyObj('AuthHelperService', ['getProvider']);
authHelper.getProvider = jasmine.createSpy().and.returnValue(fakeAuth);
configProviderSpy.getAnyValue = () =>
({
default: {
endpoints: {
mapping: {
id: '$.id',
email: '$.attributes.mailPrimaryAddress',
givenName: '$.attributes.givenName',
familyName: '$.attributes.sn',
name: '$.attributes.sn',
role: '$.attributes.eduPersonPrimaryAffiliation',
studentId: '$.attributes.employeeNumber',
},
},
},
}) as never;
encryptedStorageProvider = jasmine.createSpyObj('EncryptedStorageProvider', ['get', 'set', 'delete']);
encryptedStorageProvider.get = jasmine.createSpy().and.resolveTo();
encryptedStorageProvider.set = jasmine.createSpy().and.resolveTo();
encryptedStorageProvider.delete = jasmine.createSpy().and.resolveTo();
httpClient = jasmine.createSpyObj('HttpClient', ['get']);
TestBed.configureTestingModule({
imports: [LoggerTestingModule],
providers: [
IdCardsProvider,
StAppsWebHttpClient,
{
provide: TranslateService,
useValue: translateServiceSpy,
},
{
provide: EncryptedStorageProvider,
useValue: encryptedStorageProvider,
},
IonicStorage,
{
provide: ConfigProvider,
useValue: configProviderSpy,
},
Browser,
{
provide: StorageBackend,
useValue: storageBackendSpy,
},
{
provide: AuthHelperService,
useValue: authHelperServiceMock,
},
{
provide: SimpleBrowser,
useValue: simpleBrowserMock,
},
{
provide: HttpClient,
useValue: httpClient,
},
Requestor,
],
});
fakeAuth = new FakeAuth();
authHelperServiceMock.getProvider = jasmine.createSpy().and.returnValue(fakeAuth);
});
it('should emit undefined if not logged in', async () => {
const provider = new IdCardsProvider();
const provider = TestBed.inject(IdCardsProvider);
expect(await firstValueFrom(provider.getIdCards())).toEqual([]);
expect(authHelper.getProvider).toHaveBeenCalledTimes(1);
expect(authHelperServiceMock.getProvider).toHaveBeenCalledTimes(1);
});
it('should emit network result when logged in', async () => {
fakeAuth.isLoggedIn$.next(true);
httpClient.get = jasmine.createSpy().and.returnValue(of(['abc']));
fakeAuth.getValidToken = jasmine.createSpy().and.resolveTo({accessToken: 'fake-token'});
const provider = new IdCardsProvider();
const provider = TestBed.inject(IdCardsProvider);
expect(await firstValueFrom(provider.getIdCards())).toEqual(['abc' as never]);
expect(authHelper.getProvider).toHaveBeenCalledTimes(1);
expect(authHelperServiceMock.getProvider).toHaveBeenCalledTimes(1);
// eslint-disable-next-line unicorn/no-null
expect(httpClient.get).toHaveBeenCalledOnceWith('http://id-cards.local', {
headers: {
@@ -57,7 +124,7 @@ describe('IdCards', () => {
});
it('should react to logins', async () => {
const provider = new IdCardsProvider();
const provider = TestBed.inject(IdCardsProvider);
const observable = provider.getIdCards();
expect(await firstValueFrom(observable)).toEqual([]);
httpClient.get = jasmine.createSpy().and.returnValue(of(['abc']));