public void DadoTextoVazio_QuandoCriarOpcaoIncorreta_DevoReceberFalha()
        {
            var opcao = Opcao.CriarIncorreta("");

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

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

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

            opcao.IsSuccess.ShouldBeTrue();
            opcao.Value.Id.ShouldBe(0);
            opcao.Value.Texto.ShouldBe(_texto);
            opcao.Value.Correta.ShouldBeFalse();
        }
        public void DadoOpcoesSemCorreta_QuandoCriarQuestaoObjetiva_DevoReceberFalha()
        {
            _opcoes = new List <Opcao>()
            {
                Opcao.CriarIncorreta("Opcao incorreta", 1).Value,
                Opcao.CriarIncorreta("Opcao incorreta", 2).Value,
            };
            var questao = Questao.CriarObjetiva(_nivelEnsino, _disciplina, _descricao, _opcoes);

            questao.IsFailure.ShouldBeTrue();
            questao.Error.ShouldBe(QuestoesMotivosErro.AoMinimoUmaOpcaoCorreta);
        }
Beispiel #5
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));
        }