1
1
import { Component } from '@angular/core' ;
2
2
import { TestBed } from '@angular/core/testing' ;
3
- import { Router , RouterOutlet , Routes } from '@angular/router' ;
3
+ import { Route , Router , RouterOutlet , Routes } from '@angular/router' ;
4
4
import { RouterTestingModule } from '@angular/router/testing' ;
5
5
import { firstValueFrom } from 'rxjs' ;
6
6
import { RouterStore } from '../router-store' ;
@@ -21,7 +21,14 @@ class DummyAppComponent {}
21
21
class DummyLoginComponent { }
22
22
23
23
describe ( `${ GlobalRouterStore . name } selectors` , ( ) => {
24
- beforeEach ( async ( ) => {
24
+ async function setup ( {
25
+ assertions = 1 ,
26
+ title,
27
+ } : {
28
+ readonly assertions ?: number ;
29
+ readonly title ?: Route [ 'title' ] ;
30
+ } = { } ) {
31
+ expect . assertions ( assertions ) ;
25
32
const routes : Routes = [
26
33
{
27
34
path : 'login' ,
@@ -30,6 +37,7 @@ describe(`${GlobalRouterStore.name} selectors`, () => {
30
37
path : ':id' ,
31
38
component : DummyLoginComponent ,
32
39
data : { testData : 'test-data' } ,
40
+ title,
33
41
} ,
34
42
] ,
35
43
} ,
@@ -43,102 +51,127 @@ describe(`${GlobalRouterStore.name} selectors`, () => {
43
51
const rootFixture = TestBed . createComponent ( DummyAppComponent ) ;
44
52
rootFixture . autoDetectChanges ( true ) ;
45
53
46
- router = TestBed . inject ( Router ) ;
47
- store = TestBed . inject ( RouterStore ) ;
48
- } ) ;
54
+ const router = TestBed . inject ( Router ) ;
55
+ const routerStore = TestBed . inject ( RouterStore ) ;
56
+
57
+ await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
49
58
50
- let router : Router ;
51
- let store : RouterStore ;
59
+ return {
60
+ routerStore,
61
+ } ;
62
+ }
52
63
53
64
it ( 'exposes a selector for the current route' , async ( ) => {
54
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
65
+ const { routerStore } = await setup ( {
66
+ title : 'Static title' ,
67
+ } ) ;
55
68
56
- await expect ( firstValueFrom ( store . currentRoute$ ) ) . resolves . toEqual ( {
69
+ await expect ( firstValueFrom ( routerStore . currentRoute$ ) ) . resolves . toEqual ( {
70
+ children : [ ] ,
71
+ data : {
72
+ testData : 'test-data' ,
73
+ } ,
74
+ fragment : 'test-fragment' ,
75
+ outlet : 'primary' ,
57
76
params : {
58
77
id : 'etyDDwAAQBAJ' ,
59
78
} ,
60
- data : {
61
- testData : 'test-data' ,
79
+ queryParams : {
80
+ ref : 'ngrx.io' ,
81
+ } ,
82
+ routeConfig : {
83
+ path : ':id' ,
84
+ title : 'Static title' ,
62
85
} ,
86
+ title : 'Static title' ,
63
87
url : [
64
88
{
65
89
path : 'etyDDwAAQBAJ' ,
66
90
parameters : { } ,
67
91
} ,
68
92
] ,
69
- outlet : 'primary' ,
70
- routeConfig : {
71
- path : ':id' ,
72
- } ,
73
- queryParams : {
74
- ref : 'ngrx.io' ,
75
- } ,
76
- fragment : 'test-fragment' ,
77
- children : [ ] ,
78
93
} ) ;
79
94
} ) ;
80
95
81
96
it ( 'exposes a selector for the fragment' , async ( ) => {
82
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
97
+ const { routerStore } = await setup ( ) ;
83
98
84
- await expect ( firstValueFrom ( store . fragment$ ) ) . resolves . toBe (
99
+ await expect ( firstValueFrom ( routerStore . fragment$ ) ) . resolves . toBe (
85
100
'test-fragment'
86
101
) ;
87
102
} ) ;
88
103
89
104
it ( 'exposes a selector for query params' , async ( ) => {
90
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
105
+ const { routerStore } = await setup ( ) ;
91
106
92
- await expect ( firstValueFrom ( store . queryParams$ ) ) . resolves . toEqual ( {
107
+ await expect ( firstValueFrom ( routerStore . queryParams$ ) ) . resolves . toEqual ( {
93
108
ref : 'ngrx.io' ,
94
109
} ) ;
95
110
} ) ;
96
111
97
112
it ( 'creates a selector for a specific query param' , async ( ) => {
98
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
113
+ const { routerStore } = await setup ( ) ;
99
114
100
- await expect ( firstValueFrom ( store . selectQueryParam ( 'ref' ) ) ) . resolves . toBe (
101
- 'ngrx.io'
102
- ) ;
115
+ await expect (
116
+ firstValueFrom ( routerStore . selectQueryParam ( 'ref' ) )
117
+ ) . resolves . toBe ( 'ngrx.io' ) ;
103
118
} ) ;
104
119
105
120
it ( 'exposes a selector for route params' , async ( ) => {
106
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
121
+ const { routerStore } = await setup ( ) ;
107
122
108
- await expect ( firstValueFrom ( store . routeParams$ ) ) . resolves . toEqual ( {
123
+ await expect ( firstValueFrom ( routerStore . routeParams$ ) ) . resolves . toEqual ( {
109
124
id : 'etyDDwAAQBAJ' ,
110
125
} ) ;
111
126
} ) ;
112
127
113
128
it ( 'creates a selector for a specific route param' , async ( ) => {
114
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
129
+ const { routerStore } = await setup ( ) ;
115
130
116
- await expect ( firstValueFrom ( store . selectRouteParam ( 'id' ) ) ) . resolves . toBe (
117
- 'etyDDwAAQBAJ'
118
- ) ;
131
+ await expect (
132
+ firstValueFrom ( routerStore . selectRouteParam ( 'id' ) )
133
+ ) . resolves . toBe ( 'etyDDwAAQBAJ' ) ;
119
134
} ) ;
120
135
121
136
it ( 'exposes a selector for route data' , async ( ) => {
122
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
137
+ const { routerStore } = await setup ( ) ;
123
138
124
- await expect ( firstValueFrom ( store . routeData$ ) ) . resolves . toEqual ( {
139
+ await expect ( firstValueFrom ( routerStore . routeData$ ) ) . resolves . toEqual ( {
125
140
testData : 'test-data' ,
126
141
} ) ;
127
142
} ) ;
128
143
129
144
it ( 'creates a selector for specific route data' , async ( ) => {
130
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
145
+ const { routerStore } = await setup ( ) ;
131
146
132
147
await expect (
133
- firstValueFrom ( store . selectRouteData < string > ( 'testData' ) )
148
+ firstValueFrom ( routerStore . selectRouteData < string > ( 'testData' ) )
134
149
) . resolves . toBe ( 'test-data' ) ;
135
150
} ) ;
136
151
137
152
it ( 'exposes a selector for the URL' , async ( ) => {
138
- await router . navigateByUrl ( '/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment' ) ;
153
+ const { routerStore } = await setup ( ) ;
139
154
140
- await expect ( firstValueFrom ( store . url$ ) ) . resolves . toBe (
155
+ await expect ( firstValueFrom ( routerStore . url$ ) ) . resolves . toBe (
141
156
'/login/etyDDwAAQBAJ?ref=ngrx.io#test-fragment'
142
157
) ;
143
158
} ) ;
159
+
160
+ it ( 'exposes a selector for the route title that emits static route titles' , async ( ) => {
161
+ const { routerStore } = await setup ( {
162
+ title : 'Static title' ,
163
+ } ) ;
164
+
165
+ await expect ( firstValueFrom ( routerStore . title$ ) ) . resolves . toBe (
166
+ 'Static title'
167
+ ) ;
168
+ } ) ;
169
+
170
+ it ( 'exposes a selector for the route title that emits resolved route titles' , async ( ) => {
171
+ const { routerStore } = await setup ( {
172
+ title : ( route ) => route . data [ 'testData' ] ,
173
+ } ) ;
174
+
175
+ await expect ( firstValueFrom ( routerStore . title$ ) ) . resolves . toBe ( 'test-data' ) ;
176
+ } ) ;
144
177
} ) ;
0 commit comments