|
|
|
@ -40,181 +40,199 @@ describe('UsersState', () => { |
|
|
|
dialogs = Mock.ofType<DialogService>(); |
|
|
|
|
|
|
|
usersService = Mock.ofType<UsersService>(); |
|
|
|
|
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, oldUsers))).verifiable(Times.atLeastOnce()); |
|
|
|
|
|
|
|
usersState = new UsersState(authService.object, dialogs.object, usersService.object); |
|
|
|
usersState.load().subscribe(); |
|
|
|
}); |
|
|
|
|
|
|
|
afterEach(() => { |
|
|
|
usersService.verifyAll(); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should load users', () => { |
|
|
|
expect(usersState.snapshot.users.values).toEqual([ |
|
|
|
{ isCurrentUser: false, user: oldUsers[0] }, |
|
|
|
{ isCurrentUser: true, user: oldUsers[1] } |
|
|
|
]); |
|
|
|
expect(usersState.snapshot.usersPager.numberOfItems).toEqual(200); |
|
|
|
expect(usersState.snapshot.isLoaded).toBeTruthy(); |
|
|
|
describe('Loading', () => { |
|
|
|
it('should load users', () => { |
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, oldUsers))).verifiable(); |
|
|
|
|
|
|
|
dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.never()); |
|
|
|
}); |
|
|
|
usersState.load().subscribe(); |
|
|
|
|
|
|
|
expect(usersState.snapshot.users.values).toEqual([ |
|
|
|
{ isCurrentUser: false, user: oldUsers[0] }, |
|
|
|
{ isCurrentUser: true, user: oldUsers[1] } |
|
|
|
]); |
|
|
|
expect(usersState.snapshot.usersPager.numberOfItems).toEqual(200); |
|
|
|
expect(usersState.snapshot.isLoaded).toBeTruthy(); |
|
|
|
|
|
|
|
it('should show notification on load when reload is true', () => { |
|
|
|
usersState.load(true).subscribe(); |
|
|
|
dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.never()); |
|
|
|
}); |
|
|
|
|
|
|
|
expect().nothing(); |
|
|
|
it('should show notification on load when reload is true', () => { |
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, oldUsers))).verifiable(); |
|
|
|
|
|
|
|
dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.once()); |
|
|
|
}); |
|
|
|
usersState.load(true).subscribe(); |
|
|
|
|
|
|
|
it('should replace selected user when reloading', () => { |
|
|
|
usersState.select('id1').subscribe(); |
|
|
|
expect().nothing(); |
|
|
|
|
|
|
|
const newUsers = [ |
|
|
|
new UserDto('id1', 'mail1@mail.de_new', 'name1_new', ['Permission1_New'], false), |
|
|
|
new UserDto('id2', 'mail2@mail.de_new', 'name2_new', ['Permission2_New'], true) |
|
|
|
]; |
|
|
|
dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.once()); |
|
|
|
}); |
|
|
|
|
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, newUsers))); |
|
|
|
it('should replace selected user when reloading', () => { |
|
|
|
const newUsers = [ |
|
|
|
new UserDto('id1', 'mail1@mail.de_new', 'name1_new', ['Permission1_New'], false), |
|
|
|
new UserDto('id2', 'mail2@mail.de_new', 'name2_new', ['Permission2_New'], true) |
|
|
|
]; |
|
|
|
|
|
|
|
usersState.load().subscribe(); |
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, oldUsers))).verifiable(Times.exactly(2)); |
|
|
|
|
|
|
|
expect(usersState.snapshot.selectedUser).toEqual({ isCurrentUser: false, user: newUsers[0] }); |
|
|
|
}); |
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, newUsers))); |
|
|
|
|
|
|
|
it('should return user on select and not load when already loaded', () => { |
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
usersState.load().subscribe(); |
|
|
|
usersState.select('id1').subscribe(); |
|
|
|
usersState.load().subscribe(); |
|
|
|
|
|
|
|
usersState.select('id1').subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
expect(usersState.snapshot.selectedUser).toEqual({ isCurrentUser: false, user: newUsers[0] }); |
|
|
|
}); |
|
|
|
|
|
|
|
expect(selectedUser!.user).toEqual(oldUsers[0]); |
|
|
|
expect(usersState.snapshot.selectedUser).toEqual({ isCurrentUser: false, user: oldUsers[0] }); |
|
|
|
}); |
|
|
|
it('should load next page and prev page when paging', () => { |
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, oldUsers))).verifiable(Times.exactly(2)); |
|
|
|
|
|
|
|
it('should return user on select and load when not loaded', () => { |
|
|
|
usersService.setup(x => x.getUser('id3')) |
|
|
|
.returns(() => of(newUser)); |
|
|
|
usersService.setup(x => x.getUsers(10, 10, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, []))).verifiable(); |
|
|
|
|
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
usersState.load().subscribe(); |
|
|
|
usersState.goNext().subscribe(); |
|
|
|
usersState.goPrev().subscribe(); |
|
|
|
|
|
|
|
usersState.select('id3').subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
expect().nothing(); |
|
|
|
}); |
|
|
|
|
|
|
|
expect(selectedUser!.user).toEqual(newUser); |
|
|
|
expect(usersState.snapshot.selectedUser).toEqual({ isCurrentUser: false, user: newUser }); |
|
|
|
it('should load with query when searching', () => { |
|
|
|
usersService.setup(x => x.getUsers(10, 0, 'my-query')) |
|
|
|
.returns(() => of(new UsersDto(0, []))).verifiable(); |
|
|
|
|
|
|
|
usersState.search('my-query').subscribe(); |
|
|
|
|
|
|
|
expect(usersState.snapshot.usersQuery).toEqual('my-query'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should return null on select when unselecting user', () => { |
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
describe('Updates', () => { |
|
|
|
beforeEach(() => { |
|
|
|
usersService.setup(x => x.getUsers(10, 0, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, oldUsers))).verifiable(); |
|
|
|
|
|
|
|
usersState.select(null).subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
usersState.load().subscribe(); |
|
|
|
}); |
|
|
|
|
|
|
|
expect(selectedUser!).toBeNull(); |
|
|
|
expect(usersState.snapshot.selectedUser).toBeNull(); |
|
|
|
}); |
|
|
|
it('should return user on select and not load when already loaded', () => { |
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
|
|
|
|
it('should return null on select when user is not found', () => { |
|
|
|
usersService.setup(x => x.getUser('unknown')) |
|
|
|
.returns(() => throwError({})).verifiable(); |
|
|
|
usersState.select('id1').subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
}); |
|
|
|
|
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
expect(selectedUser!.user).toEqual(oldUsers[0]); |
|
|
|
expect(usersState.snapshot.selectedUser).toEqual({ isCurrentUser: false, user: oldUsers[0] }); |
|
|
|
}); |
|
|
|
|
|
|
|
usersState.select('unknown').subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
}).unsubscribe(); |
|
|
|
it('should return user on select and load when not loaded', () => { |
|
|
|
usersService.setup(x => x.getUser('id3')) |
|
|
|
.returns(() => of(newUser)); |
|
|
|
|
|
|
|
expect(selectedUser!).toBeNull(); |
|
|
|
expect(usersState.snapshot.selectedUser).toBeNull(); |
|
|
|
}); |
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
|
|
|
|
it('should mark as locked when locked', () => { |
|
|
|
usersService.setup(x => x.lockUser('id1')) |
|
|
|
.returns(() => of({})).verifiable(); |
|
|
|
usersState.select('id3').subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
}); |
|
|
|
|
|
|
|
usersState.select('id1').subscribe(); |
|
|
|
usersState.lock(oldUsers[0]).subscribe(); |
|
|
|
expect(selectedUser!.user).toEqual(newUser); |
|
|
|
expect(usersState.snapshot.selectedUser).toEqual({ isCurrentUser: false, user: newUser }); |
|
|
|
}); |
|
|
|
|
|
|
|
const user_1 = usersState.snapshot.users.at(0); |
|
|
|
it('should return null on select when unselecting user', () => { |
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
|
|
|
|
expect(user_1.user.isLocked).toBeTruthy(); |
|
|
|
expect(user_1).toBe(usersState.snapshot.selectedUser!); |
|
|
|
}); |
|
|
|
usersState.select(null).subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
}); |
|
|
|
|
|
|
|
it('should unmark as locked when unlocked', () => { |
|
|
|
usersService.setup(x => x.unlockUser('id2')) |
|
|
|
.returns(() => of({})).verifiable(); |
|
|
|
expect(selectedUser!).toBeNull(); |
|
|
|
expect(usersState.snapshot.selectedUser).toBeNull(); |
|
|
|
}); |
|
|
|
|
|
|
|
usersState.select('id2').subscribe(); |
|
|
|
usersState.unlock(oldUsers[1]).subscribe(); |
|
|
|
it('should return null on select when user is not found', () => { |
|
|
|
usersService.setup(x => x.getUser('unknown')) |
|
|
|
.returns(() => throwError({})).verifiable(); |
|
|
|
|
|
|
|
const user_1 = usersState.snapshot.users.at(1); |
|
|
|
let selectedUser: SnapshotUser; |
|
|
|
|
|
|
|
expect(user_1.user.isLocked).toBeFalsy(); |
|
|
|
expect(user_1).toBe(usersState.snapshot.selectedUser!); |
|
|
|
}); |
|
|
|
usersState.select('unknown').subscribe(x => { |
|
|
|
selectedUser = x!; |
|
|
|
}).unsubscribe(); |
|
|
|
|
|
|
|
it('should update user properties when updated', () => { |
|
|
|
const request = { email: 'new@mail.com', displayName: 'New', permissions: ['Permission1'] }; |
|
|
|
expect(selectedUser!).toBeNull(); |
|
|
|
expect(usersState.snapshot.selectedUser).toBeNull(); |
|
|
|
}); |
|
|
|
|
|
|
|
usersService.setup(x => x.putUser('id1', request)) |
|
|
|
.returns(() => of({})).verifiable(); |
|
|
|
it('should mark as locked when locked', () => { |
|
|
|
usersService.setup(x => x.lockUser('id1')) |
|
|
|
.returns(() => of({})).verifiable(); |
|
|
|
|
|
|
|
usersState.select('id1').subscribe(); |
|
|
|
usersState.update(oldUsers[0], request).subscribe(); |
|
|
|
usersState.select('id1').subscribe(); |
|
|
|
usersState.lock(oldUsers[0]).subscribe(); |
|
|
|
|
|
|
|
const user_1 = usersState.snapshot.users.at(0); |
|
|
|
const user_1 = usersState.snapshot.users.at(0); |
|
|
|
|
|
|
|
expect(user_1.user.email).toEqual(request.email); |
|
|
|
expect(user_1.user.displayName).toEqual(request.displayName); |
|
|
|
expect(user_1.user.permissions).toEqual(request.permissions); |
|
|
|
expect(user_1).toBe(usersState.snapshot.selectedUser!); |
|
|
|
}); |
|
|
|
expect(user_1.user.isLocked).toBeTruthy(); |
|
|
|
expect(user_1).toBe(usersState.snapshot.selectedUser!); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should add user to snapshot when created', () => { |
|
|
|
const request = { ...newUser, password: 'password' }; |
|
|
|
it('should unmark as locked when unlocked', () => { |
|
|
|
usersService.setup(x => x.unlockUser('id2')) |
|
|
|
.returns(() => of({})).verifiable(); |
|
|
|
|
|
|
|
usersService.setup(x => x.postUser(request)) |
|
|
|
.returns(() => of(newUser)).verifiable(); |
|
|
|
usersState.select('id2').subscribe(); |
|
|
|
usersState.unlock(oldUsers[1]).subscribe(); |
|
|
|
|
|
|
|
usersState.create(request).subscribe(); |
|
|
|
const user_1 = usersState.snapshot.users.at(1); |
|
|
|
|
|
|
|
expect(usersState.snapshot.users.values).toEqual([ |
|
|
|
{ isCurrentUser: false, user: newUser }, |
|
|
|
{ isCurrentUser: false, user: oldUsers[0] }, |
|
|
|
{ isCurrentUser: true, user: oldUsers[1] } |
|
|
|
]); |
|
|
|
expect(usersState.snapshot.usersPager.numberOfItems).toBe(201); |
|
|
|
}); |
|
|
|
expect(user_1.user.isLocked).toBeFalsy(); |
|
|
|
expect(user_1).toBe(usersState.snapshot.selectedUser!); |
|
|
|
}); |
|
|
|
|
|
|
|
it('should load next page and prev page when paging', () => { |
|
|
|
usersService.setup(x => x.getUsers(10, 10, undefined)) |
|
|
|
.returns(() => of(new UsersDto(200, []))).verifiable(); |
|
|
|
it('should update user properties when updated', () => { |
|
|
|
const request = { email: 'new@mail.com', displayName: 'New', permissions: ['Permission1'] }; |
|
|
|
|
|
|
|
usersState.goNext().subscribe(); |
|
|
|
usersState.goPrev().subscribe(); |
|
|
|
usersService.setup(x => x.putUser('id1', request)) |
|
|
|
.returns(() => of({})).verifiable(); |
|
|
|
|
|
|
|
expect().nothing(); |
|
|
|
usersState.select('id1').subscribe(); |
|
|
|
usersState.update(oldUsers[0], request).subscribe(); |
|
|
|
|
|
|
|
usersService.verify(x => x.getUsers(10, 10, undefined), Times.once()); |
|
|
|
usersService.verify(x => x.getUsers(10, 0, undefined), Times.exactly(2)); |
|
|
|
}); |
|
|
|
const user_1 = usersState.snapshot.users.at(0); |
|
|
|
|
|
|
|
it('should load with query when searching', () => { |
|
|
|
usersService.setup(x => x.getUsers(10, 0, 'my-query')) |
|
|
|
.returns(() => of(new UsersDto(0, []))).verifiable(); |
|
|
|
expect(user_1.user.email).toEqual(request.email); |
|
|
|
expect(user_1.user.displayName).toEqual(request.displayName); |
|
|
|
expect(user_1.user.permissions).toEqual(request.permissions); |
|
|
|
expect(user_1).toBe(usersState.snapshot.selectedUser!); |
|
|
|
}); |
|
|
|
|
|
|
|
usersState.search('my-query').subscribe(); |
|
|
|
it('should add user to snapshot when created', () => { |
|
|
|
const request = { ...newUser, password: 'password' }; |
|
|
|
|
|
|
|
expect(usersState.snapshot.usersQuery).toEqual('my-query'); |
|
|
|
usersService.setup(x => x.postUser(request)) |
|
|
|
.returns(() => of(newUser)).verifiable(); |
|
|
|
|
|
|
|
usersState.create(request).subscribe(); |
|
|
|
|
|
|
|
expect(usersState.snapshot.users.values).toEqual([ |
|
|
|
{ isCurrentUser: false, user: newUser }, |
|
|
|
{ isCurrentUser: false, user: oldUsers[0] }, |
|
|
|
{ isCurrentUser: true, user: oldUsers[1] } |
|
|
|
]); |
|
|
|
expect(usersState.snapshot.usersPager.numberOfItems).toBe(201); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |