Spaces:
Running
Running
| from agents.file_conversion import convert_csv_attachment_to_json, validate_csv_json_equivalence | |
| from agents.goal_verifier import GoalVerifier | |
| def _goal(target: str = "e2e_metrics.json") -> str: | |
| return f"""Converti il file allegato e2e_metrics.csv in un nuovo file workspace chiamato {target}. | |
| Il JSON deve preservare tutti i valori del CSV. | |
| --- **File allegati:** | |
| ### 📎 e2e_metrics.csv (excel, 66B) | |
| ``` | |
| ## Foglio: Sheet1 | |
| mese,richieste,successi | |
| 1/1/26,12,11 | |
| 2/1/26,15,14 | |
| 3/1/26,18,17 | |
| ``` | |
| """ | |
| def test_convert_csv_attachment_to_json_preserves_rows_and_scalars(): | |
| result = convert_csv_attachment_to_json(_goal()) | |
| assert result is not None | |
| assert result.source_name == "e2e_metrics.csv" | |
| assert result.target_name == "e2e_metrics.json" | |
| assert result.row_count == 3 | |
| assert '"mese": "1/1/26"' in result.content | |
| assert '"richieste": 18' in result.content | |
| assert '"successi": 17' in result.content | |
| def test_convert_csv_attachment_requires_explicit_json_target(): | |
| assert convert_csv_attachment_to_json(_goal(target="output.txt")) is None | |
| def test_inline_csv_conversion_preserves_the_exact_mobile_fixture(): | |
| goal = """Esegui solo nel workspace VFS locale questa conversione deterministica. | |
| Crea capability_catalog.csv con contenuto esatto: id,name,active | |
| 1,alpha,true | |
| 2,beta,false | |
| . Poi crea capability_catalog.json con lo stesso catalogo come array JSON valido di due oggetti. | |
| Non usare rete, shell, servizi esterni o provider aggiuntivi.""" | |
| result = convert_csv_attachment_to_json(goal) | |
| assert result is not None | |
| assert result.source_is_inline is True | |
| assert result.source_name == "capability_catalog.csv" | |
| assert result.target_name == "capability_catalog.json" | |
| assert result.source_content == "id,name,active\n1,alpha,true\n2,beta,false\n" | |
| assert result.row_count == 2 | |
| assert '"name": "alpha"' in result.content | |
| assert '"name": "beta"' in result.content | |
| assert '"CAP-001"' not in result.content | |
| assert validate_csv_json_equivalence(result.source_content, result.content) == (True, "") | |
| def test_semantic_validator_rejects_a_generic_catalog_even_when_its_json_is_valid(): | |
| csv_content = "id,name,active\n1,alpha,true\n2,beta,false\n" | |
| generic_catalog = """[ | |
| {"id": "CAP-001", "name": "Data Ingestion", "active": true}, | |
| {"id": "CAP-002", "name": "Data Cleaning", "active": false} | |
| ]""" | |
| is_valid, reason = validate_csv_json_equivalence(csv_content, generic_catalog) | |
| assert is_valid is False | |
| assert "non corrispondono" in reason | |
| def test_file_conversion_is_not_a_code_goal_even_with_e2e_marker(): | |
| assert GoalVerifier.is_code_goal(_goal()) is False | |
| def test_conversion_with_explicit_code_context_remains_code_goal(): | |
| assert GoalVerifier.is_code_goal( | |
| "Converti questo JSON in una funzione Python e scrivi il codice completo." | |
| ) is True | |
| def test_e2e_marker_alone_does_not_turn_file_reading_into_a_code_goal(): | |
| assert GoalVerifier.is_code_goal( | |
| "Leggi il file allegato e restituisci il marker E2E_FILE_READ_OK." | |
| ) is False | |
| assert GoalVerifier.is_code_goal( | |
| "Aggiungi un test e2e per l’endpoint API di conversione file." | |
| ) is True | |