コード例 #1
0
        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");
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public NotaAlunoProva CadastrarRespostaAlunoProva(
     [FromRoute] string idProva,
     [FromRoute] string idAluno,
     [FromBody] CadastrarRespostasAlunoDto body)
 {
     body.IdProva = idProva;
     body.IdAluno = idAluno;
     return(_respostasAlunoRequest.Executar(body));
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        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");
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }