diff --git a/facho/facho.py b/facho/facho.py
index 6304f8d..ba9b5c3 100644
--- a/facho/facho.py
+++ b/facho/facho.py
@@ -123,8 +123,7 @@ class LXMLBuilder:
for el in elem.getiterator():
is_optional = el.get('facho_optional', 'False') == 'True'
- if is_optional and el.getchildren() == []:
- print(tostring(el))
+ if is_optional and el.getchildren() == [] and el.keys() == ['facho_optional']:
el.getparent().remove(el)
return tostring(elem, **attrs).decode('utf-8')
@@ -308,8 +307,12 @@ class FachoXML:
xpath = self._path_xpath_for(xpath)
elem = self.get_element(xpath)
+ if elem is None:
+ raise ValueError("xpath %s not found" % (xpath))
+
for k, v in attrs.items():
- self.builder.set_attribute(elem, k, v)
+ if v is not None or str(v) != 'None':
+ self.builder.set_attribute(elem, k, str(v))
return self
def get_element_attribute(self, xpath, attribute):
diff --git a/tests/test_facho.py b/tests/test_facho.py
index 19d13d7..deea299 100644
--- a/tests/test_facho.py
+++ b/tests/test_facho.py
@@ -255,3 +255,28 @@ def test_facho_xml_placeholder_set_element_to_optional_with_append():
xml.set_element('./B', '2')
xml.set_element('./B', '3', append_=True)
assert xml.tostring() == '23'
+
+
+def test_facho_xml_set_attributes():
+ xml = facho.FachoXML('root')
+ xml.find_or_create_element('./A')
+
+ xml.set_attributes('./A',
+ value1 = '1',
+ value2 = '2'
+ )
+ assert xml.get_element_attribute('/root/A', 'value1') == '1'
+ assert xml.get_element_attribute('/root/A', 'value2') == '2'
+
+
+def test_facho_xml_set_attributes_not_set_optional():
+ xml = facho.FachoXML('root')
+ xml.find_or_create_element('./A')
+
+ xml.set_attributes('./A',
+ value1 = None,
+ value2 = '2'
+ )
+ with pytest.raises(KeyError):
+ xml.get_element_attribute('/root/A', 'value1')
+ assert xml.get_element_attribute('/root/A', 'value2') == '2'
diff --git a/tests/test_nomina.py b/tests/test_nomina.py
index 1aef5ac..50d9912 100644
--- a/tests/test_nomina.py
+++ b/tests/test_nomina.py
@@ -20,3 +20,31 @@ def test_adicionar_devengado_Basico():
xml = nomina.toFachoXML()
assert xml.get_element_attribute('/fe:NominaIndividual/Devengados/Basico', 'DiasTrabajados') == '30'
assert xml.get_element_attribute('/fe:NominaIndividual/Devengados/Basico', 'SueldoTrabajado') == '1000000.0'
+
+def test_adicionar_devengado_transporte():
+ nomina = fe.nomina.DIANNominaIndividual()
+
+ nomina.adicionar_devengado(fe.nomina.DevengadoTransporte(
+ auxilio_transporte = fe.nomina.Amount(2_000_000)
+ ))
+
+ xml = nomina.toFachoXML()
+ assert xml.get_element_attribute('/fe:NominaIndividual/Devengados/Transporte', 'AuxilioTransporte') == '2000000.0'
+
+def test_adicionar_devengado_transporte_muchos():
+ nomina = fe.nomina.DIANNominaIndividual()
+
+ nomina.adicionar_devengado(fe.nomina.DevengadoTransporte(
+ auxilio_transporte = fe.nomina.Amount(2_000_000)
+ ))
+
+ nomina.adicionar_devengado(fe.nomina.DevengadoTransporte(
+ auxilio_transporte = fe.nomina.Amount(3_000_000)
+ ))
+
+ xml = nomina.toFachoXML()
+ print(xml)
+ assert str(xml) == """
+
+"""
+