public async Task GetByQueryAsync_UsingValidQuery_MustSucceed(TodoItemQuery todoItemQuery)
        {
            // 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"));

            todoItemQuery.Owner = owner.Object;

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

            // Act
            Func <Task <IList <TodoItemInfo> > > getByQueryAsyncCall =
                async() => await todoItemService.GetByQueryAsync(todoItemQuery);

            // Assert
            await getByQueryAsyncCall.Should().NotThrowAsync("query is valid");
        }
        public async Task GetByQueryAsync_UsingNullAsQuery_MustThrowException()
        {
            // Arrange
            var           mockTodoDbContext = new DbContextMock <TodoDbContext>(DummyOptions);
            var           mockLogger        = new Mock <ILogger <TodoItemService> >();
            var           todoItemService   = new TodoItemService(mockTodoDbContext.Object, mockLogger.Object);
            TodoItemQuery todoItemQuery     = null;

            // Act
            // ReSharper disable once ExpressionIsAlwaysNull
            Func <Task <IList <TodoItemInfo> > > getByQueryAsyncCall =
                async() => await todoItemService.GetByQueryAsync(todoItemQuery);

            // Assert
            await getByQueryAsyncCall.Should().ThrowExactlyAsync <ArgumentNullException>(
                "service cannot fetch data using a null query");
        }