# -*- coding: UTF-8 -* """Unit tests for XML exports Usage: pytest tests/unit/test_export_xml.py """ # ScoDoc7 utilisait jaxml, obsolete et non portée en python3 # On teste ici les fonctions de remplacement, fournies par # notre nouveau module sco_xml.py import os import re import sys import unittest from app.scodoc import sco_xml from app.scodoc.gen_tables import GenTable # Legacy function # import jaxml # from app.scodoc import sco_utils as scu # r = scu.simple_dictlist2xml([{"id": 1, "ues": [{"note": 10}, {}]}], tagname="infos") def xml_normalize(x): "supprime espaces inutiles" x = re.sub(r"\s+", " ", str(x)).strip().replace("> <", "><") def xmls_compare(x, y): return xml_normalize(x) == xml_normalize(y) def test_export_xml(test_client): """exports XML compatibles ScoDoc 7""" # expected_result est le résultat de l'ancienne fonction ScoDoc7: for (data, expected_result) in ( ( [{"id": 1, "ues": [{"note": 10}, {}, {"valeur": 25}]}, {"bis": 2}], """<?xml version="1.0" encoding="utf-8"?> <infos id="1"> <ues note="10" /> <ues /> <ues valeur="25" /> </infos> <infos bis="2" /> """, ), ([], """"""), ( ["allo"], """<?xml version="1.0" encoding="utf-8"?> <infos code="allo" /> """, ), ( [{}], """<?xml version="1.0" encoding="utf-8"?> <infos /> """, ), ( [{"x": 1}], """<?xml version="1.0" encoding="utf-8"?> <infos x="1" /> """, ), ( [{"y": [1, 2, 3], "x": 1}], """<?xml version="1.0" encoding="utf-8"?> <infos x="1"> <y code="1" /> <y code="2" /> <y code="3" /> </infos> """, ), ( [{"y": [{"x": 1}, {"y": [1, 2, 3]}], "x": 1}], """<?xml version="1.0" encoding="utf-8"?> <infos x="1"> <y x="1" /> <y> <y code="1" /> <y code="2" /> <y code="3" /> </y> </infos> """, ), ): # x = scu.simple_dictlist2xml(data, tagname="infos") y = sco_xml.simple_dictlist2xml(data, tagname="infos") assert xmls_compare(expected_result, y) # print("""({}, '''{}'''),""".format(data, str(x))) # test du sendXML compatible ScoDoc7 etuds = [{"x": 1, "etuds": ["allo", "mama"]}, {"x": 2, "etuds": ["un", "deux"]}] # Le résultat de l'ancien print(sendXML(etuds, tagname="etudiants")) expected_result = """ <?xml version="1.0" encoding="utf-8"?> <etudiants_list> <etudiants x="1"> <etuds code="allo" /> <etuds code="mama" /> </etudiants> <etudiants x="2"> <etuds code="un" /> <etuds code="deux" /> </etudiants> </etudiants_list> """ assert xmls_compare( expected_result, sco_xml.simple_dictlist2xml([{"etudiant": etuds}], tagname="etudiant_list"), ) # ---- Tables table = GenTable( rows=[{"nom": "Toto", "age": 26}, {"nom": "Titi", "age": 21}], columns_ids=("nom", "age"), ) table_xml = table.xml() expected_result = """ <?xml version="1.0" encoding="utf-8"?> <table origin="" caption="" id="gt_806883"> <row> <nom value="Toto" /> <age value="26" /> </row> <row> <nom value="Titi" /> <age value="21" /> </row> </table> """ assert xmls_compare(table_xml, expected_result)