public async Task UpdateAsync_Adds_New_Permissions() { var userId = _fixture.Create <int>(); var toAdd = _fixture.CreateMany <int>().ToList(); var toLeave = _fixture.CreateMany <int>().ToList(); var permissions = BuildPermissions(userId, toLeave); _permissionsRepositoryMock.Setup(r => r.GetDoorPermissionsAsync(userId)) .ReturnsAsync(permissions); _doorsRepositoryMock.Setup(r => r.AllExistAsync(It.IsAny <IEnumerable <int> >())) .ReturnsAsync(true); var request = new UpdateDoorPermissionsRequest { PermittedDoors = toLeave.Concat(toAdd).ToList() }; await _controller.UpdateAsync(userId, request); var verification = Expr(m => !m.ToDelete.Any() && m.ToAdd.Count() == toAdd.Count && m.ToAdd.All(p => toAdd.Contains(p.DoorId))); _permissionsRepositoryMock.Verify( r => r.UpdateDoorPermissionsAsync(It.Is(verification)), Times.Once); }
public async Task <ActionResult> UpdateAsync(int userId, [FromBody] UpdateDoorPermissionsRequest request) { var existingPermissions = await _permissionsRepository.GetDoorPermissionsAsync(userId); var toDelete = existingPermissions .Where(p => !request.PermittedDoors.Contains(p.DoorId)); var toAddIds = request.PermittedDoors .Where(d => existingPermissions.All(p => p.DoorId != d)) .ToList(); var allExist = await _doorsRepository.AllExistAsync(toAddIds); if (!allExist) { throw ApiException.BadRequest("Some doors don't exist"); } var toAdd = toAddIds .Select(d => new DoorPermission { DoorId = d, UserId = userId }); await _permissionsRepository.UpdateDoorPermissionsAsync(new UpdateDoorPermissionsModel { ToAdd = toAdd, ToDelete = toDelete }); return(Ok()); }
public async Task UpdateAsync_Throws_If_Door_DoesNot_Exist() { var userId = _fixture.Create <int>(); var permissionIds = _fixture.CreateMany <int>().ToList(); var permissions = BuildPermissions(userId, permissionIds); _permissionsRepositoryMock.Setup(r => r.GetDoorPermissionsAsync(userId)) .ReturnsAsync(permissions); _doorsRepositoryMock.Setup(r => r.AllExistAsync(It.IsAny <IEnumerable <int> >())) .ReturnsAsync(false); var request = new UpdateDoorPermissionsRequest { PermittedDoors = permissionIds }; var exception = await Assert.ThrowsAsync <ApiException>(() => _controller.UpdateAsync(userId, request)); Assert.Equal(HttpStatusCode.BadRequest, exception.StatusCode); }