public async Task UpdateAsync_UsingNonexistentEntityKey_MustThrowException()
        {
            // Arrange
            var inMemoryDatabase =
                new DbContextOptionsBuilder <TodoDbContext>()
                .UseInMemoryDatabase($"db--{Guid.NewGuid():N}")
                .EnableDetailedErrors()
                .EnableSensitiveDataLogging();

            var mockLogger = new Mock <ILogger <TodoItemService> >();

            var owner = new Mock <IPrincipal>();

            owner.SetupGet(x => x.Identity).Returns(new GenericIdentity("test"));

            var updateTodoItemInfo = new UpdateTodoItemInfo
            {
                Id         = long.MaxValue,
                Name       = "test",
                IsComplete = true,
                Owner      = owner.Object
            };

            var todoItemService = new TodoItemService(new TodoDbContext(inMemoryDatabase.Options), mockLogger.Object);

            // Act
            Func <Task> updateAsyncCall = async() => await todoItemService.UpdateAsync(updateTodoItemInfo);

            // Assert
            await updateAsyncCall.Should().ThrowExactlyAsync <EntityNotFoundException>(
                "service cannot update data using nonexistent entity key");
        }
Exemple #2
0
        public Task UpdateAsync(UpdateTodoItemInfo updateTodoItemInfo)
        {
            Validator.ValidateObject(updateTodoItemInfo, new ValidationContext(updateTodoItemInfo),
                                     validateAllProperties: true);

            return(InternalUpdateAsync(updateTodoItemInfo));
        }
        public async Task UpdateAsync_UsingNullAsUpdateTodoItemInfo_MustThrowException()
        {
            // Arrange
            var mockTodoDbContext = new DbContextMock <TodoDbContext>(DummyOptions);
            var mockLogger        = new Mock <ILogger <TodoItemService> >();
            var todoItemService   = new TodoItemService(mockTodoDbContext.Object, mockLogger.Object);
            UpdateTodoItemInfo updateTodoItemInfo = null;

            // Act
            // ReSharper disable once ExpressionIsAlwaysNull
            Func <Task> updateAsyncCall = async() => await todoItemService.UpdateAsync(updateTodoItemInfo);

            // Assert
            await updateAsyncCall.Should().ThrowExactlyAsync <ArgumentNullException>(
                "service cannot update data using a null item");
        }
Exemple #4
0
        private async Task InternalUpdateAsync(UpdateTodoItemInfo updateTodoItemInfo)
        {
            logger.LogInformation("About to update item using context {@UpdateTodoItemInfo} ...", updateTodoItemInfo);

            TodoItem existingTodoItem = await GetExistingTodoItem(updateTodoItemInfo.Id, updateTodoItemInfo.Owner);

            if (updateTodoItemInfo.IsComplete.HasValue)
            {
                existingTodoItem.IsComplete = updateTodoItemInfo.IsComplete.Value;
            }

            existingTodoItem.Name          = updateTodoItemInfo.Name;
            existingTodoItem.LastUpdatedBy = updateTodoItemInfo.Owner.GetName();
            existingTodoItem.LastUpdatedOn = DateTime.UtcNow;

            todoDbContext.TodoItems.Update(existingTodoItem);
            await todoDbContext.SaveChangesAsync();

            logger.LogInformation("Item with id {TodoItemId} has been updated by user [{User}]"
                                  , existingTodoItem.Id, existingTodoItem.LastUpdatedBy);
        }