def test_deve_gerar_json(self): s = Submissao(None, None, None) r1 = ResultadoTestCase(s, TestCase("2", [2], 2), "3", True) r1.id = "1" r2 = ResultadoTestCase(s, TestCase("1", [2], 2), "3", False) r2.id = "2" resultados = [r1, r2] s.resultadosTestsCases = resultados json = { "id": s.id, "resultados": [{ "id": "1", "testCaseId": "2", "respostaAlgoritmo": "3", "status": True }, { "id": "2", "testCaseId": "1", "respostaAlgoritmo": "3", "status": False }] } self.assertDictEqual(json, s.toJson())
def test_executar_codigo_com_erro(self): codigo = "x = input('bla')\nprint(y)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save with self.assertRaises(JuizError): j.executarTestes(arquivo) arquivo.apagarArquivo() codigo = "x = 2\nz = input('ble')\nprint(y)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save with self.assertRaisesRegex( JuizError, "O código apresentou o seguinte erro 'NameError' na linha 3"): j.executarTestes(arquivo) arquivo.apagarArquivo()
def test_sucesso_match_input_codigo(self): codigo = "x = input('blableble')\nprint(x)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) j = Juiz(submissao) self.assertTrue(j.matchInputCodigo(testsCases[0].entradas)) codigo = "x = input('blableble')\ninput('blu')" testsCases = [TestCase("1", ["2", "3"], "2")] submissao = Submissao(codigo, None, questao) j = Juiz(submissao) self.assertTrue(j.matchInputCodigo(testsCases[0].entradas))
def test_capturar_mensagem_algoritmo(self): codigo = "x = input('bla')\nprint(x)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) j = Juiz(submissao) self.assertEqual(["2"], j.respostaAlgoritmo("bla2\n2"))
def test_executar_testes_questao_vazia(self): submissao = Submissao("x = 2", None, None) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) with self.assertRaises(JuizError): j.executarTestes(arquivo) arquivo.apagarArquivo()
def test_capturar_textos_input(self): codigo = "x = input('blableble')\nprint(x)" testsCases = [TestCase("1", ["2", "3"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) j = Juiz(submissao) self.assertListEqual(["blableble"], j.obterTextosInput())
def test_executar_arquivo_inexistente(self): codigo = "x = input('bla')\nprint(y)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) arquivo.apagarArquivo() with self.assertRaises(JuizError): j.executarTestes(arquivo)
def test_executar_codigo_com_menos_inputs(self): codigo = "x = input('blableble')\nprint(x)" testsCases = [TestCase("1", ["2", "3"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save with self.assertRaises(JuizError): j.executarTestes(arquivo) arquivo.apagarArquivo()
def test_executar_codigo_sucesso(self): codigo = "x = input('bla')\nprint(x)" testsCases = [TestCase("1", ["2"], "2")] questao = Questao("", testsCases) submissao = Submissao(codigo, None, questao) arquivo = ArquivoSubmissao(submissao.codigo) j = Juiz(submissao) j.salvarResultados = stub_save self.assertListEqual( [ResultadoTestCase(submissao, testsCases[0], ["2"], True)], j.executarTestes(arquivo)) arquivo.apagarArquivo()
def post(self, request, format=None): json = "" httpStatus = 201 try: if Submissao.validarJson(request.data): submissao = Submissao.fromJson(request.data) juiz = Juiz(submissao) arquivo = ArquivoSubmissao(submissao.codigo) if request.data["tipo"] == "visualização": json = juiz.executarVisualizacao(arquivo) else: if request.data["tipo"] == "testes": submissao.resultadosTestsCases = juiz.executarTestes( arquivo) #submissao.saida = juiz.executar(arquivo) json = submissao.toJson() else: httpStatus = 400 except pexpect.TIMEOUT as exception: json = { "mensagem": "TimedoutError: o tempo de execução do seu algoritmo expirou." } httpStatus = 408 except Exception as exception: json = {"mensagem": str(exception)} httpStatus = 500 finally: if arquivo != None: arquivo.apagarArquivo() response = JsonResponse(json, safe=False, status=httpStatus) response["Access-Control-Allow-Origin"] = "*" return response
def post(self, request, format=None): try: # TODO: verificações para ver se o JSON é válido if self.submissaoRequestValid(request): testsCases = TestCase.listAllByQuery(Query("questaoId", "==", request.data["questaoId"])) questao = Questao(request.data["questaoId"], testsCases) submissao = Submissao(None, request.data["codigo"], Estudante(request.data["estudanteId"], None), questao) juiz = Juiz(submissao) arquivo = ArquivoSubmissao(submissao.codigo) jsonVisualizacao = juiz.executarVisualizacao(arquivo) arquivo.apagarArquivo() return JsonResponse(jsonVisualizacao, safe=False, status=status.HTTP_201_CREATED) except Exception as exception: return JsonResponse({"erro":str(exception)}, safe=False, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_201_CREATED)
def test_saida_valida(self): submissao = Submissao("x = 2", None, None) j = Juiz(submissao) self.assertTrue(j.compararSaidaEsperadaComSaidaAlgoritmo("2", "2")) arquivo = ArquivoSubmissao(submissao.codigo) arquivo.apagarArquivo()