コード例 #1
0
        public async Task Handle_WhenUserDoesNotHavePermission_ShouldThrowException()
        {
            // Arrange
            var userId  = Guid.NewGuid();
            var request = new AllTodosQuery {
                UserId = userId
            };
            var rpcResponse = new IsUserAllowedResponse {
                IsAllowed = false
            };

            rpcPermissionsMock.ClientMock.Setup(x => x.IsUserAllowed(It.IsAny <IsUserAllowedRequest>(), It.IsAny <CallOptions>())).Returns(rpcResponse);

            var dbOptions = new DbContextOptionsBuilder <TodoDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options;

            using (var context = new TodoDbContext(dbOptions))
            {
                // Act
                var sut = new AllTodosQueryHandler(context, mapper, rpcPermissionsMock.ServiceClient);
                try
                {
                    var result = await sut.Handle(request, new CancellationToken(false));

                    Assert.True(false, "Should throw exception");
                }
                catch (InvalidOperationException ex)
                {
                    // Assert
                    Assert.NotNull(ex);
                }
            }
        }
コード例 #2
0
        public async Task <IEnumerable <TodoResult> > ExecuteAsync(AllTodosQuery query)
        {
            var todos = await _todoFinder.All();

            return(await Task.Factory.StartNew(() =>
            {
                return todos.Select(x => GetResult(x).Result);
            }));
        }
コード例 #3
0
        public void TestTodosSortedById()
        {
            SeedTodos(Context, 3);

            var todoQuery = new AllTodosQuery(Context);
            var todos     = todoQuery.Execute();

            Assert.AreEqual("Todo 3", todos.First().Description);
        }
コード例 #4
0
        public void TestAllTodosQuery()
        {
            // Arrange
            SeedTodos(Context, 3);

            // Act
            var todoQuery = new AllTodosQuery(Context);
            var todos     = todoQuery.Execute();

            // Assert
            Assert.AreEqual(3, todos.Count());
        }
コード例 #5
0
        public async Task <IActionResult> All(AllTodosQuery query)
        {
            if (!ModelState.IsValid)
            {
                return(ErrorModelResult());
            }
            try
            {
                var result = await _queryProcessor.ProcessAsync(query);

                return(OkResult(result));
            }
            catch (FailureResult reqEx)
            {
                return(ErrorResult(reqEx));
            }
        }
コード例 #6
0
        public async Task <List <TodoResult> > Handle(AllTodosQuery request, CancellationToken cancellationToken)
        {
            var isUserAllowedReq = new IsUserAllowedRequest {
                Permission = "READ_TODO", UserId = request.UserId?.ToString() ?? string.Empty
            };
            var isUserAllowedRes = permissionsClient.Execute <IsUserAllowedRequest, IsUserAllowedResponse>(c => c.IsUserAllowed, isUserAllowedReq);

            if (isUserAllowedRes.IsAllowed == false)
            {
                throw new InvalidOperationException("User is not allowed");
            }

            var todos = await context
                        .Todos
                        .ProjectTo <TodoResult>(mapper.ConfigurationProvider)
                        .ToListAsync(cancellationToken);

            return(todos);
        }
コード例 #7
0
        public async Task Handle_WhenUserHasPermission_ShouldNotThrowException()
        {
            // Arrange
            var userId  = Guid.NewGuid();
            var request = new AllTodosQuery {
                UserId = userId
            };
            var rpcResponse = new IsUserAllowedResponse {
                IsAllowed = true
            };

            rpcPermissionsMock.ClientMock.Setup(x => x.IsUserAllowed(It.IsAny <IsUserAllowedRequest>(), It.IsAny <CallOptions>())).Returns(rpcResponse);

            var dbOptions = new DbContextOptionsBuilder <TodoDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options;

            using (var context = new TodoDbContext(dbOptions))
            {
                var sut = new AllTodosQueryHandler(context, mapper, rpcPermissionsMock.ServiceClient);
                // Act
                var result = await sut.Handle(request, new CancellationToken(false));
            }
        }
コード例 #8
0
        public async Task Handle_WhenUserHasPermission_ShouldReturnAllTodos()
        {
            // Arrange
            var userId  = Guid.NewGuid();
            var request = new AllTodosQuery {
                UserId = userId
            };
            var rpcResponse = new IsUserAllowedResponse {
                IsAllowed = true
            };

            rpcPermissionsMock.ClientMock.Setup(x => x.IsUserAllowed(It.IsAny <IsUserAllowedRequest>(), It.IsAny <CallOptions>())).Returns(rpcResponse);

            var dbOptions = new DbContextOptionsBuilder <TodoDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options;

            using (var context = new TodoDbContext(dbOptions))
            {
                context.Todos.Add(new Todo {
                    Id = 1, Name = "todo 1"
                });
                context.Todos.Add(new Todo {
                    Id = 2, Name = "todo 2"
                });
                context.SaveChanges();

                var sut = new AllTodosQueryHandler(context, mapper, rpcPermissionsMock.ServiceClient);
                // Act
                var result = await sut.Handle(request, new CancellationToken(false));

                result.Count.ShouldBe(2);
                result[0].Id.ShouldBe(1);
                result[0].Name.ShouldBe("todo 1");
                result[1].Id.ShouldBe(2);
                result[1].Name.ShouldBe("todo 2");
            }
        }