Skip to content

Commit d0911f4

Browse files
author
Rodrigo Lins
committed
feat TTA-83: frontend admin validation
1 parent 55d9da6 commit d0911f4

20 files changed

+33286
-374
lines changed

package-lock.json

Lines changed: 33009 additions & 207 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"@angular/platform-browser": "10.2.2",
2626
"@angular/platform-browser-dynamic": "10.2.2",
2727
"@angular/router": "10.2.2",
28+
"@auth0/angular-jwt": "^5.0.2",
2829
"@azure/app-configuration": "1.1.0",
2930
"@azure/identity": "1.1.0",
3031
"@ng-select/ng-select": "7.2.0",

src/app/guards/login-guard/login.guard.spec.ts

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { LoginGuard } from './login.guard';
77
import { LoginService } from '../../modules/login/services/login.service';
88
import { HttpClientTestingModule } from '@angular/common/http/testing';
99
import { SocialAuthService } from 'angularx-social-login';
10+
import { of } from 'rxjs';
1011

1112

1213
describe('LoginGuard', () => {
@@ -15,13 +16,13 @@ describe('LoginGuard', () => {
1516
let azureAdB2CService: AzureAdB2CService;
1617
const azureAdB2CServiceStub = {
1718
isLogin() {
18-
return true;
19+
return of(true);
1920
}
2021
};
2122
let loginService: LoginService;
2223
const loginServiceStub = {
2324
isLogin() {
24-
return true;
25+
return of(true);
2526
}
2627
};
2728
const socialAuthServiceStub = jasmine.createSpyObj('SocialAuthService', ['']);
@@ -45,37 +46,41 @@ describe('LoginGuard', () => {
4546

4647
it('can activate the route when user is logged-in on Production', () => {
4748
loginGuard.isProduction = true;
48-
spyOn(azureAdB2CService, 'isLogin').and.returnValue(true);
49-
const canActivate = loginGuard.canActivate();
49+
spyOn(azureAdB2CService, 'isLogin').and.returnValue(of(true));
50+
loginGuard.canActivate().subscribe(isLogin => {
51+
expect(isLogin).toEqual(true);
52+
});
5053
expect(azureAdB2CService.isLogin).toHaveBeenCalled();
51-
expect(canActivate).toEqual(true);
5254
});
5355

5456
it('can activate the route when user is logged-in Locally', () => {
5557
loginGuard.isProduction = false;
56-
spyOn(loginService, 'isLogin').and.returnValue(true);
57-
const canActivate = loginGuard.canActivate();
58+
spyOn(loginService, 'isLogin').and.returnValue(of(true));
59+
loginGuard.canActivate().subscribe(isLogin => {
60+
expect(isLogin).toEqual(true);
61+
});
5862
expect(loginService.isLogin).toHaveBeenCalled();
59-
expect(canActivate).toEqual(true);
6063
});
6164

6265
it('can not active the route and is redirected to login if user is not logged-in on Production', inject([Router], (router: Router) => {
6366
loginGuard.isProduction = true;
64-
spyOn(azureAdB2CService, 'isLogin').and.returnValue(false);
67+
spyOn(azureAdB2CService, 'isLogin').and.returnValue(of(false));
6568
spyOn(router, 'navigate').and.stub();
66-
const canActivate = loginGuard.canActivate();
69+
loginGuard.canActivate().subscribe(isLogin => {
70+
expect(isLogin).toEqual(false);
71+
});
6772
expect(azureAdB2CService.isLogin).toHaveBeenCalled();
68-
expect(canActivate).toEqual(false);
6973
expect(router.navigate).toHaveBeenCalledWith(['login']);
7074
}));
7175

7276
it('can not active the route and is redirected to login if user is not logged-in Locally', inject([Router], (router: Router) => {
7377
loginGuard.isProduction = false;
74-
spyOn(loginService, 'isLogin').and.returnValue(false);
78+
spyOn(loginService, 'isLogin').and.returnValue(of(false));
7579
spyOn(router, 'navigate').and.stub();
76-
const canActivate = loginGuard.canActivate();
80+
loginGuard.canActivate().subscribe(isLogin => {
81+
expect(isLogin).toEqual(false);
82+
});
7783
expect(loginService.isLogin).toHaveBeenCalled();
78-
expect(canActivate).toEqual(false);
7984
expect(router.navigate).toHaveBeenCalledWith(['login']);
8085
}));
8186

src/app/guards/login-guard/login.guard.ts

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { Router, CanActivate } from '@angular/router';
33
import { AzureAdB2CService } from '../../modules/login/services/azure.ad.b2c.service';
44
import { LoginService } from '../../modules/login/services/login.service';
55
import { environment } from 'src/environments/environment';
6+
import { of } from 'rxjs';
7+
import { map } from 'rxjs/operators';
68

79
@Injectable({
810
providedIn: 'root',
@@ -17,21 +19,27 @@ export class LoginGuard implements CanActivate {
1719

1820
canActivate() {
1921
if (this.isProduction) {
20-
if (this.azureAdB2CService.isLogin()) {
21-
this.azureAdB2CService.setCookies();
22-
return true;
23-
} else {
24-
this.router.navigate(['login']);
25-
return false;
26-
}
22+
return this.azureAdB2CService.isLogin().pipe(
23+
map(isLogin => {
24+
if (!isLogin) {
25+
this.router.navigate(['login']);
26+
return false;
27+
}
28+
this.azureAdB2CService.setCookies();
29+
return true;
30+
})
31+
);
2732
} else {
28-
if (this.loginService.isLogin()) {
29-
this.loginService.setCookies();
30-
return true;
31-
} else {
32-
this.router.navigate(['login']);
33-
return false;
34-
}
33+
return this.loginService.isLogin().pipe(
34+
map(isLogin => {
35+
if (!isLogin) {
36+
this.router.navigate(['login']);
37+
return false;
38+
}
39+
this.loginService.setCookies();
40+
return true;
41+
})
42+
);
3543
}
3644
}
3745
}

src/app/modules/activities-management/store/activity-management.selectors.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ describe('ActivityManagement Selectors', () => {
4242
description: 'Some description'
4343
},
4444
];
45-
45+
4646
const activitiesOrdered = [
4747
{
4848
id: '002',

src/app/modules/login/login.component.spec.ts

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('LoginComponent', () => {
1818

1919
const azureAdB2CServiceStub = {
2020
isLogin() {
21-
return true;
21+
return of(true);
2222
},
2323
signIn() {
2424
return of();
@@ -29,7 +29,7 @@ describe('LoginComponent', () => {
2929

3030
const loginServiceStub = {
3131
isLogin() {
32-
return true;
32+
return of(true);
3333
},
3434
signIn() {
3535
return of();
@@ -86,47 +86,54 @@ describe('LoginComponent', () => {
8686
});
8787

8888
it('should sign up or login with google if is not logged-in into the app on Production', inject([Router], (router: Router) => {
89-
spyOn(azureAdB2CService, 'isLogin').and.returnValue(false);
89+
spyOn(azureAdB2CService, 'isLogin').and.returnValue(of(false));
9090
spyOn(azureAdB2CService, 'setCookies').and.returnValue();
9191
spyOn(azureAdB2CService, 'signIn').and.returnValue(of(() => {}));
9292
spyOn(featureToggleCookiesService, 'setCookies').and.returnValue(featureToggleCookiesService.setCookies());
9393

94-
component.login();
95-
96-
expect(azureAdB2CService.signIn).toHaveBeenCalled();
97-
expect(azureAdB2CService.setCookies).toHaveBeenCalled();
98-
expect(featureToggleCookiesService.setCookies).toHaveBeenCalled();
94+
component.login().toPromise()
95+
.then(result => {
96+
expect(azureAdB2CService.signIn).toHaveBeenCalled();
97+
expect(azureAdB2CService.setCookies).toHaveBeenCalled();
98+
expect(featureToggleCookiesService.setCookies).toHaveBeenCalled();
99+
});
99100
}));
100101

101102
it('should sign up or login with google if is not logged-in into the app Locally', inject([Router], (router: Router) => {
102-
spyOn(loginService, 'isLogin').and.returnValue(false);
103+
spyOn(loginService, 'isLogin').and.returnValue(of(false));
103104
spyOn(loginService, 'setLocalStorage').and.returnValue();
104105
spyOn(loginService, 'getUser').and.returnValue(of(() => {}));
105106
spyOn(loginService, 'setCookies').and.returnValue();
106107
spyOn(loginService, 'signIn').and.returnValue();
107108
spyOn(featureToggleCookiesService, 'setCookies').and.returnValue(featureToggleCookiesService.setCookies());
108109

109110
component.ngOnInit();
110-
component.loginWithGoogle();
111+
component.loginWithGoogle().toPromise()
112+
.then(result => {
113+
expect(loginService.signIn).toHaveBeenCalled();
114+
expect(loginService.setCookies).toHaveBeenCalled();
115+
expect(featureToggleCookiesService.setCookies).toHaveBeenCalled();
116+
});
111117

112-
expect(loginService.signIn).toHaveBeenCalled();
113-
expect(loginService.setCookies).toHaveBeenCalled();
114-
expect(featureToggleCookiesService.setCookies).toHaveBeenCalled();
115118
}));
116119

117120
it('should not sign-up or login with google if is already logged-in into the app on Production', inject([Router], (router: Router) => {
118-
spyOn(azureAdB2CService, 'isLogin').and.returnValue(true);
121+
spyOn(azureAdB2CService, 'isLogin').and.returnValue(of(true));
119122
spyOn(router, 'navigate').and.stub();
120-
component.login();
121-
expect(azureAdB2CService.isLogin).toHaveBeenCalled();
122-
expect(router.navigate).toHaveBeenCalledWith(['']);
123+
component.login().toPromise()
124+
.then(result => {
125+
expect(azureAdB2CService.isLogin).toHaveBeenCalled();
126+
expect(router.navigate).toHaveBeenCalledWith(['']);
127+
});
123128
}));
124129

125130
it('should not sign-up or login with google if is already logged-in into the app Locally', inject([Router], (router: Router) => {
126-
spyOn(loginService, 'isLogin').and.returnValue(true);
131+
spyOn(loginService, 'isLogin').and.returnValue(of(true));
127132
spyOn(router, 'navigate').and.stub();
128-
component.loginWithGoogle();
129-
expect(loginService.isLogin).toHaveBeenCalled();
130-
expect(router.navigate).toHaveBeenCalledWith(['']);
133+
component.loginWithGoogle().toPromise()
134+
.then(result => {
135+
expect(loginService.isLogin).toHaveBeenCalled();
136+
expect(router.navigate).toHaveBeenCalledWith(['']);
137+
});
131138
}));
132139
});

src/app/modules/login/login.component.ts

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { FeatureToggleCookiesService } from '../shared/feature-toggles/feature-t
66
import { SocialAuthService, SocialUser } from 'angularx-social-login';
77
import { environment } from 'src/environments/environment';
88
import { LoginService } from './services/login.service';
9+
import { Observable } from 'rxjs';
10+
import { map } from 'rxjs/operators';
911
@Component({
1012
selector: 'app-login',
1113
templateUrl: './login.component.html',
@@ -30,29 +32,40 @@ export class LoginComponent implements OnInit {
3032
this.loginService.setLocalStorage('idToken', user.idToken);
3133
this.loginService.getUser(user.idToken).subscribe((response) => {
3234
this.loginService.setCookies();
33-
this.loginService.setLocalStorage('user2', JSON.stringify(response));
35+
const tokenObject = JSON.stringify(response);
36+
const tokenJson = JSON.parse(tokenObject);
37+
this.loginService.setLocalStorage('user', tokenJson.token);
3438
this.router.navigate(['']);
3539
});
3640
}
3741
});
3842
}
3943

40-
login(): void {
41-
if (this.azureAdB2CService.isLogin()) {
42-
this.router.navigate(['']);
43-
} else {
44-
this.azureAdB2CService.signIn().subscribe(() => {
45-
this.featureToggleCookiesService.setCookies();
46-
this.azureAdB2CService.setCookies();
47-
this.router.navigate(['']);
48-
});
49-
}
44+
login() {
45+
return this.azureAdB2CService.isLogin().pipe(
46+
map(isLogin => {
47+
if (isLogin) {
48+
this.router.navigate(['']);
49+
} else {
50+
this.azureAdB2CService.signIn().subscribe(() => {
51+
this.featureToggleCookiesService.setCookies();
52+
this.azureAdB2CService.setCookies();
53+
this.router.navigate(['']);
54+
});
55+
}
56+
})
57+
);
5058
}
59+
5160
loginWithGoogle() {
52-
if (this.loginService.isLogin()) {
53-
this.router.navigate(['']);
54-
} else {
55-
this.loginService.signIn();
56-
}
61+
return this.loginService.isLogin().pipe(
62+
map(isLogin => {
63+
if (isLogin) {
64+
this.router.navigate(['']);
65+
} else {
66+
this.loginService.signIn();
67+
}
68+
})
69+
);
5770
}
5871
}

0 commit comments

Comments
 (0)