private void ValidarRespostas(CadastrarRespostasAlunoDto respostasAlunoDto, Prova prova) { var numerosQuestoes = respostasAlunoDto.Respostas .Select(x => x.NumeroQuestao).ToList(); var numerosQuestoesDistintos = numerosQuestoes.Distinct().ToList(); if (numerosQuestoes.Count != numerosQuestoesDistintos.Count) { throw new Exception("Numero da resposta 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 != respostasAlunoDto.Respostas.Count) { throw new Exception("Quantidade de respostas não correspondente"); } }
public void Deve_ocorrer_exception_caso_aluno_nao_for_encontrado() { Dados.Provas.Add(new Prova { Id = "ALF-1", ValorPeso = 30d, Questoes = new List <Questao>() }); Dados.Gabaritos.Add(new Gabarito { IdProva = "ALF-1", Respostas = new List <Respostas>() }); var cadastrarRespostasDto = new CadastrarRespostasAlunoDto { IdAluno = "1", IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto>() }; var request = new CadastrarRespostasAlunoRequest(); Func <NotaAlunoProva> func = () => request.Executar(cadastrarRespostasDto); Assert.Throws <Exception>(func); Assert.Equal( "Aluno não encontrado", Assert.Throws <Exception>(func).Message ); Assert.Equal(0, Dados.Notas.Count); }
private (Prova, Gabarito) ValidarProvaGabaritoAluno(CadastrarRespostasAlunoDto respostasAlunoDto) { var prova = Dados.Provas.FirstOrDefault(x => x.Id == respostasAlunoDto.IdProva); if (prova == null) { throw new Exception("Prova não encontrada"); } var gabarito = Dados.Gabaritos.FirstOrDefault(x => x.IdProva == respostasAlunoDto.IdProva); if (gabarito == null) { throw new Exception($"Gabarito não cadastrado para a prova {respostasAlunoDto.IdProva}"); } var aluno = Dados.Alunos.FirstOrDefault(x => x.Id == respostasAlunoDto.IdAluno); if (aluno == null) { throw new Exception("Aluno não encontrado"); } var notas = Dados.Notas.FirstOrDefault(x => x.IdProva == respostasAlunoDto.IdProva && x.IdAluno == respostasAlunoDto.IdAluno); if (notas != null) { throw new Exception($"Resposta do aluno {aluno.Nome} para a prova {prova.Id} já cadastrada"); } return(prova, gabarito); }
public void Deve_cadastrar_resposta_do_aluno_com_sucesso() { Dados.Provas.Add(new Prova { Id = "ALF-1", ValorPeso = 2.5d, Questoes = new List <Questao> { new Questao { Numero = 1, Peso = 1 }, new Questao { Numero = 2, Peso = 3 }, } }); Dados.Gabaritos.Add(new Gabarito { IdProva = "ALF-1", Respostas = new List <Respostas> { new Respostas { NumeroQuestao = 1, Alternativa = Alternativa.A }, new Respostas { NumeroQuestao = 2, Alternativa = Alternativa.A }, } }); Dados.Alunos.Add(new Aluno { Id = "e1f2cc2e-ead1-4478-9017-ef29d546287c", Nome = "FULANO" }); var cadastrarRespostasDto = new CadastrarRespostasAlunoDto { IdAluno = "e1f2cc2e-ead1-4478-9017-ef29d546287c", IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.E }, new RespostasAlunoDto { NumeroQuestao = 2, Alternativa = Alternativa.A }, } }; var request = new CadastrarRespostasAlunoRequest(); var notaAlunoProva = request.Executar(cadastrarRespostasDto); Assert.Equal("e1f2cc2e-ead1-4478-9017-ef29d546287c", notaAlunoProva.IdAluno); Assert.Equal("ALF-1", notaAlunoProva.IdProva); Assert.Equal(7.5d, notaAlunoProva.NotaProva); Assert.Equal(1, Dados.Notas.Count); }
public NotaAlunoProva CadastrarRespostaAlunoProva( [FromRoute] string idProva, [FromRoute] string idAluno, [FromBody] CadastrarRespostasAlunoDto body) { body.IdProva = idProva; body.IdAluno = idAluno; return(_respostasAlunoRequest.Executar(body)); }
public void Deve_ocorrer_exception_caso_nao_seja_informado_todas_as_respostas() { Dados.Provas.Add(new Prova { Id = "ALF-1", ValorPeso = 30d, Questoes = new List <Questao> { new Questao { Numero = 1, Peso = 1 }, new Questao { Numero = 2, Peso = 1 } } }); Dados.Gabaritos.Add(new Gabarito { IdProva = "ALF-1", Respostas = new List <Respostas> { new Respostas { NumeroQuestao = 1, Alternativa = Alternativa.A }, new Respostas { NumeroQuestao = 2, Alternativa = Alternativa.B } } }); Dados.Alunos.Add(new Aluno { Id = "e1f2cc2e-ead1-4478-9017-ef29d546287c", Nome = "FULANO" }); var cadastrarRespostasDto = new CadastrarRespostasAlunoDto { IdAluno = "e1f2cc2e-ead1-4478-9017-ef29d546287c", IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.A }, } }; var request = new CadastrarRespostasAlunoRequest(); Func <NotaAlunoProva> func = () => request.Executar(cadastrarRespostasDto); Assert.Throws <Exception>(func); Assert.Equal( "Quantidade de respostas não correspondente", Assert.Throws <Exception>(func).Message ); Assert.Equal(0, Dados.Notas.Count); }
private void ValidarAlernativas(CadastrarRespostasAlunoDto respostasAlunoDto) { var alternativasInvalidas = respostasAlunoDto.Respostas .Where(x => Enum.IsDefined(typeof(Alternativa), x.Alternativa) == false) .ToList(); if (alternativasInvalidas.Any()) { throw new Exception("Alternativa inválida"); } }
public void Deve_ocorrer_exception_caso_prova_nao_for_encontrada() { var cadastrarRespostasDto = new CadastrarRespostasAlunoDto { IdAluno = "1", IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto>() }; var request = new CadastrarRespostasAlunoRequest(); Func <NotaAlunoProva> func = () => request.Executar(cadastrarRespostasDto); Assert.Throws <Exception>(func); Assert.Equal( "Prova não encontrada", Assert.Throws <Exception>(func).Message ); Assert.Equal(0, Dados.Notas.Count); }
public void Deve_ocorrer_exception_caso_haja_respostas_duplicadas() { Dados.Provas.Add(new Prova { Id = "ALF-1", ValorPeso = 30d, Questoes = new List <Questao>() }); Dados.Gabaritos.Add(new Gabarito { IdProva = "ALF-1", Respostas = new List <Respostas>() }); Dados.Alunos.Add(new Aluno { Id = "e1f2cc2e-ead1-4478-9017-ef29d546287c", Nome = "FULANO" }); var cadastrarRespostasDto = new CadastrarRespostasAlunoDto { IdAluno = "e1f2cc2e-ead1-4478-9017-ef29d546287c", IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.A }, new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.A } } }; var request = new CadastrarRespostasAlunoRequest(); Func <NotaAlunoProva> func = () => request.Executar(cadastrarRespostasDto); Assert.Throws <Exception>(func); Assert.Equal( "Numero da resposta não pode ser duplicado", Assert.Throws <Exception>(func).Message ); Assert.Equal(0, Dados.Notas.Count); }
public void Deve_ocorrer_exception_caso_resposta_do_aluno_ja_foi_cadastrada() { Dados.Provas.Add(new Prova { Id = "ALF-1", ValorPeso = 30d, Questoes = new List <Questao>() }); Dados.Gabaritos.Add(new Gabarito { IdProva = "ALF-1", Respostas = new List <Respostas>() }); Dados.Alunos.Add(new Aluno { Id = "e1f2cc2e-ead1-4478-9017-ef29d546287c", Nome = "FULANO" }); Dados.Notas.Add(new NotaAlunoProva { IdProva = "ALF-1", IdAluno = "e1f2cc2e-ead1-4478-9017-ef29d546287c", NotaProva = 10d }); var cadastrarRespostasDto = new CadastrarRespostasAlunoDto { IdAluno = "e1f2cc2e-ead1-4478-9017-ef29d546287c", IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto>() }; var request = new CadastrarRespostasAlunoRequest(); Func <NotaAlunoProva> func = () => request.Executar(cadastrarRespostasDto); Assert.Throws <Exception>(func); Assert.Equal( "Resposta do aluno FULANO para a prova ALF-1 já cadastrada", Assert.Throws <Exception>(func).Message ); Assert.Equal(1, Dados.Notas.Count); }
public NotaAlunoProva Executar(CadastrarRespostasAlunoDto respostasAlunoDto) { var respostasAlunoOrdenadas = respostasAlunoDto.Respostas .OrderBy(x => x.NumeroQuestao).ToList(); var(prova, gabarito) = ValidarProvaGabaritoAluno(respostasAlunoDto); ValidarRespostas(respostasAlunoDto, prova); ValidarAlernativas(respostasAlunoDto); var notaFinalAlunoProva = 0d; foreach (var respostaGabarito in gabarito.Respostas) { var respostaAluno = respostasAlunoOrdenadas .First(x => x.NumeroQuestao == respostaGabarito.NumeroQuestao); var questaoProva = prova.Questoes .First(x => x.Numero == respostaGabarito.NumeroQuestao); if (respostaGabarito.Alternativa == respostaAluno.Alternativa) { notaFinalAlunoProva += prova.ValorPeso * questaoProva.Peso; } } var notaAlunoProva = new NotaAlunoProva { IdProva = respostasAlunoDto.IdProva, IdAluno = respostasAlunoDto.IdAluno, NotaProva = notaFinalAlunoProva, }; Dados.Notas.Add(notaAlunoProva); return(notaAlunoProva); }
private void CadastrarRespostas(string id1, string id2, string id3) { var resposta1 = new CadastrarRespostasAlunoDto { IdAluno = id1, IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.A, }, new RespostasAlunoDto { NumeroQuestao = 2, Alternativa = Alternativa.A, }, } }; var resposta2 = new CadastrarRespostasAlunoDto { IdAluno = id1, IdProva = "ALF-2", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.A, }, new RespostasAlunoDto { NumeroQuestao = 2, Alternativa = Alternativa.A, }, new RespostasAlunoDto { NumeroQuestao = 3, Alternativa = Alternativa.A, } } }; var resposta3 = new CadastrarRespostasAlunoDto { IdAluno = id2, IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.E, }, new RespostasAlunoDto { NumeroQuestao = 2, Alternativa = Alternativa.A, }, } }; var resposta4 = new CadastrarRespostasAlunoDto { IdAluno = id2, IdProva = "ALF-2", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.A, }, new RespostasAlunoDto { NumeroQuestao = 2, Alternativa = Alternativa.E, }, new RespostasAlunoDto { NumeroQuestao = 3, Alternativa = Alternativa.A, }, } }; var resposta5 = new CadastrarRespostasAlunoDto { IdAluno = id3, IdProva = "ALF-1", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.A, }, new RespostasAlunoDto { NumeroQuestao = 2, Alternativa = Alternativa.E, }, } }; var resposta6 = new CadastrarRespostasAlunoDto { IdAluno = id3, IdProva = "ALF-2", Respostas = new List <RespostasAlunoDto> { new RespostasAlunoDto { NumeroQuestao = 1, Alternativa = Alternativa.E, }, new RespostasAlunoDto { NumeroQuestao = 2, Alternativa = Alternativa.E, }, new RespostasAlunoDto { NumeroQuestao = 3, Alternativa = Alternativa.A, } } }; var cadastrarRespostas = new CadastrarRespostasAlunoRequest(); cadastrarRespostas.Executar(resposta1); cadastrarRespostas.Executar(resposta2); cadastrarRespostas.Executar(resposta3); cadastrarRespostas.Executar(resposta4); cadastrarRespostas.Executar(resposta5); cadastrarRespostas.Executar(resposta6); }