1
1
import { ComponentFixture , TestBed } from '@angular/core/testing' ;
2
2
3
3
import { TcrRoleComponent } from './tcr-role.component' ;
4
- import { HttpClientTestingModule } from "@angular/common/http/testing" ;
5
- import { Observable , Subject } from "rxjs" ;
4
+ import { Observable , of } from "rxjs" ;
6
5
import { TcrMessage } from "../../interfaces/tcr-message" ;
7
6
import { TcrRolesService } from "../../services/trc-roles.service" ;
8
7
import { TcrRole } from "../../interfaces/tcr-role" ;
8
+ import { By } from "@angular/platform-browser" ;
9
9
10
10
class TcrRolesServiceFake implements Partial < TcrRolesService > {
11
- webSocket$ : Subject < TcrMessage > = new Subject < TcrMessage > ( ) ;
11
+ constructor ( public message$ = new Observable < TcrMessage > ( ) ) {
12
+ }
12
13
13
- getRole ( name : string ) : Observable < TcrRole > {
14
- return new Observable < TcrRole > ( ) ;
14
+ getRole ( ) : Observable < TcrRole > {
15
+ return of ( { name : "" , description : "" , active : false } ) ;
15
16
}
16
17
}
17
18
@@ -22,20 +23,93 @@ describe('TcrRoleComponent', () => {
22
23
23
24
beforeEach ( async ( ) => {
24
25
await TestBed . configureTestingModule ( {
25
- imports : [ TcrRoleComponent , HttpClientTestingModule ] ,
26
+ imports : [ TcrRoleComponent ] ,
26
27
providers : [
27
28
{ provide : TcrRolesService , useClass : TcrRolesServiceFake } ,
28
29
]
29
30
} ) . compileComponents ( ) ;
30
31
32
+ serviceFake = TestBed . inject ( TcrRolesService ) ;
31
33
fixture = TestBed . createComponent ( TcrRoleComponent ) ;
32
34
component = fixture . componentInstance ;
33
- serviceFake = TestBed . inject ( TcrRolesService ) ;
34
35
fixture . detectChanges ( ) ;
35
36
} ) ;
36
37
37
- it ( 'should create' , ( ) => {
38
- expect ( component ) . toBeTruthy ( ) ;
38
+ describe ( 'component instance' , ( ) => {
39
+ it ( 'should be created' , ( ) => {
40
+ expect ( component ) . toBeTruthy ( ) ;
41
+ } ) ;
42
+ } ) ;
43
+
44
+ describe ( 'component initialization' , ( ) => {
45
+ const testCases = [
46
+ {
47
+ name : "driver" ,
48
+ description : "driver role" ,
49
+ active : true ,
50
+ componentClass : 'driver-on' ,
51
+ iconClass : 'fa-keyboard-o'
52
+ } ,
53
+ {
54
+ name : "driver" ,
55
+ description : "driver role" ,
56
+ active : false ,
57
+ componentClass : 'role-off' ,
58
+ iconClass : 'fa-keyboard-o'
59
+ } ,
60
+ {
61
+ name : "navigator" ,
62
+ description : "navigator role" ,
63
+ active : true ,
64
+ componentClass : 'navigator-on' ,
65
+ iconClass : 'fa-compass'
66
+ } ,
67
+ {
68
+ name : "navigator" ,
69
+ description : "navigator role" ,
70
+ active : false ,
71
+ componentClass : 'role-off' ,
72
+ iconClass : 'fa-compass'
73
+ }
74
+ ] ;
75
+
76
+ testCases . forEach ( testCase => {
77
+ it ( `should work with ${ testCase . name } role ${ testCase . active ? "on" : "off" } ` , ( done ) => {
78
+ const role : TcrRole = {
79
+ name : testCase . name ,
80
+ description : testCase . description ,
81
+ active : testCase . active ,
82
+ } ;
83
+
84
+ // Have the service fake's getRole method return the role
85
+ serviceFake . getRole = ( ) => of ( role ) ;
86
+ fixture = TestBed . createComponent ( TcrRoleComponent ) ;
87
+ component = fixture . componentInstance ;
88
+ fixture . detectChanges ( ) ;
89
+ done ( )
90
+
91
+ // Verify that the component's role attribute is set correctly
92
+ expect ( component . role ) . toEqual ( role ) ;
93
+
94
+ // Verify that the component is rendered with the expected CSS class
95
+ const componentElement = fixture . debugElement . query (
96
+ By . css ( `[data-testid="role-component"]` ) ) ;
97
+ expect ( componentElement ) . toBeTruthy ( ) ;
98
+ expect ( componentElement . nativeElement . classList ) . toContain ( testCase . componentClass ) ;
99
+
100
+ // Verify that the right role icon is rendered
101
+ const iconElement = fixture . debugElement . query (
102
+ By . css ( `[data-testid="role-icon"]` ) ) ;
103
+ expect ( iconElement ) . toBeTruthy ( ) ;
104
+ expect ( iconElement . nativeElement . classList ) . toContain ( testCase . iconClass ) ;
105
+
106
+ // Verify that the role label is rendered
107
+ const labelElement = fixture . debugElement . query (
108
+ By . css ( `[data-testid="role-label"]` ) ) ;
109
+ expect ( labelElement ) . toBeTruthy ( ) ;
110
+ expect ( labelElement . nativeElement . textContent ) . toEqual ( role . description ) ;
111
+ } ) ;
112
+ } ) ;
39
113
} ) ;
40
114
} ) ;
41
115
0 commit comments