From 265f77e951b34cbe244e0dd6bffab91af3381265 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:29:58 +0100 Subject: [PATCH 01/11] added route to service oidc --- src/app/app.routes.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index c16ff45e..610c10cc 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -5,13 +5,16 @@ import { AppMarketRoutes } from './appmarket'; import { WelcomeRoutes } from './welcome/welcome.routes'; import {ServiceUnavailableRoutes} from './service-unavailable/service-unavailable.routes'; import {PageNotFoundComponent} from './shared/page-not-found/page-not-found.component'; +import {LoginSuccessComponent} from './auth/login-success/login-success.component'; const appRoutes: Routes = [ ...WelcomeRoutes, ...AppMarketRoutes, ...ServiceUnavailableRoutes, { path: 'notfound', component: PageNotFoundComponent }, - { path: '**', redirectTo: '/welcome' } + { path: 'login-success', component: LoginSuccessComponent }, + { path: '**', redirectTo: '/welcome' }, + ]; export const routing = RouterModule.forRoot(appRoutes, { scrollPositionRestoration: 'enabled' }); -- GitLab From 62b1fc43a962124a63f9386706ecc0f24c958d83 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:30:17 +0100 Subject: [PATCH 02/11] added component to service oidc --- src/app/auth/auth.module.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/auth/auth.module.ts b/src/app/auth/auth.module.ts index 27bb76c9..cab76d65 100644 --- a/src/app/auth/auth.module.ts +++ b/src/app/auth/auth.module.ts @@ -5,6 +5,7 @@ import {AppConfigService} from '../service/appconfig.service'; import {AuthService} from './auth.service' import {AuthGuard} from './auth.guard' import {RoleGuard} from './role.guard'; +import { LoginSuccessComponent } from './login-success/login-success.component'; export const jwtOptionsFactory = (appConfig: AppConfigService) => ({ @@ -15,6 +16,9 @@ export const jwtOptionsFactory = (appConfig: AppConfigService) => ({ }); @NgModule({ + declarations: [ + LoginSuccessComponent + ], providers: [ AuthGuard, RoleGuard, -- GitLab From 7f86b2d52f246d1ad5f53faa5563fb758958bcb2 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:32:11 +0100 Subject: [PATCH 03/11] made method storeToken public access --- src/app/auth/auth.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/auth/auth.service.ts b/src/app/auth/auth.service.ts index 3b4e4b9b..ca9cd4ba 100644 --- a/src/app/auth/auth.service.ts +++ b/src/app/auth/auth.service.ts @@ -34,8 +34,8 @@ export class AuthService { private appConfig: AppConfigService, private jwtHelper: JwtHelperService) { } - - private storeToken(token: string): void { + //TODO make this static again and serive this feature in other way + public storeToken(token: string): void { localStorage.setItem(this.appConfig.config.tokenName, token); } -- GitLab From 9428e19d8968b5ee8ccb968bd207ac526fd15fa8 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:32:33 +0100 Subject: [PATCH 04/11] fixed path --- src/app/service/configuration.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/service/configuration.service.ts b/src/app/service/configuration.service.ts index 6e03d6f9..9a247125 100644 --- a/src/app/service/configuration.service.ts +++ b/src/app/service/configuration.service.ts @@ -14,7 +14,7 @@ export class ConfigurationService extends GenericDataService{ constructor(http: HttpClient, appConfig: AppConfigService) { super(http, appConfig); - this.uri = this.appConfig.getApiUrl() + '/configuration/' + this.uri = this.appConfig.getApiUrl() + '/configuration' } public getConfiguration(): Observable<Configuration> { -- GitLab From eec2bc018624b7056975f864a11d69536e319c34 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:32:41 +0100 Subject: [PATCH 05/11] fixed path --- src/app/service/domain.service.ts | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/app/service/domain.service.ts b/src/app/service/domain.service.ts index dfff8ef6..ead73271 100644 --- a/src/app/service/domain.service.ts +++ b/src/app/service/domain.service.ts @@ -24,7 +24,7 @@ export class DomainService extends GenericDataService { constructor(http: HttpClient, appConfig: AppConfigService) { super(http, appConfig); this.updateRequiredFlag = false; - this.url = this.appConfig.getApiUrl() + '/domains/'; + this.url = this.appConfig.getApiUrl() + '/domains'; } public getGlobalDomainId(): number { @@ -40,7 +40,7 @@ export class DomainService extends GenericDataService { } public getOne(domainId: number): Observable<Domain> { - return this.get<Domain>(this.url + domainId); + return this.get<Domain>(this.url + '/' + domainId); } public add(domain: Domain): Observable<Id> { @@ -48,19 +48,19 @@ export class DomainService extends GenericDataService { } public update(domain: Domain): Observable<any> { - return this.put<Domain, Id>(this.url + domain.id, domain); + return this.put<Domain, Id>(this.url + '/' + domain.id, domain); } public updateTechDetails(domain: Domain): Observable<any> { - return this.patch<Domain, Id>(this.url + domain.id, domain) + return this.patch<Domain, Id>(this.url + '/' + domain.id, domain) } public updateDcnConfigured(domain: Domain): Observable<any> { - return this.patch<Domain, Id>(this.url + domain.id + '/dcn?configured=' + domain.domainDcnDetails.dcnConfigured, null); + return this.patch<Domain, Id>(this.url + '/' + domain.id + '/dcn?configured=' + domain.domainDcnDetails.dcnConfigured, null); } public updateDomainState(domain: Domain): Observable<any> { - return this.patch<Domain, Id>(this.url + domain.id + '/state?active=' + !domain.active, null); + return this.patch<Domain, Id>(this.url + '/' + domain.id + '/state?active=' + !domain.active, null); } public remove(domainId: number, softRemove?: boolean): Observable<any> { @@ -68,15 +68,15 @@ export class DomainService extends GenericDataService { if (softRemove !== undefined) { params = params.append("softRemove", softRemove.toString()) } - return this.http.delete(this.url + domainId, {params}) + return this.http.delete(this.url + '/' + domainId, {params}) } public getMyDomains(): Observable<Domain[]> { - return this.get<Domain[]>(this.url + 'my'); + return this.get<Domain[]>(this.url + '/my'); } public getUsers(domainId: number): Observable<User[]> { - return this.get<User[]>(this.url + 'users'); + return this.get<User[]>(this.url + '/users'); } public setUpdateRequiredFlag(flag: boolean) { @@ -89,31 +89,31 @@ export class DomainService extends GenericDataService { // GROUPS public getAllDomainGroups(): Observable<DomainGroup[]> { - return this.get<DomainGroup[]>(this.url + 'group'); + return this.get<DomainGroup[]>(this.url + '/group'); } public getDomainGroup(domainGroupId: number): Observable<DomainGroup> { - return this.get<DomainGroup>(this.url + 'group/' + domainGroupId); + return this.get<DomainGroup>(this.url + '/group/' + domainGroupId); } public deleteDomainGroup(domainGroupId: number): Observable<void> { - return this.delete<void>(this.url + 'group/' + domainGroupId); + return this.delete<void>(this.url + '/group/' + domainGroupId); } public addDomainsToGroup(groupCodeName: string, domainIds: number[]): Observable<DomainGroup> { - return this.post(this.url + 'group/' + groupCodeName, domainIds); + return this.post(this.url + '/group/' + groupCodeName, domainIds); } public deleteDomainFromGroup(groupId: number, domainId: number): Observable<DomainGroup> { - return this.patch(this.url + 'group/' + groupId, domainId); + return this.patch(this.url + '/group/' + groupId, domainId); } public createDomainGroup(domainGroup: DomainGroup): Observable<Id> { - return this.post(this.url + 'group', domainGroup); + return this.post(this.url + '/group', domainGroup); } public updateDomainGroup(domainGroup: DomainGroup, id: number): Observable<Id> { - return this.put(this.url + 'group/' + id, domainGroup); + return this.put(this.url + '/group/' + id, domainGroup); } public updateDomainGroupManagers(managers: User[], id: number): Observable<DomainGroup> { @@ -121,18 +121,18 @@ export class DomainService extends GenericDataService { } public getAnnotations(): Observable<DomainAnnotation[]> { - return this.get<DomainAnnotation[]>(this.url + 'annotations') + return this.get<DomainAnnotation[]>(this.url + '/annotations') } public addAnnotations(annotation: KeyValue): Observable<void> { - return this.post(this.url + 'annotations', annotation) + return this.post(this.url + '/annotations', annotation) } - public deleteAnnotation(id: number) : Observable<void>{ - return this.delete(`${this.url}annotations/${id}`) + public deleteAnnotation(id: number) : Observable<void> { + return this.delete(`${this.url}/annotations/${id}`) } public updateAnnotation(annotation: DomainAnnotation): Observable<void> { - return this.put(`${this.url}annotations/${annotation.id}`, annotation) + return this.put(`${this.url}/annotations/${annotation.id}`, annotation) } } -- GitLab From 120c330f1e7abc182fbf5f85cbc65cfa2978f599 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:34:16 +0100 Subject: [PATCH 06/11] added service to oidc --- src/app/welcome/login/login.component.html | 7 +++++++ src/app/welcome/login/login.component.ts | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/app/welcome/login/login.component.html b/src/app/welcome/login/login.component.html index 27418cc9..7084ea8e 100644 --- a/src/app/welcome/login/login.component.html +++ b/src/app/welcome/login/login.component.html @@ -33,6 +33,13 @@ <img alt="sso" *ngIf="ssoLoading" src="data:"/> <div *ngIf="ssoError" class="alert alert-danger">{{ssoError}}</div> </div> +<div class="form-group"> + <button type="submit" (click)="triggerOIDC()" class="btn btn-primary btn-block"> + {{ 'LOGIN.LOGIN_WITH' | translate }} + </button> + <img alt="sso" *ngIf="ssoLoading" src="data:"/> + <div *ngIf="ssoError" class="alert alert-danger">{{ssoError}}</div> +</div> <div class="form-group" style="text-align: center"> <a (click)="resetPassword = !resetPassword">{{ 'RESET_PASSWORD.FORGOT_PASSWORD_BUTTON' | translate }}</a> </div> diff --git a/src/app/welcome/login/login.component.ts b/src/app/welcome/login/login.component.ts index f82e1de1..fd40d694 100644 --- a/src/app/welcome/login/login.component.ts +++ b/src/app/welcome/login/login.component.ts @@ -71,6 +71,10 @@ export class LoginComponent implements OnInit { ); } + public triggerOIDC() { + window.location.href = 'http://localhost:9000/oauth2/authorization/my-oidc'; + + } public checkSSO() { const params = this.router.parseUrl(this.router.url).queryParams; -- GitLab From f76065a5b1940679d9bf3eb698a404e574111eee Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:38:10 +0100 Subject: [PATCH 07/11] added new component to handle oidc token --- .../login-success/login-success.component.css | 0 .../login-success.component.html | 1 + .../login-success.component.spec.ts | 23 ++++++++++++++++ .../login-success/login-success.component.ts | 26 +++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 src/app/auth/login-success/login-success.component.css create mode 100644 src/app/auth/login-success/login-success.component.html create mode 100644 src/app/auth/login-success/login-success.component.spec.ts create mode 100644 src/app/auth/login-success/login-success.component.ts diff --git a/src/app/auth/login-success/login-success.component.css b/src/app/auth/login-success/login-success.component.css new file mode 100644 index 00000000..e69de29b diff --git a/src/app/auth/login-success/login-success.component.html b/src/app/auth/login-success/login-success.component.html new file mode 100644 index 00000000..bf2b4b51 --- /dev/null +++ b/src/app/auth/login-success/login-success.component.html @@ -0,0 +1 @@ +<p>login-success works!</p> diff --git a/src/app/auth/login-success/login-success.component.spec.ts b/src/app/auth/login-success/login-success.component.spec.ts new file mode 100644 index 00000000..7d0067d9 --- /dev/null +++ b/src/app/auth/login-success/login-success.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginSuccessComponent } from './login-success.component'; + +describe('LoginSuccessComponent', () => { + let component: LoginSuccessComponent; + let fixture: ComponentFixture<LoginSuccessComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LoginSuccessComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LoginSuccessComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/auth/login-success/login-success.component.ts b/src/app/auth/login-success/login-success.component.ts new file mode 100644 index 00000000..d84fe015 --- /dev/null +++ b/src/app/auth/login-success/login-success.component.ts @@ -0,0 +1,26 @@ +import {Component, OnInit} from '@angular/core'; +import {ActivatedRoute} from '@angular/router'; +import {AuthService} from '../auth.service'; + +@Component({ + selector: 'app-login-success', + templateUrl: './login-success.component.html', + styleUrls: ['./login-success.component.css'] +}) +export class LoginSuccessComponent implements OnInit { + constructor(private route: ActivatedRoute, + private authService: AuthService) { + } + + + ngOnInit(): void { + // Pobieranie tokena z parametrów URL + this.route.queryParams.subscribe(params => { + const token = params['token']; + const refreshToken = params['refresh_token']; + if (token) { + this.authService.storeToken(token); + } + }); + } +} -- GitLab From e1d76753a86c6dcd31969f5a2c7961b37982c23b Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Fri, 8 Nov 2024 12:43:47 +0100 Subject: [PATCH 08/11] new config value --- src/app/service/appconfig.service.ts | 56 ++++++++++++++---------- src/app/welcome/login/login.component.ts | 8 ++-- src/config.json | 1 + 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/app/service/appconfig.service.ts b/src/app/service/appconfig.service.ts index 46e77329..c9988bcc 100644 --- a/src/app/service/appconfig.service.ts +++ b/src/app/service/appconfig.service.ts @@ -1,5 +1,5 @@ -import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import {Injectable} from '@angular/core'; +import {HttpClient} from '@angular/common/http'; @Injectable({ @@ -10,7 +10,8 @@ export class AppConfigService { public jwtAllowedDomains: string[] = [] - constructor(private http: HttpClient) { } + constructor(private http: HttpClient) { + } public load() { return new Promise<void>((resolve) => { @@ -23,39 +24,46 @@ export class AppConfigService { }); } + public getOidcUrl(): string { + if (this.config == null) { + return 'http://localhost:9000/oauth2/authorization/my-oidc'; + } + return this.config.oidcUrl; + } + public getApiUrl(): string { - if (this.config == null) { - return 'http://localhost/api'; - } - return this.config.apiUrl; + if (this.config == null) { + return 'http://localhost/api'; + } + return this.config.apiUrl; } public getNmaasGlobalDomainId(): number { - if (this.config == null) { - return 0; - } - return this.config.nmaas.globalDomainId || 0; + if (this.config == null) { + return 0; + } + return this.config.nmaas.globalDomainId || 0; } public getHttpTimeout(): number { - if (this.config == null) { - return 10000; - } - return this.config.http.timeout || 10000; + if (this.config == null) { + return 10000; + } + return this.config.http.timeout || 10000; } public getShowGitInfo(): boolean { - if (this.config == null) { - return false; - } - return this.config.showGitInfo || false; + if (this.config == null) { + return false; + } + return this.config.showGitInfo || false; } public getShowChangelog(): boolean { - if (this.config == null) { - return false; - } - return this.config.showChangelog || false; + if (this.config == null) { + return false; + } + return this.config.showChangelog || false; } public getSiteKey(): string { @@ -70,6 +78,6 @@ export class AppConfigService { } public getLandingProfile(): string { - return this.config.landing || '' + return this.config.landing || '' } } diff --git a/src/app/welcome/login/login.component.ts b/src/app/welcome/login/login.component.ts index fd40d694..dbfcc781 100644 --- a/src/app/welcome/login/login.component.ts +++ b/src/app/welcome/login/login.component.ts @@ -2,7 +2,7 @@ import {Component, OnInit, ViewChild, ViewEncapsulation} from '@angular/core'; import {Router} from '@angular/router'; import {AuthService} from '../../auth/auth.service'; -import {ConfigurationService, UserService} from '../../service'; +import {AppConfigService, ConfigurationService, UserService} from '../../service'; import {Configuration} from '../../model/configuration'; import {SSOService} from '../../service/sso.service'; import {SSOConfig} from '../../model/sso'; @@ -37,7 +37,8 @@ export class LoginComponent implements OnInit { private ssoService: SSOService, private fb: UntypedFormBuilder, private userService: UserService, - private translate: TranslateService) { + private translate: TranslateService, + private appConfig: AppConfigService) { this.resetPasswordForm = fb.group({ email: ['', [Validators.required, Validators.email]] }); @@ -72,8 +73,7 @@ export class LoginComponent implements OnInit { } public triggerOIDC() { - window.location.href = 'http://localhost:9000/oauth2/authorization/my-oidc'; - + window.location.href = this.appConfig.getOidcUrl(); } public checkSSO() { diff --git a/src/config.json b/src/config.json index 3b4e008b..cf304ab5 100644 --- a/src/config.json +++ b/src/config.json @@ -1,5 +1,6 @@ { "apiUrl": "http://localhost:9000/api", + "oidcUrl": "http://localhost:9000/oauth2/authorization/my-oidc", "tokenName": "token", "nmaas": { "globalDomainId": 1 -- GitLab From 10b391903b9733d037821cd3ee9082d0db603493 Mon Sep 17 00:00:00 2001 From: pkazimierowski <pkazimierowski@man.poznan.pl> Date: Thu, 21 Nov 2024 13:11:44 +0100 Subject: [PATCH 09/11] fix domain users url --- src/app/service/user.service.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/app/service/user.service.ts b/src/app/service/user.service.ts index 66db21d2..bfdf43c7 100644 --- a/src/app/service/user.service.ts +++ b/src/app/service/user.service.ts @@ -24,15 +24,15 @@ export class UserService extends GenericDataService { } public getOne(userId: number, domainId?: number): Observable<User> { - return this.get<User>((domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + userId); + return this.get<User>((domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + '/' + userId); } public deleteOne(userId: number, domainId?: number): Observable<any> { - return this.delete<any>((domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + userId); + return this.delete<any>((domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + '/' + userId); } public getRoles(userId: number, domainId?: number): Observable<UserRole[]> { - return this.get<UserRole[]>((domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + userId + '/roles'); + return this.get<UserRole[]>((domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + '/' + userId + '/roles'); } public updateUser(userId: number, user: User): Observable<any> { @@ -53,7 +53,7 @@ export class UserService extends GenericDataService { } public addRole(userId: number, role: Role, domainId?: number): Observable<any> { - const url: string = (domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + userId + '/roles'; + const url: string = (domainId === undefined ? this.getUsersUrl() : this.getDomainUsersUrl(domainId)) + '/' + userId + '/roles'; const targetDomainId: number = (domainId === undefined ? this.appConfig.getNmaasGlobalDomainId() : domainId); return this.post<UserRole, UserRole>(url, new UserRole(targetDomainId, undefined, role)); @@ -88,7 +88,7 @@ export class UserService extends GenericDataService { } protected getDomainUsersUrl(domainId: number): string { - return this.appConfig.getApiUrl() + '/domains/' + domainId + '/users/'; + return this.appConfig.getApiUrl() + '/domains/' + domainId + '/users'; } public getDomainUsersAsAdmin(domainId: number): Observable<User[]> { -- GitLab From 1071d833c71ddc42041ee69f70158bfd75925dde Mon Sep 17 00:00:00 2001 From: kbeyro <121854496+kbeyro@users.noreply.github.com> Date: Fri, 29 Nov 2024 09:41:20 +0100 Subject: [PATCH 10/11] fix test with logins --- .../login-success.component.spec.ts | 15 ++++++++- src/app/shared/test-utils.ts | 31 +++++++++++++++++++ src/app/welcome/login/login.component.spec.ts | 2 ++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/app/shared/test-utils.ts diff --git a/src/app/auth/login-success/login-success.component.spec.ts b/src/app/auth/login-success/login-success.component.spec.ts index 7d0067d9..c2a446bb 100644 --- a/src/app/auth/login-success/login-success.component.spec.ts +++ b/src/app/auth/login-success/login-success.component.spec.ts @@ -1,14 +1,27 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { LoginSuccessComponent } from './login-success.component'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { ActivatedRouteStub } from '../../shared/test-utils'; +import { AuthService } from '../auth.service'; describe('LoginSuccessComponent', () => { let component: LoginSuccessComponent; let fixture: ComponentFixture<LoginSuccessComponent>; + const authUserSpy = jasmine.createSpyObj('AuthService', ['storeToken']); + beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ LoginSuccessComponent ] + declarations: [ LoginSuccessComponent ], + imports: [ + RouterTestingModule + ], + providers: [ + {provide: ActivatedRoute, useValue: new ActivatedRouteStub({token: '123'})}, + {provide: AuthService, useValue: authUserSpy}, + ] }) .compileComponents(); diff --git a/src/app/shared/test-utils.ts b/src/app/shared/test-utils.ts new file mode 100644 index 00000000..41f9b191 --- /dev/null +++ b/src/app/shared/test-utils.ts @@ -0,0 +1,31 @@ +import { convertToParamMap, ParamMap, Params } from "@angular/router"; +import { Observable, ReplaySubject } from "rxjs"; + +export class ActivatedRouteStub { + // Use a ReplaySubject to share previous values with subscribers + // and pump new values into the `paramMap` observable + private readonly subject = new ReplaySubject<ParamMap>(); + private readonly subjectQuery = new ReplaySubject<ParamMap>(); + snapshot = {}; + + constructor(initialParams?: Params, initialQueryParams?: Params) { + this.setParamMap(initialParams); + } + + /** The mock paramMap observable */ + readonly paramMap = this.subject.asObservable(); + readonly queryParamMap = this.subjectQuery.asObservable(); + + /** Set the paramMap observables's next value */ + setParamMap(params?: Params) { + this.subject.next(convertToParamMap(params)); + } + + setQueryParamMap(params?: Params) { + this.subjectQuery.next(convertToParamMap(params)); + } + + get queryParams() : Observable<ParamMap> { + return this.subject.asObservable(); + } + } \ No newline at end of file diff --git a/src/app/welcome/login/login.component.spec.ts b/src/app/welcome/login/login.component.spec.ts index 0fd649ba..35e39bc6 100644 --- a/src/app/welcome/login/login.component.spec.ts +++ b/src/app/welcome/login/login.component.spec.ts @@ -10,6 +10,7 @@ import {ConfigurationService, UserService} from '../../service'; import {SSOService} from '../../service/sso.service'; import createSpyObj = jasmine.createSpyObj; import {of} from 'rxjs'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; describe('Component: Login', () => { @@ -28,6 +29,7 @@ describe('Component: Login', () => { FormsModule, ReactiveFormsModule, RouterTestingModule, + HttpClientTestingModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, -- GitLab From 7a061b2c3083696a84768066dccac483da1d2775 Mon Sep 17 00:00:00 2001 From: llopat <llopat@man.poznan.pl> Date: Fri, 29 Nov 2024 09:49:22 +0100 Subject: [PATCH 11/11] Enabled sonar scans for release branches --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9f12bada..f5973547 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,6 +20,7 @@ sonar: image: trion/ng-cli:15.2.10 only: - develop + - /^release/ script: - npm ci --force - npm run sonar -- -Dsonar.host.url=${SONAR_HOST} -Dsonar.projectKey=${SONAR_PROJECT_KEY} -Dsonar.projectName=${SONAR_PROJECT_NAME} -Dsonar.branch.name=develop -Dsonar.login=${SONAR_LOGIN_TOKEN} -- GitLab