public void DadoTextoVazio_QuandoCriarOpcaoCorreta_DevoReceberFalha()
        {
            var opcao = Opcao.CriarCorreta("");

            opcao.IsFailure.ShouldBeTrue();
            opcao.Error.ShouldBe(QuestoesMotivosErro.TextoOpcaoObrigatorio);
        }
        public void DadoValorDeId_QuandoCriarOpcaoCorreta_DevoOpcaoComIdInformado()
        {
            const int id = 1231;

            var opcao = Opcao.CriarCorreta(_texto, id);

            opcao.IsSuccess.ShouldBeTrue();
            opcao.Value.Id.ShouldBe(id);
        }
        public void DadoTextoValido_QuandoCriarOpcaoCorreta_DevoOpcaoCriadaCorretamente()
        {
            var opcao = Opcao.CriarCorreta(_texto);

            opcao.IsSuccess.ShouldBeTrue();
            opcao.Value.Id.ShouldBe(0);
            opcao.Value.Texto.ShouldBe(_texto);
            opcao.Value.Correta.ShouldBeTrue();
        }
예제 #4
0
        public async Task <Result <int> > Handle(CriarQuestaoObjetivaComando request, CancellationToken cancellationToken)
        {
            var disciplina = await _disciplinasRepositorio.RecuperarAsync(request.DisciplinaId, cancellationToken);

            if (disciplina.HasNoValue)
            {
                return(Result.Failure <int>(QuestoesMotivosErro.DisciplinaNaoFoiLocalizada));
            }

            var nivelEnsino = await _niveisEnsinoRepositorio.RecuperarAsync(request.NivelEnsinoId, cancellationToken);

            if (nivelEnsino.HasNoValue)
            {
                return(Result.Failure <int>(QuestoesMotivosErro.NivelEnsinoNaoLocalizado));
            }

            var opcoes = request.Opcoes.Select(c => c.Correta
                    ? Opcao.CriarCorreta(c.Texto)
                    : Opcao.CriarIncorreta(c.Texto))
                         .ToList();

            var(_, opcoesisFailure, opcoesError) = Result.Combine(opcoes);
            if (opcoesisFailure)
            {
                return(Result.Failure <int>(opcoesError));
            }

            var(_, isFailure, questao, error) = QuestaoObjetiva.Criar(disciplina.Value.Id, nivelEnsino.Value.Id, request.Descricao,
                                                                      opcoes.Select(c => c.Value).ToList());
            if (isFailure)
            {
                return(Result.Failure <int>(error));
            }

            await _opcoesRepositorio.AdicionarAsync(questao, cancellationToken);

            await _opcoesRepositorio.UnitOfWork.SaveEntitiesAsync(cancellationToken);

            return(Result.Success(questao.Id));
        }