Skip to content

Commit 4bdd0ce

Browse files
EnnoLohmannenno
andauthored
fix: change accessor to property in ActivatedRouteStub (#346)
Due to a breaking change in Typescript 4 a property could not be overwritten with an accessor In the ActivatedRouteStub the snapshow property was overwritten with an get accessor Co-authored-by: enno <enno.lohmann@codecentric.de>
1 parent f1c27f1 commit 4bdd0ce

File tree

2 files changed

+192
-21
lines changed

2 files changed

+192
-21
lines changed

projects/spectator/src/lib/spectator-routing/activated-route-stub.ts

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
import {
2-
convertToParamMap,
3-
ActivatedRoute,
4-
ActivatedRouteSnapshot,
5-
Data,
6-
Params,
7-
ParamMap,
8-
UrlSegment,
9-
RouterStateSnapshot
10-
} from '@angular/router';
1+
import { convertToParamMap, ActivatedRoute, ActivatedRouteSnapshot, Data, Params, ParamMap, UrlSegment } from '@angular/router';
112
import { Observable, ReplaySubject } from 'rxjs';
123
import { map } from 'rxjs/operators';
134

@@ -56,55 +47,55 @@ export class ActivatedRouteStub extends ActivatedRoute {
5647
this.fragment = this.fragmentSubject.asObservable() as Observable<string>;
5748
this.url = this.urlSubject.asObservable() as Observable<UrlSegment[]>;
5849

50+
this.snapshot = this.buildSnapshot();
51+
5952
this.triggerNavigation();
6053
}
6154

6255
public get paramMap(): Observable<ParamMap> {
6356
return this.paramsSubject.asObservable().pipe(map(params => convertToParamMap(params)));
6457
}
6558

66-
public get snapshot(): ActivatedRouteSnapshot {
67-
const snapshot = new ActivatedRouteSnapshot();
68-
69-
snapshot.params = this.testParams;
70-
snapshot.queryParams = this.testQueryParams;
71-
snapshot.data = this.testData;
72-
snapshot.fragment = this.testFragment!;
73-
snapshot.url = this.testUrl;
74-
75-
return snapshot;
76-
}
59+
public snapshot: ActivatedRouteSnapshot;
7760

7861
public setParams(params: Params): void {
7962
this.testParams = params;
63+
this.snapshot = this.buildSnapshot();
8064
}
8165

8266
public setParam(name: string, value: string): void {
8367
this.testParams = { ...this.testParams, [name]: value };
68+
this.snapshot = this.buildSnapshot();
8469
}
8570

8671
public setQueryParams(queryParams: Params): void {
8772
this.testQueryParams = queryParams;
73+
this.snapshot = this.buildSnapshot();
8874
}
8975

9076
public setQueryParam(name: string, value: string): void {
9177
this.testQueryParams = { ...this.testQueryParams, [name]: value };
78+
this.snapshot = this.buildSnapshot();
9279
}
9380

9481
public setAllData(data: Data): void {
9582
this.testData = data;
83+
this.snapshot = this.buildSnapshot();
9684
}
9785

9886
public setData(name: string, value: string): void {
9987
this.testData = { ...this.testData, [name]: value };
88+
this.snapshot = this.buildSnapshot();
10089
}
10190

10291
public setFragment(fragment: string | null): void {
10392
this.testFragment = fragment;
93+
this.snapshot = this.buildSnapshot();
10494
}
10595

10696
public setUrl(url: UrlSegment[]): void {
10797
this.testUrl = url;
98+
this.snapshot = this.buildSnapshot();
10899
}
109100

110101
public get root(): ActivatedRouteStub {
@@ -137,4 +128,16 @@ export class ActivatedRouteStub extends ActivatedRoute {
137128
public toString(): string {
138129
return 'activatedRouteStub';
139130
}
131+
132+
private buildSnapshot(): ActivatedRouteSnapshot {
133+
const snapshot = new ActivatedRouteSnapshot();
134+
135+
snapshot.params = this.testParams;
136+
snapshot.queryParams = this.testQueryParams;
137+
snapshot.data = this.testData;
138+
snapshot.fragment = this.testFragment!;
139+
snapshot.url = this.testUrl;
140+
141+
return snapshot;
142+
}
140143
}
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
import { ActivatedRouteStub } from '../../src/lib/spectator-routing/activated-route-stub';
2+
import { RouteOptions } from '../../src/lib/spectator-routing/route-options';
3+
import { UrlSegment } from '@angular/router';
4+
5+
describe('ActivatedRouteStub', () => {
6+
it('should fill the Snapshot with empty values it no options are provided', () => {
7+
const activatedRouteStub = new ActivatedRouteStub();
8+
expect(activatedRouteStub.snapshot).not.toBeNull();
9+
10+
const { params, queryParams, data, fragment, url } = activatedRouteStub.snapshot;
11+
12+
expect(params).toEqual({});
13+
expect(queryParams).toEqual({});
14+
expect(data).toEqual({});
15+
expect(fragment).toBeNull();
16+
expect(url).toEqual([]);
17+
});
18+
19+
it('should fill the Snapshot with values from given option object', () => {
20+
const urlSegment = new UrlSegment('test', {});
21+
22+
const routeOptions: RouteOptions = {
23+
params: {
24+
test: 'test'
25+
},
26+
queryParams: {
27+
test: 'test'
28+
},
29+
data: {
30+
test: 'test'
31+
},
32+
fragment: 'test',
33+
url: [urlSegment]
34+
};
35+
36+
const activatedRouteStub = new ActivatedRouteStub(routeOptions);
37+
expect(activatedRouteStub.snapshot).not.toBeNull();
38+
const { params, queryParams, data, fragment, url } = activatedRouteStub.snapshot;
39+
40+
expect(params).toEqual({
41+
test: 'test'
42+
});
43+
expect(queryParams).toEqual({
44+
test: 'test'
45+
});
46+
expect(data).toEqual({
47+
test: 'test'
48+
});
49+
expect(fragment).toEqual('test');
50+
expect(url).toContain(urlSegment);
51+
});
52+
53+
it('should update params in snapshot when set', () => {
54+
const activatedRouteStub = new ActivatedRouteStub();
55+
56+
activatedRouteStub.setParams({
57+
test: 'test'
58+
});
59+
60+
expect(activatedRouteStub.snapshot).not.toBeNull();
61+
62+
const { params } = activatedRouteStub.snapshot;
63+
64+
expect(params).toEqual({
65+
test: 'test'
66+
});
67+
});
68+
69+
it('should update params in snapshot when single param is set', () => {
70+
const activatedRouteStub = new ActivatedRouteStub();
71+
72+
activatedRouteStub.setParam('test', 'test');
73+
74+
expect(activatedRouteStub.snapshot).not.toBeNull();
75+
76+
const { params } = activatedRouteStub.snapshot;
77+
78+
expect(params).toEqual({
79+
test: 'test'
80+
});
81+
});
82+
83+
it('should update queryparams in snapshot when set', () => {
84+
const activatedRouteStub = new ActivatedRouteStub();
85+
86+
activatedRouteStub.setQueryParams({
87+
test: 'test'
88+
});
89+
90+
expect(activatedRouteStub.snapshot).not.toBeNull();
91+
92+
const { queryParams } = activatedRouteStub.snapshot;
93+
94+
expect(queryParams).toEqual({
95+
test: 'test'
96+
});
97+
});
98+
99+
it('should update queryparams in snapshot when single queryparam is set', () => {
100+
const activatedRouteStub = new ActivatedRouteStub();
101+
102+
activatedRouteStub.setQueryParam('test', 'test');
103+
104+
expect(activatedRouteStub.snapshot).not.toBeNull();
105+
106+
const { queryParams } = activatedRouteStub.snapshot;
107+
108+
expect(queryParams).toEqual({
109+
test: 'test'
110+
});
111+
});
112+
113+
it('should update data in snapshot when set', () => {
114+
const activatedRouteStub = new ActivatedRouteStub();
115+
116+
activatedRouteStub.setAllData({
117+
test: 'test'
118+
});
119+
120+
expect(activatedRouteStub.snapshot).not.toBeNull();
121+
122+
const { data } = activatedRouteStub.snapshot;
123+
124+
expect(data).toEqual({
125+
test: 'test'
126+
});
127+
});
128+
129+
it('should update data in snapshot when single data is set', () => {
130+
const activatedRouteStub = new ActivatedRouteStub();
131+
132+
activatedRouteStub.setData('test', 'test');
133+
134+
expect(activatedRouteStub.snapshot).not.toBeNull();
135+
136+
const { data } = activatedRouteStub.snapshot;
137+
138+
expect(data).toEqual({
139+
test: 'test'
140+
});
141+
});
142+
143+
it('should update fragment in snapshot when set', () => {
144+
const activatedRouteStub = new ActivatedRouteStub();
145+
146+
activatedRouteStub.setFragment('test');
147+
148+
expect(activatedRouteStub.snapshot).not.toBeNull();
149+
150+
const { fragment } = activatedRouteStub.snapshot;
151+
152+
expect(fragment).toEqual('test');
153+
});
154+
155+
it('should update URL in snapshot when single data is set', () => {
156+
const urlSegment = new UrlSegment('test', {});
157+
158+
const activatedRouteStub = new ActivatedRouteStub();
159+
160+
activatedRouteStub.setUrl([urlSegment]);
161+
162+
expect(activatedRouteStub.snapshot).not.toBeNull();
163+
164+
const { url } = activatedRouteStub.snapshot;
165+
166+
expect(url).toContain(urlSegment);
167+
});
168+
});

0 commit comments

Comments
 (0)