Spaces:
Sleeping
Sleeping
File size: 4,392 Bytes
bb18f65 | 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 | import copy
import unittest
from docx import Document
from docx.opc.constants import RELATIONSHIP_TYPE as RT
from docx.oxml import parse_xml
from docx.oxml.ns import qn
from document.evolutivo import construction_characteristics, construction_groups
from test_evo_adjustments import body
from test_evolutivo_documento import fixture, resolved, all_text
def notes(doc):
root = parse_xml(doc.part.part_related_by(RT.FOOTNOTES).blob)
return [''.join(n.itertext(qn('w:t'))) for n in root if int(n.get(qn('w:id'))) > 0]
class ConservationNotesTests(unittest.TestCase):
def data(self):
data = fixture((2021, 2022))
for year in data['anos']:
year['construcao']['avaliacao']['referenciasCalculo'] = {
'vidaUtilTipos': [{'tipo': 'GALPOES (DEPOSITOS)', 'vidaUtil': 70}],
'estadosConservacao': [{'estado': 'C - regular', 'coeficiente': .0252,
'descricao': 'Descrição histórica da classe regular.'}]}
year['construcao']['construcoes'][0].update(estadoConservacao='C - regular', coefHeidecke=.0317)
return data
def test_codes_and_saved_coefficients_in_tables_descriptions_only_in_notes(self):
imported = resolved(self.data())
before = copy.deepcopy(imported)
doc = body(imported)
characteristics = next(t for t in doc.tables if t.cell(0, 1).text == 'Tipo / ano')
self.assertEqual([c.text for c in characteristics.rows[0].cells][-2:], ['Estado de conservação', 'H'])
self.assertEqual([c.text for c in characteristics.rows[1].cells][-2:], ['C', '0,0317'])
calculation = next(t for t in doc.tables if any(r.cells[0].text == 'Coeficiente H' for r in t.rows))
for label, expected in [('Estado de conservação', 'C'), ('Coeficiente H', '0,0317')]:
row = next(r for r in calculation.rows if r.cells[0].text == label)
self.assertEqual([c.text for c in row.cells[1:]], [expected, expected])
self.assertNotIn('Descrição histórica', all_text(doc))
self.assertNotIn('Referência de vida útil para', all_text(doc))
self.assertNotIn('Ajuste manual de vida consumida', all_text(doc))
footnotes = notes(doc)
self.assertEqual(sum('Descrição histórica da classe regular.' in text for text in footnotes), 1)
self.assertTrue(any('70 anos' in text and 'R é o valor residual' in text for text in footnotes))
self.assertTrue(any('IPTU 2022; IPTU 2023' in text and 'padrão 50,00%; adotado 40,00%' in text for text in footnotes))
self.assertNotIn('SEGREDO INTERNO', ' '.join(footnotes))
self.assertEqual(imported, before)
def test_shared_class_is_explained_once_and_historical_changes_keep_their_scope(self):
data = self.data()
for year in data['anos']:
second = copy.deepcopy(year['construcao']['construcoes'][0])
second.update(id='segundo', seq=2, nome='Galpão B')
year['construcao']['construcoes'].append(second)
data['anos'][1]['construcao']['avaliacao']['referenciasCalculo']['estadosConservacao'][0]['descricao'] = 'Caracterização revista no segundo exercício.'
doc = Document()
construction_characteristics(doc, construction_groups(resolved(data)['avaliacoes']))
self.assertEqual(len(doc.tables[0].rows), 5)
for index in (1, 3):
self.assertIn('IPTU 2022', doc.tables[0].cell(index, 0).text)
self.assertIn('IPTU 2023', doc.tables[0].cell(index + 1, 0).text)
self.assertEqual(sum('Descrição histórica' in text for text in notes(doc)), 1)
self.assertEqual(sum('Caracterização revista' in text for text in notes(doc)), 1)
def test_unknown_state_keeps_original_label_without_borrowing_catalog_description(self):
data = self.data()
for year in data['anos']:
year['construcao']['construcoes'][0]['estadoConservacao'] = 'C - classificação especial'
doc = Document()
construction_characteristics(doc, construction_groups(resolved(data)['avaliacoes']))
self.assertIn('C - classificação especial', ' '.join(notes(doc)))
self.assertNotIn('Descrição histórica', ' '.join(notes(doc)))
self.assertIn('não foi preservada', ' '.join(notes(doc)))
if __name__ == '__main__':
unittest.main()
|