import { Injectable } from '@angular/core'; import { GCMockModule } from '@core/mocks/gc-module.mock'; import { It, Spec } from '@yourcause/test-decorators'; import { DescribeAngularService } from '@yourcause/test-decorators/angular'; import { expect } from 'chai'; import { PortalDeterminationService } from './portal-determination.service'; import { SSOService } from './sso.service'; @Injectable({ providedIn: 'root' }) @DescribeAngularService(SSOService, { imports: [ GCMockModule ], providers: [ PortalDeterminationService ] }) export class SSOServiceSpec implements Spec { private urlToHashMap (url: string): { [x: string]: string } { return url.split('?')[1].split('&') .reduce((map, keyValue) => ({ ...map, [keyValue.split('=')[0]]: keyValue.split('=')[1] }), {}); } @It 'should be able to generate a url' (ssoService: SSOService) { const url = ssoService.generateUrl('1', '2'); expect(url).to.be.a('string'); } @It 'should be able to generate a unique state and nonce' (ssoService: SSOService) { const url1 = ssoService.generateUrl('1', '2'); const url2 = ssoService.generateUrl('1', '2'); const url1Hash = this.urlToHashMap(url1); const url2Hash = this.urlToHashMap(url2); expect(url1).not.to.equal(url2); expect(url1Hash.nonce).not.to.equal(url2Hash.nonce); expect(url1Hash.state).not.to.equal(url2Hash.state); } }