diff --git a/src/app/auth/authentication.service.spec.ts b/src/app/auth/authentication.service.spec.ts index 6541820..d729473 100644 --- a/src/app/auth/authentication.service.spec.ts +++ b/src/app/auth/authentication.service.spec.ts @@ -171,4 +171,57 @@ describe('Service: Authentication service', () => { expect(localStorage.getItem('openshift-v3_token')).toBeNull(); }); })); + + it('Github token processing', (done) => { + // given + mockService.connections.subscribe((connection: any) => { + connection.mockRespond(new Response( + new ResponseOptions({ + body: tokenJson, + status: 201 + }) + )); + }); + spyOn(authenticationService, 'setupRefreshTimer'); + + broadcaster.on('loggedin').subscribe((data: number) => { + let token = JSON.parse(tokenJson); + authenticationService.gitHubToken.subscribe(output => { + // then + expect(output == token.access_token); + expect(localStorage.getItem('github_token')).toBe(token.access_token); + authenticationService.logout(); + done(); + }); + }); + + authenticationService.logIn(tokenJson); + }); + + it('Github token clear', (done) => { + // given + mockService.connections.subscribe((connection: any) => { + connection.mockRespond(new Response( + new ResponseOptions({ + body: tokenJson, + status: 201 + }) + )); + }); + spyOn(authenticationService, 'setupRefreshTimer'); + + broadcaster.on('loggedin').subscribe((data: number) => { + expect(localStorage.getItem('github_token')).not.toBeNull(); + authenticationService.clearGitHubToken(); + }); + authenticationService.logIn(tokenJson); + + authenticationService.gitHubToken.subscribe(output => { + // token should be empty after token is cleared + expect(output).toBe(''); + expect(localStorage.getItem('github_token')).toBeNull(); + authenticationService.logout(); + done(); + }); + }); }); diff --git a/src/app/auth/authentication.service.ts b/src/app/auth/authentication.service.ts index cafb77d..d146806 100644 --- a/src/app/auth/authentication.service.ts +++ b/src/app/auth/authentication.service.ts @@ -150,6 +150,11 @@ export class AuthenticationService { return token; } + clearGitHubToken(): void { + localStorage.removeItem(this.github + '_token'); + this.gitHubToken = Observable.of(''); + } + private createFederatedToken(broker: string, processToken: ProcessTokenResponse): Observable { let res = this.refreshTokens.switchMap(token => { let headers = new Headers({ 'Content-Type': 'application/json' }); @@ -167,7 +172,13 @@ export class AuthenticationService { } return Observable.of({} as Token); }) - .do(token => localStorage.setItem(broker + '_token', token.access_token)) + .do(token => { + if (token.access_token) { + localStorage.setItem(broker + '_token', token.access_token); + } else { + localStorage.removeItem(broker + '_token'); + } + }) .map(t => t.access_token); }) .publishReplay(1);