Ejemplo n.º 1
0
        public void Deve_ocorrer_exception_caso_haja_outro_gabarito_cadastrado()
        {
            Dados.Gabaritos.Add(new Gabarito
            {
                IdProva   = "ALF-1",
                Respostas = new List <Respostas>
                {
                    new Respostas {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    }
                }
            });
            var gabaritoDto = new CadastrarGabaritoDto
            {
                IdProva   = "ALF-1",
                Respostas = new List <RespostaDto>
                {
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    }
                }
            };
            var request = new CadastrarGabaritoRequest();

            Func <Gabarito> func = () => request.Executar(gabaritoDto);

            Assert.Throws <Exception>(func);
            Assert.Equal(
                "Gabarito já cadastrado para a prova ALF-1",
                Assert.Throws <Exception>(func).Message
                );
            Assert.Equal(1, Dados.Gabaritos.Count);
        }
Ejemplo n.º 2
0
        private void ValidarQuestoesRespostas(CadastrarGabaritoDto gabaritoDto, Prova prova)
        {
            var numerosQuestoes          = gabaritoDto.Respostas.Select(x => x.NumeroQuestao).ToList();
            var numerosQuestoesDistintos = numerosQuestoes.Distinct().ToList();

            if (numerosQuestoes.Count != numerosQuestoesDistintos.Count)
            {
                throw new Exception("Numero da questão não pode ser duplicado");
            }

            var numerosCorrespondetes = numerosQuestoesDistintos
                                        .Select(numeroQuestao => prova.Questoes
                                                .Select(questao => questao.Numero)
                                                .Contains(numeroQuestao));

            if (numerosCorrespondetes.Any(contains => !contains))
            {
                throw new Exception("Questão não encontrada para resposta");
            }

            if (prova.Questoes.Count != gabaritoDto.Respostas.Count)
            {
                throw new Exception("Quantidade de respostas não correspondente");
            }
        }
Ejemplo n.º 3
0
        private void ValidarAlernativas(CadastrarGabaritoDto gabaritoDto)
        {
            var alternativasInvalidas = gabaritoDto.Respostas
                                        .Where(x => Enum.IsDefined(typeof(Alternativa), x.Alternativa) == false)
                                        .ToList();

            if (alternativasInvalidas.Any())
            {
                throw new Exception("Alternativa inválida");
            }
        }
Ejemplo n.º 4
0
        private Prova ValidarProva(CadastrarGabaritoDto gabaritoDto)
        {
            var gabaritosVinculados = Dados.Gabaritos
                                      .Where(x => gabaritoDto.IdProva == x.IdProva).ToList();

            if (gabaritosVinculados.Any())
            {
                throw new Exception($"Gabarito já cadastrado para a prova {gabaritoDto.IdProva}");
            }

            var prova = Dados.Provas.FirstOrDefault(x => gabaritoDto.IdProva == x.Id);

            if (prova == null)
            {
                throw new Exception($"Prova {gabaritoDto.IdProva} não encontrada");
            }

            return(prova);
        }
Ejemplo n.º 5
0
        public void Deve_ocorrer_exception_caso_alternativa_informada_nao_exista()
        {
            Dados.Provas.Add(new Prova
            {
                Id       = "ALF-1",
                Questoes = new List <Questao>
                {
                    new Questao {
                        Numero = 1, Peso = 1,
                    },
                    new Questao {
                        Numero = 2, Peso = 1,
                    },
                }
            });
            var gabaritoDto = new CadastrarGabaritoDto
            {
                IdProva   = "ALF-1",
                Respostas = new List <RespostaDto>
                {
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    },
                    new RespostaDto {
                        NumeroQuestao = 2, Alternativa = (Alternativa)6,
                    },
                }
            };
            var request = new CadastrarGabaritoRequest();

            Func <Gabarito> func = () => request.Executar(gabaritoDto);

            Assert.Throws <Exception>(func);
            Assert.Equal(
                "Alternativa inválida",
                Assert.Throws <Exception>(func).Message
                );
            Assert.Equal(0, Dados.Gabaritos.Count);
        }
