diff --git a/src/app/shared/log-in/log-in.component.spec.ts b/src/app/shared/log-in/log-in.component.spec.ts index 38173a6a8b..6992afa5ec 100644 --- a/src/app/shared/log-in/log-in.component.spec.ts +++ b/src/app/shared/log-in/log-in.component.spec.ts @@ -118,6 +118,23 @@ describe('LogInComponent', () => { expect(authService.setRedirectUrl).toHaveBeenCalled(); }); + it('should not set the redirect url because one already exists', () => { + fixture.detectChanges(); + + const authService: AuthService = TestBed.get(AuthService); + authService.setRedirectUrl('/submit') + + // set FormControl values + component.form.controls.email.setValue('user'); + component.form.controls.password.setValue('password'); + + spyOn(authService, 'setRedirectUrl'); + + component.submit(); + + expect(authService.setRedirectUrl).not.toHaveBeenCalled(); + }); + }); /** diff --git a/src/app/shared/log-in/log-in.component.ts b/src/app/shared/log-in/log-in.component.ts index f6df9ee389..13fa73bc4e 100644 --- a/src/app/shared/log-in/log-in.component.ts +++ b/src/app/shared/log-in/log-in.component.ts @@ -1,4 +1,4 @@ -import { filter, map, takeWhile } from 'rxjs/operators'; +import {filter, map, take, takeWhile, tap} from 'rxjs/operators'; import { Component, OnDestroy, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; @@ -17,7 +17,7 @@ import { } from '../../core/auth/selectors'; import { CoreState } from '../../core/core.reducers'; -import { isNotEmpty } from '../empty.util'; +import {isEmpty, isNotEmpty} from '../empty.util'; import { fadeOut } from '../animations/fade'; import { AuthService } from '../../core/auth/auth.service'; import {Router} from '@angular/router'; @@ -185,13 +185,17 @@ export class LogInComponent implements OnDestroy, OnInit { email.trim(); password.trim(); - // add the current url to store for later redirect. - this.authService.setRedirectUrl(this.router.url); - - // dispatch AuthenticationAction - this.store.dispatch(new AuthenticateAction(email, password)); - - // clear form - this.form.reset(); + this.authService.getRedirectUrl().pipe( + take(1)). + subscribe((r) => { + // Set the redirect url if none exists. + if (isEmpty(r)) { + this.authService.setRedirectUrl(this.router.url) + } + // dispatch AuthenticationAction + this.store.dispatch(new AuthenticateAction(email, password)); + // clear form + this.form.reset(); + }); } } diff --git a/src/app/shared/testing/auth-service-stub.ts b/src/app/shared/testing/auth-service-stub.ts index a65923dcab..a6d24d5c8b 100644 --- a/src/app/shared/testing/auth-service-stub.ts +++ b/src/app/shared/testing/auth-service-stub.ts @@ -10,6 +10,7 @@ export class AuthServiceStub { token: AuthTokenInfo = new AuthTokenInfo('token_test'); private _tokenExpired = false; + private redirectUrl; constructor() { this.token.expires = Date.now() + (1000 * 60 * 60); @@ -88,7 +89,11 @@ export class AuthServiceStub { } setRedirectUrl(url: string) { - return; + this.redirectUrl = url; + } + + getRedirectUrl() { + return observableOf(this.redirectUrl); } public storeToken(token: AuthTokenInfo) {