예제 #1
0
        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);
        }
예제 #2
0
        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());
        }
예제 #3
0
        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);
        }