Skip to content

Commit 73a8519

Browse files
user list page has query parameter for current page
springboot-angular2-tutorial/angular2-app#2
1 parent d438f90 commit 73a8519

File tree

6 files changed

+74
-25
lines changed

6 files changed

+74
-25
lines changed

src/app/components/header/Header.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,28 @@ describe('Header', () => {
181181
});
182182
}); // when not signed in
183183

184+
describe('.isActive', () => {
185+
beforeEach(createCmp);
186+
187+
it('return true when path matches', () => {
188+
const cmp:Header = cmpDebugElement.componentInstance;
189+
spyOn(ctx.location, 'path').and.returnValue('/users');
190+
expect(cmp.isActive('/users')).toBeTruthy();
191+
});
192+
193+
it('return true when path including query parameter matches', () => {
194+
const cmp:Header = cmpDebugElement.componentInstance;
195+
spyOn(ctx.location, 'path').and.returnValue('/users?page=1');
196+
expect(cmp.isActive('/users')).toBeTruthy();
197+
});
198+
199+
it('return false when path does not matche', () => {
200+
const cmp:Header = cmpDebugElement.componentInstance;
201+
spyOn(ctx.location, 'path').and.returnValue('/home');
202+
expect(cmp.isActive('/users')).toBeFalsy();
203+
});
204+
}); // .isActive
205+
184206
});
185207

