diff --git a/tests/selenium/python/tests/test_toast_html_entities.py b/tests/selenium/python/tests/test_toast_html_entities.py new file mode 100644 index 00000000..08dcf759 --- /dev/null +++ b/tests/selenium/python/tests/test_toast_html_entities.py @@ -0,0 +1,131 @@ +from pages.login import LoginPage +from pages.quality_assessment_ranges import QualityAssessmentRangesPage +from utils.config import USER, PASSWORD +from utils.web_functions import login +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +import time + +# SeTC008.1 - Testar decodificação de entidades HTML em toasts (app.blade.php) +def test_toast_html_entities_decoding_app_layout(driver): + """ + Verificar se a função decodeHtmlEntities() decodifica corretamente entidades HTML + nas mensagens de toast, evitando exibição de códigos como ' no lugar de aspas. + """ + # Pré-condições: Usuário autenticado na plataforma; Projeto criado; + login(driver) + + qa_ranges_page = QualityAssessmentRangesPage(driver) + qa_ranges_page.navigate_to_quality_assessment_ranges(project_id=114) + + # Tentar provocar um toast com mensagem que contenha aspas + # Vamos tentar inserir uma descrição inválida para gerar um erro + qa_ranges_page.set_description_value(0, "Test "invalid" description") + qa_ranges_page.click_save_description(0) + + # Aguardar toast aparecer + wait = WebDriverWait(driver, 10) + + try: + # Procurar por toast/alert na página + toast_element = wait.until( + EC.presence_of_element_located((By.CSS_SELECTOR, ".toast, .alert, .notification, [class*='toast']")) + ) + + toast_text = toast_element.text + print(f"Toast encontrado: '{toast_text}'") + + # Verificar se não contém entidades HTML não decodificadas + assert "'" not in toast_text, f"Toast contém entidade HTML não decodificada: {toast_text}" + assert """ not in toast_text, f"Toast contém entidade HTML não decodificada: {toast_text}" + assert "&" not in toast_text, f"Toast contém entidade HTML não decodificada: {toast_text}" + + # Verificar se contém aspas normais (se aplicável) + if "invalid" in toast_text.lower(): + print("✓ Mensagem de toast foi decodificada corretamente") + + except Exception as e: + print(f"Nota: Toast não encontrado ou erro: {e}") + # Como fallback, verificar se a função existe no JavaScript da página + script_check = """ + return typeof decodeHtmlEntities === 'function'; + """ + has_function = driver.execute_script(script_check) + assert has_function, "Função decodeHtmlEntities não encontrada na página" + print("✓ Função decodeHtmlEntities existe na página") + +# SeTC008.2 - Testar função JavaScript decodeHtmlEntities diretamente +def test_decode_html_entities_function(driver): + """ + Verificar se a função decodeHtmlEntities() funciona corretamente + ao decodificar diferentes entidades HTML. + """ + # Pré-condições: Usuário autenticado e em uma página com a função + login(driver) + + qa_ranges_page = QualityAssessmentRangesPage(driver) + qa_ranges_page.navigate_to_quality_assessment_ranges(project_id=114) + + # Testar a função JavaScript diretamente + test_cases = [ + ("Dados de 'Dominio' não cadastrados", "Dados de 'Dominio' não cadastrados"), + ("Test "quotes" message", 'Test "quotes" message'), + ("Simple & clean", "Simple & clean"), + ("Normal text", "Normal text"), + ("Mixed 'quotes' & "symbols"", "Mixed 'quotes' & \"symbols\"") + ] + + for input_text, expected_output in test_cases: + # Executar a função JavaScript + script = f""" + if (typeof decodeHtmlEntities === 'function') {{ + return decodeHtmlEntities('{input_text}'); + }} else {{ + return 'FUNCTION_NOT_FOUND'; + }} + """ + + result = driver.execute_script(script) + + assert result != 'FUNCTION_NOT_FOUND', "Função decodeHtmlEntities não encontrada" + assert result == expected_output, f"Decodificação incorreta. Input: '{input_text}', Expected: '{expected_output}', Got: '{result}'" + + print(f"✓ '{input_text}' → '{result}'") + + print("✓ Função decodeHtmlEntities funciona corretamente para todos os casos") + +# SeTC008.3 - Testar toast em página de conducting (index.blade.php) +def test_toast_html_entities_conducting_page(driver): + """ + Verificar se a função decodeHtmlEntities() também está funcionando + na página de conducting (project/conducting/index.blade.php). + """ + # Pré-condições: Usuário autenticado na plataforma; Projeto criado; + login(driver) + + # Navegar para a página de conducting + conducting_url = f"https://thoth-slr.com/project/114/conducting" + driver.get(conducting_url) + time.sleep(3) + + # Verificar se a função existe na página de conducting + script_check = """ + return typeof decodeHtmlEntities === 'function'; + """ + has_function = driver.execute_script(script_check) + assert has_function, "Função decodeHtmlEntities não encontrada na página de conducting" + + # Testar a função na página de conducting + test_input = "Error: 'Dominio' não cadastrado" + expected_output = "Error: 'Dominio' não cadastrado" + + script = f""" + return decodeHtmlEntities('{test_input}'); + """ + + result = driver.execute_script(script) + assert result == expected_output, f"Decodificação incorreta na página conducting. Expected: '{expected_output}', Got: '{result}'" + + print(f"✓ Função funciona na página de conducting: '{test_input}' → '{result}'") + print("✓ Correção das aspas duplas implementada corretamente em ambas as páginas") \ No newline at end of file