Ejemplo n.º 6
0
        public void Deve_ocorrer_exception_caso_nao_haja_prova_informada()
        {
            var gabaritoDto = new CadastrarGabaritoDto
            {
                IdProva   = "ALF-1",
                Respostas = new List <RespostaDto>
                {
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    }
                }
            };
            var request = new CadastrarGabaritoRequest();

            Func <Gabarito> func = () => request.Executar(gabaritoDto);

            Assert.Throws <Exception>(func);
            Assert.Equal(
                "Prova ALF-1 não encontrada",
                Assert.Throws <Exception>(func).Message
                );
            Assert.Equal(0, Dados.Gabaritos.Count);
        }
Ejemplo n.º 7
0
        public Gabarito Executar(CadastrarGabaritoDto cadastrarGabaritoDto)
        {
            var prova = ValidarProva(cadastrarGabaritoDto);

            ValidarQuestoesRespostas(cadastrarGabaritoDto, prova);
            ValidarAlernativas(cadastrarGabaritoDto);

            var respostas = cadastrarGabaritoDto.Respostas.Select(x => new Respostas
            {
                NumeroQuestao = x.NumeroQuestao,
                Alternativa   = x.Alternativa,
            }).ToList();

            var gabarito = new Gabarito
            {
                IdProva   = cadastrarGabaritoDto.IdProva,
                Respostas = respostas
            };

            Dados.Gabaritos.Add(gabarito);

            return(gabarito);
        }
Ejemplo n.º 8
0
        public void Deve_ocorrer_exception_caso_haja_respostas_duplicadas()
        {
            Dados.Provas.Add(new Prova
            {
                Id       = "ALF-1",
                Questoes = new List <Questao>
                {
                    new Questao {
                        Numero = 1, Peso = 1,
                    }
                }
            });
            var gabaritoDto = new CadastrarGabaritoDto
            {
                IdProva   = "ALF-1",
                Respostas = new List <RespostaDto>
                {
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    },
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.B,
                    }
                }
            };
            var request = new CadastrarGabaritoRequest();

            Func <Gabarito> func = () => request.Executar(gabaritoDto);

            Assert.Throws <Exception>(func);
            Assert.Equal(
                "Numero da questão não pode ser duplicado",
                Assert.Throws <Exception>(func).Message
                );
            Assert.Equal(0, Dados.Gabaritos.Count);
        }
Ejemplo n.º 9
0
        public void Deve_cadastrar_gabarito_com_sucesso()
        {
            Dados.Provas.Add(new Prova
            {
                Id       = "ALF-1",
                Questoes = new List <Questao>
                {
                    new Questao {
                        Numero = 1, Peso = 1,
                    },
                    new Questao {
                        Numero = 2, Peso = 2,
                    },
                }
            });
            var gabaritoDto = new CadastrarGabaritoDto
            {
                IdProva   = "ALF-1",
                Respostas = new List <RespostaDto>
                {
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    },
                    new RespostaDto {
                        NumeroQuestao = 2, Alternativa = Alternativa.B,
                    },
                }
            };
            var request = new CadastrarGabaritoRequest();

            var gabarito = request.Executar(gabaritoDto);

            Assert.Equal("ALF-1", gabarito.IdProva);
            Assert.Equal(2, gabarito.Respostas.Count);
            Assert.Equal(1, Dados.Gabaritos.Count);
        }
Ejemplo n.º 10
0
        private void CadastarGabaritos()
        {
            var gabarito1 = new CadastrarGabaritoDto
            {
                IdProva   = "ALF-1",
                Respostas = new List <RespostaDto>
                {
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    },
                    new RespostaDto {
                        NumeroQuestao = 2, Alternativa = Alternativa.A,
                    }
                }
            };
            var gabarito2 = new CadastrarGabaritoDto
            {
                IdProva   = "ALF-2",
                Respostas = new List <RespostaDto>
                {
                    new RespostaDto {
                        NumeroQuestao = 1, Alternativa = Alternativa.A,
                    },
                    new RespostaDto {
                        NumeroQuestao = 2, Alternativa = Alternativa.A,
                    },
                    new RespostaDto {
                        NumeroQuestao = 3, Alternativa = Alternativa.A,
                    }
                }
            };
            var cadastrarProva = new CadastrarGabaritoRequest();

            cadastrarProva.Executar(gabarito1);
            cadastrarProva.Executar(gabarito2);
        }
Ejemplo n.º 11
0
 public Gabarito CadastrarGabarito([FromBody] CadastrarGabaritoDto body)
 {
     return(_request.Executar(body));
 }