Esempio n. 1
0
        public void given_UserPermissionsRequestedCommand_handler_should_call_session_Get_and_Commit_for_unlisted_permission()
        {
            // Assemble
            var mockAgg = new UserPermissionsRequestedCommandHandlerMockAggregate();

            mockAgg.setup_session_to_ensure_addAndCommit_are_called();
            var testAgg           = mockAgg.SetupAdminUser();
            var testPermissionAgg = mockAgg.SetupTestPermission();
            var handler           = mockAgg.HandlerFactory();

            var input = new RequestUserPermissionsDTO
            {
                ForId    = testAgg.Id,
                ById     = testAgg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        testPermissionAgg.Id, new PermissionDetails
                        {
                            Reason = "testRequestReason"
                        }
                    }
                }
            };

            var command = new UserPermissionsRequestedCommand(input);

            // Apply
            var result = handler.Handle(command);

            // Assert
            Assert.True(mockAgg.SessionGetWasCalled);
            Assert.True(mockAgg.SessionCommitWasCalled);
        }
Esempio n. 2
0
        public void setup_session_to_return_aggregate_with_requested_permission(UserAggregate agg, PermissionAggregate permAgg)
        {
            SessionCommitWasCalled = false;

            var input = new RequestUserPermissionsDTO
            {
                ForId    = agg.Id,
                ById     = agg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        permAgg.Id, new PermissionDetails
                        {
                            Reason = "testReason"
                        }
                    }
                }
            };

            agg.UserRequestedPermissions(new List <PermissionAggregate> {
                permAgg
            }, input);

            SessionMock.Setup(a => a.Get <UserAggregate>(It.IsAny <Guid>(), It.IsAny <int?>(), It.IsAny <CancellationToken>()))
            .Callback(() =>
            {
                SessionGetWasCalled = true;
            })
            .Returns(Task.FromResult(agg));
        }
Esempio n. 3
0
        public void user_permission_list_should_not_contain_requested_permission_after_UserPermissionRequestedEvent_with_inactive_permission()
        {
            // Assemble
            var agg           = UserAggregateMockAggregate.SetupAdminUser();
            var permissionAgg = UserAggregateMockAggregate.SetupTestPermission();

            permissionAgg.DisablePermission(agg);

            RequestUserPermissionsDTO requestInput = new RequestUserPermissionsDTO
            {
                ForId    = agg.Id,
                ById     = agg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    { permissionAgg.Id, new PermissionDetails
                      {
                          Reason = "TestReason"
                      } }
                },
            };

            // Apply
            agg.UserRequestedPermissions(new List <PermissionAggregate> {
                permissionAgg
            }, requestInput);

            // Assert
            Assert.False(agg.PermissionList.Any());
        }
Esempio n. 4
0
        public async Task <UserDTO> RequestPermissions([FromBody] RequestUserPermissionsDTO input)
        {
            var command = new UserPermissionsRequestedCommand(input);
            var result  = await _commandDispatcher.Execute(command);

            return(result);
        }
Esempio n. 5
0
        public void user_permission_list_should_not_have_revoked_permission_after_UserPermissionRevokedEvent_when_permission_was_not_previously_granted()
        {
            // Assemble
            var agg           = UserAggregateMockAggregate.SetupAdminUser();
            var permissionAgg = UserAggregateMockAggregate.SetupTestPermission();

            RevokeUserPermissionDTO revokeInput = new RevokeUserPermissionDTO()
            {
                ForId = agg.Id,
                ById  = agg.Id,
                PermissionsToRevoke = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        permissionAgg.Id, new PermissionDetails
                        {
                            Reason = "test revoke reason"
                        }
                    }
                }
            };

            RequestUserPermissionsDTO requestInput = new RequestUserPermissionsDTO
            {
                ForId    = agg.Id,
                ById     = agg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    { permissionAgg.Id, new PermissionDetails
                      {
                          Reason = "TestReason"
                      } }
                },
            };

            agg.UserRequestedPermissions(new List <PermissionAggregate> {
                permissionAgg
            }, requestInput);

            // Apply
            agg.RevokePermission(agg, revokeInput);

            // Assert
            var changes = agg.FlushUncommitedChanges();

            Assert.Equal(2, changes.Length);
            Assert.Collection(changes,
                              (e) =>
            {
                Assert.IsType <UserCreatedEvent>(e);
            },
                              (e) =>
            {
                Assert.IsType <UserPermissionsRequestedEvent>(e);
            }
                              );

            Assert.True(agg.PermissionList.ContainsKey(permissionAgg.Id));
            Assert.Equal(agg.PermissionList[permissionAgg.Id].EventType, JsonConvert.SerializeObject(typeof(UserPermissionsRequestedEvent).FullName));
        }