186208
@Component({

src/app/components/header/Header.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class Header {
2222
}
2323

2424
isActive(path:string):boolean {
25-
return this.location.path() === path;
25+
return this.location.path().split('?')[0] === path;
2626
}
2727

2828
logout() {

src/app/components/pager/Pager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {CORE_DIRECTIVES} from "angular2/common";
33

44
@Component({
55
selector: 'pager',
6-
properties: ['totalPages'],
6+
properties: ['totalPages', 'currentPage'],
77
events: ['pageChanged'],
88
template: require('./pager.html'),
99
directives: [CORE_DIRECTIVES],

src/app/components/user/UserListPage.spec.ts

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import {By} from "angular2/platform/common_dom";
33
import {DOM} from "angular2/src/platform/dom/dom_adapter";
44
import {beforeEachProviders, beforeEach} from "angular2/testing";
55
import {ResponseOptions, Response} from "angular2/http";
6-
import {ROUTER_PRIMARY_COMPONENT} from "angular2/router";
6+
import {ROUTER_PRIMARY_COMPONENT, ROUTER_DIRECTIVES} from "angular2/router";
77
import {App, UserListPage, Gravatar, Pager} from "app/components";
88
import {APP_TEST_PROVIDERS} from "app/providers";
9-
import {TestContext, createTestContext} from "app/testing";
9+
import {TestContext, createTestContext, signin} from "app/testing";
1010

1111
const dummyResponse = new Response(new ResponseOptions({
1212
body: JSON.stringify({
@@ -21,25 +21,34 @@ const dummyResponse = new Response(new ResponseOptions({
2121

2222
describe('UserListPage', () => {
2323

24-
var ctx:TestContext;
25-
var cmpDebugElement:DebugElement;
26-
var pagerDebugElement:DebugElement;
24+
let ctx:TestContext;
25+
let cmpDebugElement:DebugElement;
26+
let pagerDebugElement:DebugElement;
2727

2828
beforeEachProviders(() => [
2929
APP_TEST_PROVIDERS,
3030
provide(ROUTER_PRIMARY_COMPONENT, {useValue: App}),
3131
]);
3232
beforeEach(createTestContext(_ => ctx = _));
33+
beforeEach(signin());
3334
beforeEach(done => {
34-
ctx.backend.connections.subscribe(conn => {
35-
conn.mockRespond(dummyResponse);
36-
});
3735
ctx.init(TestCmp)
3836
.finally(done)
3937
.subscribe(() => {
40-
cmpDebugElement = ctx.fixture.debugElement.query(By.directive(UserListPage));
41-
pagerDebugElement = cmpDebugElement.query(By.directive(Pager));
42-
});
38+
}, e => console.error(e));
39+
});
40+
beforeEach(() => {
41+
ctx.backend.connections.subscribe(conn => {
42+
conn.mockRespond(dummyResponse);
43+
}, e => console.error(e));
44+
});
45+
beforeEach(done => {
46+
ctx.router.navigate(['/UserList']).then(() => {
47+
ctx.fixture.detectChanges();
48+
cmpDebugElement = ctx.fixture.debugElement.query(By.directive(UserListPage));
49+
pagerDebugElement = cmpDebugElement.query(By.directive(Pager));
50+
done();
51+
}).catch(e => console.error(e));
4352
});
4453

4554
it('can be shown', () => {
@@ -70,19 +79,22 @@ describe('UserListPage', () => {
7079
expect(pager.totalPages).toEqual(1);
7180
});
7281

73-
it('list another page when page was changed', () => {
74-
const cmp:UserListPage = cmpDebugElement.componentInstance;
75-
spyOn(cmp, 'list');
82+
it('list another page when page was changed', (done) => {
7683
pagerDebugElement.triggerEventHandler('pageChanged', <any>{page: 2});
77-
expect(cmp.list).toHaveBeenCalledWith(2);
84+
ctx.router.subscribe(() => {
85+
cmpDebugElement = ctx.fixture.debugElement.query(By.directive(UserListPage));
86+
const cmp:UserListPage = cmpDebugElement.componentInstance;
87+
expect(cmp.page).toEqual(2);
88+
done();
89+
});
7890
});
7991

8092
});
8193

8294
@Component({
8395
selector: 'test-cmp',
84-
template: `<user-list-page></user-list-page>`,
85-
directives: [UserListPage],
96+
template: `<router-outlet></router-outlet>`,
97+
directives: [ROUTER_DIRECTIVES],
8698
})
8799
class TestCmp {
88100
}

src/app/components/user/UserListPage.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import {Component, OnInit} from "angular2/core";
22
import {CORE_DIRECTIVES, FORM_DIRECTIVES} from "angular2/common";
3-
import {ROUTER_DIRECTIVES, CanActivate} from "angular2/router";
3+
import {
4+
ROUTER_DIRECTIVES,
5+
CanActivate,
6+
RouteParams,
7+
Router
8+
} from "angular2/router";
49
import {UserService, HttpErrorHandler} from "app/services";
510
import {User} from "app/interfaces";
611
import {Gravatar, Pager} from "app/components";
@@ -23,16 +28,24 @@ export class UserListPage implements OnInit {
2328

2429
users:User[];
2530
totalPages:number;
31+
page:number;
2632

2733
constructor(private userService:UserService,
28-
private errorHandler:HttpErrorHandler) {
34+
private errorHandler:HttpErrorHandler,
35+
private params:RouteParams,
36+
private router:Router) {
37+
this.page = <any>params.get('page') || 1;
2938
}
3039

3140
ngOnInit():any {
32-
this.list(1);
41+
this.list(this.page);
3342
}
3443

35-
list(page) {
44+
onPageChanged(page) {
45+
this.router.navigate(['/UserList', {page: page}]);
46+
}
47+
48+
private list(page) {
3649
this.userService.list({page: page, size: 5})
3750
.subscribe(usersPage => {
3851
this.users = usersPage.content;

src/app/components/user/list.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ <h1>All users</h1>
88
</ul>
99

1010
<div class="clearfix">
11-
<pager class="pull-left" (pageChanged)="list($event.page)"
12-
[totalPages]="totalPages"></pager>
11+
<pager class="pull-left"
12+
(pageChanged)="onPageChanged($event.page)"
13+
[totalPages]="totalPages"
14+
[currentPage]="page"></pager>
1315
</div>

0 commit comments

Comments
 (0)