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); }
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"); } }
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"); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public Gabarito CadastrarGabarito([FromBody] CadastrarGabaritoDto body) { return(_request.Executar(body)); }