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()