Esempio n. 6
0
        public void user_permission_list_should_contain_requested_permission_after_UserPermissionRequestedEvent()
        {
            // Assemble
            var agg           = UserAggregateMockAggregate.SetupAdminUser();
            var permissionAgg = UserAggregateMockAggregate.SetupTestPermission();

            RequestUserPermissionsDTO requestInput = new RequestUserPermissionsDTO
            {
                ForId    = agg.Id,
                ById     = agg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    { permissionAgg.Id, new PermissionDetails
                      {
                          Reason = "TestReason"
                      } }
                },
            };

            // Apply
            agg.UserRequestedPermissions(new List <PermissionAggregate> {
                permissionAgg
            }, requestInput);

            // Assert
            var changes = agg.FlushUncommitedChanges();

            Assert.Equal(2, changes.Length);
            Assert.Collection(changes,
                              (e) =>
            {
                Assert.IsType <UserCreatedEvent>(e);
            },
                              (e) =>
            {
                Assert.IsType <UserPermissionsRequestedEvent>(e);
                var @event = (UserPermissionsRequestedEvent)e;

                Assert.NotEqual(Guid.Empty, @event.Id);
                Assert.Equal(2, @event.Version);
                Assert.NotEqual(new DateTime(), @event.TimeStamp);

                Assert.True(@event.Requests.Any());
                Assert.True(@event.Requests.ContainsKey(permissionAgg.Id));
                Assert.Equal(@event.Requests[permissionAgg.Id].EventType, JsonConvert.SerializeObject(typeof(UserPermissionsRequestedEvent).FullName));
                Assert.Equal(@event.Requests[permissionAgg.Id].Reason, requestInput.Requests[permissionAgg.Id].Reason);
                Assert.True(@event.Requests[permissionAgg.Id].IsPending);
                //Assert.NotEqual(@event.Requests[permissionAgg.Id].RequestDate, new DateTime());
                Assert.Equal(@event.Requests[permissionAgg.Id].RequestedBy, agg.Id);
                Assert.Equal(@event.Requests[permissionAgg.Id].RequestedFor, agg.Id);
            });

            Assert.True(agg.PermissionList.ContainsKey(permissionAgg.Id));
            Assert.Equal(agg.PermissionList[permissionAgg.Id].EventType, JsonConvert.SerializeObject(typeof(UserPermissionsRequestedEvent).FullName));
        }
Esempio n. 7
0
        public void given_GrantUserPermissionCommand_handler_should_call_session_Get_and_Commit_on_requested_permission()
        {
            // Assemble
            var mockAgg           = new GrantUserPermissionCommandHandlerMockAggregate();
            var requestHandler    = mockAgg.UserPermissionsRequestedHandlerFactory();
            var granthandler      = mockAgg.GrantUserPermissionHandlerFactory();
            var testAgg           = mockAgg.SetupAdminUser();
            var testPermissionAgg = mockAgg.SetupTestPermission();

            mockAgg.setup_session_to_return_correct_aggregate(testAgg, testPermissionAgg);

            var grantInput = new GrantUserPermissionDTO
            {
                ForId = testAgg.Id,
                ById  = testAgg.Id,
                PermissionsToGrant = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        testPermissionAgg.Id, new PermissionDetails
                        {
                            Reason = "testGrantReason"
                        }
                    }
                }
            };

            var grantCommand = new GrantUserPermissionCommand(grantInput);

            var requestInput = new RequestUserPermissionsDTO
            {
                ForId    = testAgg.Id,
                ById     = testAgg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        testPermissionAgg.Id, new PermissionDetails
                        {
                            Reason = "testRequestReason"
                        }
                    }
                }
            };

            var requestCommand = new UserPermissionsRequestedCommand(requestInput);

            var requestResult = requestHandler.Handle(requestCommand);

            // Apply
            var grantResult = granthandler.Handle(grantCommand);

            // Assert
            Assert.True(mockAgg.SessionGetWasCalled);
            Assert.True(mockAgg.SessionCommitWasCalled);
            Assert.True(mockAgg.SessionGetPermisisonWasCalled);
        }
