Spaces:
Sleeping
Sleeping
File size: 4,772 Bytes
9c306e9 6bc379e 9c306e9 6bc379e 9c306e9 6bc379e 9c306e9 6bc379e 9c306e9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 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()
|