teste_docs / tests /test_equations.py
gui-sparim's picture
Completa as equações de custo com legendas compactas
6bc379e verified
Raw History Blame Contribute Delete
4.77 kB
import copy
import io
import unittest
import zipfile
from lxml import etree
from docx import Document
from docx.oxml import parse_xml
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
from unittest.mock import patch
from document.equations import cost_equations, depreciation_equations
from document.generator import LaudoGenerator
from document.public_text import public_text
from document.footnotes import add_footnote, add_first_footnote
from document.formatters import add_body_text
from test_evolutivo_documento import fixture,resolved
class DepreciationEquationTests(unittest.TestCase):
def test_cost_formulas_preserve_percentage_conversion_and_first_occurrence_note(self):
doc=Document();cost_equations(doc)
formulas=list(doc.element.body.iter(qn('m:oMath')))
self.assertEqual(len(formulas),2)
self.assertEqual([''.join(t.text or '' for t in m.iter(qn('m:t'))) for m in formulas],
['CUNIT = CUB × % CUB100','VC = A × CUNIT × (1 + BDI100) × Kd'])
self.assertEqual(len(list(formulas[0].iter(qn('m:f')))),1)
self.assertEqual(len(list(formulas[1].iter(qn('m:f')))),1)
expression_xml=etree.tostring(formulas[0])
add_first_footnote(doc,r'%\s+CUB','Percentual de adequação do CUB.')
self.assertEqual(etree.tostring(formulas[0]),expression_xml)
self.assertEqual(len(list(doc.paragraphs[0]._p.iter(qn('w:footnoteReference')))),1)
self.assertEqual(len(list(doc.paragraphs[1]._p.iter(qn('w:footnoteReference')))),0)
for index in (1,3):
self.assertEqual({r.font.size.pt for r in doc.paragraphs[index].runs},{8})
def test_editable_equations_keep_fraction_power_subscript_and_small_legends(self):
doc=Document();depreciation_equations(doc)
stream=io.BytesIO();doc.save(stream);stream.seek(0)
reopened=Document(stream)
math=list(reopened.element.body.iter(qn('m:oMath')))
self.assertEqual(len(math),3)
self.assertEqual(len(list(math[0].iter(qn('m:f')))),1)
self.assertEqual(len(list(math[0].iter(qn('m:sSup')))),1)
self.assertEqual(len(list(math[2].iter(qn('m:sSub')))),1)
texts=[''.join(t.text or '' for t in formula.iter(qn('m:t'))) for formula in math]
self.assertEqual(texts,['Ross = q + q22','K = 1 − (1 − Ross) × (1 − H)','Kd = R + (1 − K) × (1 − R)'])
self.assertEqual(len(reopened.paragraphs),6)
for index in (0,2,4):
self.assertEqual(reopened.paragraphs[index].alignment,WD_ALIGN_PARAGRAPH.CENTER)
self.assertTrue(reopened.paragraphs[index].paragraph_format.keep_with_next)
legend=reopened.paragraphs[index+1]
self.assertEqual({r.font.size.pt for r in legend.runs},{8})
self.assertIn('dividindo o percentual',reopened.paragraphs[1].text)
self.assertIn('estado de conservação',reopened.paragraphs[3].text)
self.assertIn('percentual ÷ 100',reopened.paragraphs[5].text)
def test_internal_references_stay_out_of_body_tables_and_footnotes(self):
imported=resolved(fixture((2021,)))
row=imported['avaliacoes'][0]
row['observacoes']='Resultados preservados no MESA.'
row['complementos']={'justificativa_fc':'Condição registrada no modelo MESA.'}
original=copy.deepcopy(imported)
doc=Document()
with patch('document.evolutivo.matching_local',return_value=(None,'')):
LaudoGenerator()._gerar_corpo(doc,{'avaliacoes_importadas':imported},{})
LaudoGenerator()._gerar_cabecalho(doc,{'modelo_avaliacao':'modelo MESA'})
add_footnote(doc,add_body_text(doc,'Referência técnica'),'Coeficientes da MESA preservados na avaliação.')
stream=io.BytesIO();doc.save(stream)
with zipfile.ZipFile(stream) as archive:
for name in ['word/document.xml','word/footnotes.xml']:
root=parse_xml(archive.read(name))
text=' '.join(t.text or '' for t in root.iter(qn('w:t')))
self.assertNotIn('MESA',text)
self.assertNotIn('versão documental',text)
self.assertNotIn('catálogo sincronizado',text)
self.assertEqual(imported,original)
def test_public_wording_preserves_technical_names_and_ordinary_words(self):
self.assertEqual(public_text('Método de Ross-Heidecke; ABNT NBR 14653-2; CUB.'),'Método de Ross-Heidecke; ABNT NBR 14653-2; CUB.')
self.assertEqual(public_text('modelo MESA'),'modelo estatístico')
self.assertEqual(public_text('salvo no MESA'),'salvo na avaliação de origem')
self.assertEqual(public_text('mesa de apoio'),'mesa de apoio')
if __name__=='__main__':
unittest.main()