public async Task <ValidationResult> Handle(AvaliarHabilidadesUsuarioCommand message, CancellationToken cancellationToken)
        {
            if (!message.IsValid())
            {
                return(message.ValidationResult);
            }

            await _perfilServices.AvaliarPerfil(message.PerfilHabilidadesId, message.HabilidadesAvaliadas);

            return(await PublishEvents(message.HabilidadesAvaliadas.Select(avaliacao => new HabilidadeUsuarioAvaliadaEvent(avaliacao.Key, avaliacao.Value)).ToArray()));
        }
        public void PerfilServices_AvaliarPerfil_NaoDeveAdicionarAvaliacaoNasHabilidadesDoUsuarioEDeveNotificar()
        {
            //Arrange
            IPerfilServices perfilServices = _perfilService;

            //Act
            perfilServices.AvaliarPerfil(Guid.NewGuid(), default);

            //Assert
            _fixtureWrapper.Mocker.GetMock <IMediatrHandler>()
            .Verify(x => x.Notify(It.IsAny <DomainNotification>()), Times.Once);
        }
        public void PerfilServices_AvaliarPerfil_DeveAdicionarAvaliacaoNasHabilidadesDoUsuario()
        {
            //Arrange
            IPerfilServices   perfilServices = _perfilService;
            PerfilHabilidades perfil         = _fixtureWrapper.PerfilHabilidades.CriarPerfilHabilidadeValido();

            for (int i = 0; i < 5; i++)
            {
                perfil.AdicionarHabilidadeUsuario(_fixtureWrapper.HabilidadeUsuario.CriarHabilidadeUsuarioValido());
            }

            IDictionary <Guid, double> habilidadesAvaliadas = new Dictionary <Guid, double>();

            Faker faker = new Faker("pt_BR");

            for (int i = 0; i < 5; i++)
            {
                habilidadesAvaliadas.Add(perfil.HabilidadesUsuario.ElementAt(i).Id, faker.Random.Double(0, 10));
            }

            _fixtureWrapper.Mocker.GetMock <IPerfilHabilidadesRepository>()
            .Setup(x => x.ObterPorIdComHabilidades(perfil.Id))
            .ReturnsAsync(perfil);

            //Act
            perfilServices.AvaliarPerfil(perfil.Id, habilidadesAvaliadas);

            //Assert
            perfil.HabilidadesUsuario.SelectMany(h => h.Avaliacoes).Should().HaveCount(habilidadesAvaliadas.Count);

            _fixtureWrapper.Mocker.GetMock <IHabilidadeUsuarioRepository>()
            .Verify(x => x.AdicionarAvaliacaoHabilidade(It.IsAny <AvaliacaoHabilidade>()), Times.Exactly(habilidadesAvaliadas.Count));

            _fixtureWrapper.Mocker.GetMock <IHabilidadeUsuarioRepository>()
            .Verify(x => x.AtualizarHabilidadesUsuario(It.IsAny <IEnumerable <HabilidadeUsuario> >()), Times.Once);

            _fixtureWrapper.Mocker.GetMock <IPerfilHabilidadesRepository>()
            .Verify(x => x.AtualizarPerfilHabilidades(perfil), Times.Once);

            _fixtureWrapper.Mocker.GetMock <IHabilidadeUsuarioRepository>()
            .Verify(x => x.Commit(), Times.Once);

            _fixtureWrapper.Mocker.GetMock <IPerfilHabilidadesRepository>()
            .Verify(x => x.Commit(), Times.Once);
        }