Spaces:
Sleeping
Sleeping
File size: 3,658 Bytes
ca18aa5 | 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 | import copy
import io
import unittest
import zipfile
from docx import Document
from docx.oxml import parse_xml
from docx.oxml.ns import qn
from document.evolutivo import construction_cub_notes, construction_groups
from document.footnotes import add_first_footnote
from test_evolutivo_documento import fixture, resolved
class CubNotesTests(unittest.TestCase):
def notes(self, doc):
stream=io.BytesIO();doc.save(stream)
with zipfile.ZipFile(stream) as archive:
root=parse_xml(archive.read('word/footnotes.xml'))
return [''.join(t.text or '' for t in n.iter(qn('w:t'))).strip() for n in root if int(n.get(qn('w:id'))) > 0]
def test_one_row_per_construction_saved_values_and_composition_in_footnotes(self):
data=fixture((2021,2022,2023,2024,2025))
for year in data['anos']:
simple=copy.deepcopy(year['construcao']['construcoes'][0])
simple.update(id='simples',seq=2,nome='Galpão simples',cubTipo='GI (Galpao Industrial)',cubCompostoAtivo=False,valorCub=1000)
year['construcao']['construcoes'].append(simple)
imported=resolved(data)
doc=Document()
intro=doc.add_paragraph('O custo unitário básico (CUB) é empregado no cálculo.')
percent=doc.add_paragraph('CUNIT = CUB × (% CUB / 100)')
doc.add_paragraph('CUB histórico, referência temporal e adequações')
construction_cub_notes(doc,construction_groups(imported['avaliacoes']))
self.assertEqual(len(doc.tables),1)
table=doc.tables[0]
self.assertEqual(len(table.rows),3)
self.assertEqual(len(table.columns),7)
self.assertEqual(table.cell(1,1).text,'CUB composto')
self.assertEqual(table.cell(2,1).text,'GI (100%)')
self.assertEqual([c.text for c in table.rows[1].cells][2:],['R$ 1.400,00']*5)
self.assertEqual([c.text for c in table.rows[2].cells][2:],['R$ 1.000,00']*5)
notes=self.notes(doc)
self.assertEqual(len(notes),6)
self.assertIn('% do CUB',notes[1])
self.assertIn('valor do CUB por metro quadrado',notes[2])
self.assertIn('tipo ou composição de CUB',notes[3])
composite=next(n for n in notes if 'média ponderada' in n)
self.assertIn('GI: 60,00%; R1-N: 40,00%',composite)
self.assertIn('Todos os exercícios',composite)
self.assertTrue(any('GI: Galpao industrial' in n for n in notes))
self.assertIsNotNone(intro._p.find('.//'+qn('w:footnoteReference')))
self.assertIsNotNone(percent._p.find('.//'+qn('w:footnoteReference')))
self.assertFalse(any('grupo dos dados' in p.text or 'média ponderada' in p.text for p in doc.paragraphs))
self.assertEqual(intro.text,'O custo unitário básico (CUB) é empregado no cálculo.')
def test_first_occurrence_marker_preserves_text_and_formatting(self):
doc=Document()
first=doc.add_paragraph()
first.add_run('Projeto ')
first.add_run('CUB composto e CUB simples.').italic=True
later=doc.add_paragraph('Outro CUB composto.')
add_first_footnote(doc,r'CUB composto','Explicação técnica.')
self.assertEqual(first.text,'Projeto CUB composto e CUB simples.')
self.assertEqual(first.runs[1].text,'CUB composto')
self.assertTrue(first.runs[1].italic)
self.assertIsNotNone(first.runs[2]._r.find(qn('w:footnoteReference')))
self.assertTrue(first.runs[3].italic)
self.assertIsNone(later._p.find('.//'+qn('w:footnoteReference')))
self.assertEqual(self.notes(doc),['Explicação técnica.'])
if __name__=='__main__':
unittest.main()
|