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