public async Task GrupoCommandHandler_Handle_AdicionarMembroCommand_NaoDeveAdicionarNovoMembroAoGrupo()
        {
            //Arrange
            AdicionarMembroCommand adicionarMembroCommand = _applicationFixtures.GrupoCommandHandler.CriarAdicionarMembroCommandValido();

            //Act
            await _grupoCommandHandler.Handle(adicionarMembroCommand, ApplicationFixtures.CancellationToken);

            //Arrange
            _applicationFixtures.Mocker.Verify <IMediatrHandler>(m => m.Notify(It.IsAny <DomainNotification>()), Times.AtLeastOnce);
        }
        public async Task GrupoCommandHandler_Handle_AdicionarMembroCommand_DeveAdicionarNovoMembroAoGrupo()
        {
            //Arrange
            AdicionarMembroCommand adicionarMembroCommand = _applicationFixtures.GrupoCommandHandler.CriarAdicionarMembroCommandValido();
            Grupo grupo = _domainFixtures.Grupo.CriarGrupoValido();

            _applicationFixtures.Mocker.GetMock <IGrupoRepository>().Setup(r => r.ObterGrupoPorId(adicionarMembroCommand.GrupoId)).ReturnsAsync(grupo);
            _applicationFixtures.Mocker.GetMock <IGrupoRepository>().Setup(r => r.Commit()).ReturnsAsync(true);

            //Act
            await _grupoCommandHandler.Handle(adicionarMembroCommand, ApplicationFixtures.CancellationToken);

            //Arrange
            grupo.Membros.Should().HaveCount(1);
            _applicationFixtures.Mocker.Verify <IGrupoRepository>(r => r.AdicionarMembro(grupo.Membros.SingleOrDefault()), Times.Once);
            _applicationFixtures.Mocker.Verify <IGrupoRepository>(r => r.AtualizarGrupo(grupo), Times.Once);
            _applicationFixtures.Mocker.Verify <IMediatrHandler>(m => m.Publish(It.IsAny <Event>()), Times.Once);
        }
        public async Task <ValidationResult> Handle(AdicionarMembroCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                return(message.ValidationResult);
            }

            Grupo grupo = await _repository.ObterGrupoPorId(message.GrupoId);

            if (grupo is null)
            {
                return(await NotifyAndReturn("Grupo não encontrado."));
            }

            Membro novoMembro = new Membro(message.UsuarioMembroId);

            grupo.AdicionarMembro(novoMembro);

            _repository.AdicionarMembro(novoMembro);

            _repository.AtualizarGrupo(grupo);

            return(await SaveAndPublish(new MembroAdicionadoGrupoEvent(novoMembro.Id, novoMembro.UsuarioId, novoMembro.GrupoId)));
        }