Esempio n. 8
0
        public async void given_DenyUserPermissionRequestCommand_handler_should_call_session_Get_and_Commit_when_permission_was_requested()
        {
            // Assemble
            var mockAgg           = new DenyUserPermissionRequestCommandHandlerMockAggregate();
            var testAgg           = mockAgg.SetupAdminUser();
            var testPermissionAgg = mockAgg.SetupTestPermission();
            var denyHandler       = mockAgg.DenyUserPermissionRequestHandlerFactory();
            var requestHandler    = mockAgg.UserPermissionsRequestedHandlerFactory();

            mockAgg.setup_session_to_return_correct_aggregate(testAgg, testPermissionAgg);

            var denyInput = new DenyUserPermissionRequestDTO
            {
                ForId             = testAgg.Id,
                ById              = testAgg.Id,
                PermissionsToDeny = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        testPermissionAgg.Id, new PermissionDetails
                        {
                            Reason = "testDenyReason"
                        }
                    }
                }
            };

            var requestInput = new RequestUserPermissionsDTO
            {
                ForId    = testAgg.Id,
                ById     = testAgg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        testPermissionAgg.Id, new PermissionDetails
                        {
                            Reason = "testRequestReason"
                        }
                    }
                }
            };

            var requestCommand = new UserPermissionsRequestedCommand(requestInput);
            var result         = await requestHandler.Handle(requestCommand);

            var denyCommand = new DenyUserPermissionRequestCommand(denyInput);
            // Apply
            var denyResult = await denyHandler.Handle(denyCommand);

            // Assert
            Assert.True(mockAgg.SessionGetWasCalled);
            Assert.True(mockAgg.SessionCommitWasCalled);
            Assert.True(mockAgg.SessionGetPermisisonWasCalled);
        }
Esempio n. 9
0
        public async void given_requestuserpermissionscommand_command_dispatcher_should_get_same_command_created_in_controller()
        {
            //Assemble
            var mockAgg = new UserControllerMockAggregate();

            var id       = new Guid();
            var userId   = new Guid();
            var requests = new Dictionary <Guid, PermissionDetails>
            {
                {
                    new Guid(), new PermissionDetails
                    {
                        EventType    = "testEvent",
                        IsPending    = true,
                        Reason       = "testReason",
                        RequestedBy  = id,
                        RequestedFor = userId,
                        RequestDate  = new DateTime()
                    }
                }
            };

            var input = new RequestUserPermissionsDTO()
            {
                ById     = id,
                ForId    = userId,
                Requests = requests
            };

            var command = new UserPermissionsRequestedCommand(input);

            mockAgg.setup_dispatcher_to_verify_userPermissionsRequestedCommands_are_the_same(command);

            var controller = mockAgg.CreateUserController();

            //Apply
            var result = await controller.RequestPermissions(input);

            //Assert
            Assert.IsType <UserDTO>(result);
            Assert.Equal(result.Id, input.ForId);
            Assert.Equal(result.PermissionList, input.Requests);
        }
Esempio n. 10
0
        public void UserRequestedPermissions(List <PermissionAggregate> permissions, RequestUserPermissionsDTO dto)
        {
            //business Logic here!

            //check to see if permission is active
            foreach (var permission in permissions)
            {
                if (!permission.IsActive)
                {
                    dto.Requests.Remove(permission.Id);
                }
                //might need to add here some way to signal the UI to show that there was an inactive permission in their request.
                //for now, let us just remove it from the list of requests.
            }

            if (dto.Requests.Any())
            {
                ApplyChange(new UserPermissionsRequestedEvent(dto));
            }
        }
Esempio n. 11
0
        public UserPermissionsRequestedEvent(RequestUserPermissionsDTO dto)
        {
            foreach (var request in dto.Requests)
            {
                var reason = String.IsNullOrWhiteSpace(dto.Requests[request.Key].Reason)
                    ? "Reason Not Specified"
                    : dto.Requests[request.Key].Reason;

                var r = new PermissionDetails
                {
                    EventType    = JsonConvert.SerializeObject(GetType().FullName),
                    IsPending    = true,
                    Reason       = reason,
                    RequestDate  = DateTime.UtcNow,
                    RequestedBy  = dto.ById,
                    RequestedFor = dto.ForId
                };
                Requests[request.Key] = r;
            }
        }
Esempio n. 12
0
        public async void handler_should_filter_already_requested_command_out_of_requests()
        {
            // Assemble
            var mockAgg = new UserPermissionsRequestedCommandHandlerMockAggregate();

            mockAgg.setup_session_to_ensure_addAndCommit_are_called();
            var testAgg           = mockAgg.SetupAdminUser();
            var testPermissionAgg = mockAgg.SetupTestPermission();
            var handler           = mockAgg.HandlerFactory();

            var input = new RequestUserPermissionsDTO
            {
                ForId    = testAgg.Id,
                ById     = testAgg.Id,
                Requests = new Dictionary <Guid, PermissionDetails>
                {
                    {
                        testPermissionAgg.Id, new PermissionDetails
                        {
                            Reason = "testRequestReason"
                        }
                    }
                }
            };

            var command = new UserPermissionsRequestedCommand(input);

            // Apply
            var result = await handler.Handle(command);

            Assert.True(mockAgg.SessionCommitWasCalled);

            mockAgg.setup_session_to_return_aggregate_with_requested_permission(testAgg, testPermissionAgg);

            var result2 = await handler.Handle(command);

            // Assert
            Assert.False(mockAgg.SessionCommitWasCalled);
        }
Esempio n. 13
0
 public UserPermissionsRequestedCommand(RequestUserPermissionsDTO input)
 {
     Input = input;
 }