def test_filters_data_before_2010(self, mock_orcado, mock_empenhado):
        mock_orcado.return_value = 'mock_o'
        mock_empenhado.return_value = 'mock_e'

        # not expected
        mommy.make(
            Execucao,
            year=date(2009, 1, 1))

        exec_2010 = mommy.make(
            Execucao,
            year=date(2010, 1, 1))
        execucoes = Execucao.objects.all()

        serializer = GeologiaSerializer(execucoes)
        ret = serializer.prepare_subgrupo_data()

        expected = {
            'orcado': ['mock_o'],
            'empenhado': ['mock_e'],
        }

        assert expected == ret

        assert 1 == mock_orcado.call_count
        assert [exec_2010] == list(mock_orcado.call_args[0][0])

        assert 1 == mock_empenhado.call_count
        assert [exec_2010] == list(mock_empenhado.call_args[0][0])
    def test_get_subgrupo_year_empenhado_data(self, mock_empenhado):
        mock_empenhado.return_value = 'mock_e'

        year = date(2018, 1, 1)
        execs_sub1 = mommy.make(
            Execucao,
            year=year,
            subgrupo__id=1,
            _quantity=2)
        execs_sub2 = mommy.make(
            Execucao,
            year=year,
            subgrupo__id=2,
            _quantity=2)
        execucoes = Execucao.objects.all()

        serializer = GeologiaSerializer([])
        ret = serializer.get_subgrupo_year_empenhado_data(execucoes)

        expected = {
            'year': year.strftime('%Y'),
            'subgrupos': ['mock_e', 'mock_e'],
        }

        assert expected == ret

        execs = [execs_sub1, execs_sub2]
        for exec_subgrupo, call in zip(execs, mock_empenhado.mock_calls):
            assert set(exec_subgrupo) == set(call[1][0])
예제 #3
0
    def test_serialize_list_of_subfuncoes(self):
        subfuncao_1 = mommy.make('Subfuncao', desc='Turismo')
        subfuncao_2 = mommy.make('Subfuncao', desc='Educação Infantil')
        subfuncoes = [subfuncao_1, subfuncao_2]
        expected = [
            dict(id=subfuncao.id, desc=subfuncao.desc, selecionado=False)
            for subfuncao in subfuncoes
        ]

        # selected funcao
        subfuncao_3 = mommy.make('Subfuncao', desc='Selected Function')
        expected.append(
            dict(id=subfuncao_3.id, desc=subfuncao_3.desc, selecionado=True))
        expected.sort(key=lambda s: s['desc'])

        mommy.make(Execucao,
                   subfuncao=cycle([subfuncao_1, subfuncao_2, subfuncao_3]),
                   _quantity=3)
        queryset = Execucao.objects.all()

        # not expected
        mommy.make('Subfuncao')

        serialized = GeologiaSerializer(queryset,
                                        subfuncao_id=subfuncao_3.id).data

        assert expected == serialized.get('subfuncoes')
    def test_prepare_subgrupo_data(self, mock_orcado, mock_empenhado):
        mock_orcado.return_value = 'mock_o'
        mock_empenhado.return_value = 'mock_e'

        execs_2017 = mommy.make(
            Execucao,
            year=date(2017, 1, 1),
            _quantity=2)
        execs_2018 = mommy.make(
            Execucao,
            year=date(2018, 1, 1),
            _quantity=2)
        execucoes = Execucao.objects.all()

        serializer = GeologiaSerializer(execucoes)
        ret = serializer.prepare_subgrupo_data()

        expected = {
            'orcado': ['mock_o', 'mock_o'],
            'empenhado': ['mock_e', 'mock_e'],
        }

        assert expected == ret

        execs = [execs_2017, execs_2018]
        for exec_year, call in zip(execs, mock_orcado.mock_calls):
            assert set(exec_year) == set(call[1][0])
        for exec_year, call in zip(execs, mock_empenhado.mock_calls):
            assert set(exec_year) == set(call[1][0])
예제 #5
0
    def test_get_subgrupo_empenhado_data(self, empenhado_fixture):
        gnds, empenhado_total = empenhado_fixture

        year = date(2017, 1, 1)
        deflator = Deflator.objects.get(year=year)
        empenhado_total = empenhado_total / deflator.index_number

        subgrupo = mommy.make(Subgrupo, id=1)
        mommy.make(Execucao,
                   year=year,
                   empenhado_liquido=cycle([gnd['empenhado'] for gnd in gnds]),
                   subgrupo=subgrupo,
                   _quantity=3)
        execucoes = Execucao.objects.all()

        expected = {
            'subgrupo': subgrupo.desc,
            "total": empenhado_total,
            "gnds": [],
        }

        serializer = GeologiaSerializer([])
        ret = serializer.get_subgrupo_empenhado_data(execucoes)

        assert expected == ret
예제 #6
0
    def test_get_subgrupo_year_empenhado_data(self, mock_empenhado):
        mock_empenhado.return_value = 'mock_e'

        subgrupo1 = mommy.make(Subgrupo, desc="Uniceu")
        subgrupo2 = mommy.make(Subgrupo, desc="Alimentação Escolar")

        year = date(2018, 1, 1)
        execs_sub1 = mommy.make(Execucao,
                                year=year,
                                subgrupo=subgrupo1,
                                _quantity=2)
        execs_sub2 = mommy.make(Execucao,
                                year=year,
                                subgrupo=subgrupo2,
                                _quantity=2)
        execucoes = Execucao.objects.all()

        serializer = GeologiaSerializer([])
        ret = serializer.get_subgrupo_year_empenhado_data(execucoes)

        expected = {
            'year': year.strftime('%Y'),
            'subgrupos': ['mock_e', 'mock_e'],
        }

        assert expected == ret

        execs = [execs_sub2, execs_sub1]  # Alphabetical order
        for exec_subgrupo, call in zip(execs, mock_empenhado.mock_calls):
            assert set(exec_subgrupo) == set(call[1][0])
    def test_get_empenhado_gnd_list_when_total_is_none(self):
        gnds_dicts = [
            {'gnd_geologia__desc': 'gnd1', 'gnd_geologia__slug': 'g1',
             'empenhado': None},
            {'gnd_geologia__desc': 'gnd2', 'gnd_geologia__slug': 'g2',
             'empenhado': None},
        ]
        empenhado_total = None

        serializer = GeologiaSerializer([])
        assert serializer._get_empenhado_gnds_list(gnds_dicts, empenhado_total)
    def test_serialize_list_of_gnds(self):
        gnd_1 = mommy.make('GndGeologia',  desc='Consultoria',
                           slug='consulting')
        gnd_2 = mommy.make('GndGeologia',  desc='Custeio operacional',
                           slug='operational')
        gnds = [gnd_1, gnd_2]
        expected = [dict(slug=gnd.slug, desc=gnd.desc) for gnd in gnds]

        queryset = Execucao.objects.all()
        serialized = GeologiaSerializer(queryset).data

        assert expected == serialized.get('gnds')
    def test_get_orcado_gnds_list(self, orcado_fixture):
        gnds, orcado_total = orcado_fixture

        expected = [
            {
                "name": gnd['gnd_geologia__desc'],
                "slug": gnd['gnd_geologia__slug'],
                "value": gnd['orcado'],
                "percent": gnd['orcado'] / orcado_total
            }
            for gnd in gnds
        ]

        serializer = GeologiaSerializer([])
        ret = serializer._get_orcado_gnds_list(gnds, orcado_total)

        assert expected == ret
예제 #10
0
    def test_serializes_geologia_data(self):
        mommy.make(Execucao,
                   subgrupo__id=1,
                   orgao__id=SME_ORGAO_ID,
                   _quantity=2)
        execucoes = Execucao.objects.all()
        serializer = GeologiaSerializer(execucoes)

        response = self.get()
        assert serializer.data == response.data
    def test_get_empenhado_gnds_list(self, empenhado_fixture):
        gnds, empenhado_total = empenhado_fixture
        expected = []
        for gnd in gnds:
            if gnd['empenhado'] is None:
                gnd['empenhado'] = 0

            expected.append({
                "name": gnd['gnd_geologia__desc'],
                "slug": gnd['gnd_geologia__slug'],
                "value": gnd['empenhado'],
                "percent": gnd['empenhado'] / empenhado_total
            })

        serializer = GeologiaSerializer([])
        ret = serializer._get_empenhado_gnds_list(
            gnds, empenhado_total)

        assert expected == ret
예제 #12
0
    def test_prepare_subfuncao_data(self, mock_orcado, mock_empenhado):
        mock_orcado.return_value = 'mock_o'
        mock_empenhado.return_value = 'mock_e'

        subfuncao_id = 1

        execs_2017_p1 = mommy.make(Execucao,
                                   year=date(2017, 1, 1),
                                   subfuncao__id=subfuncao_id,
                                   _quantity=2)
        mommy.make(Execucao,
                   year=date(2017, 1, 1),
                   subfuncao__id=2,
                   _quantity=2)
        execs_2018_p1 = mommy.make(Execucao,
                                   year=date(2018, 1, 1),
                                   subfuncao__id=subfuncao_id,
                                   _quantity=2)
        mommy.make(Execucao,
                   year=date(2018, 1, 1),
                   subfuncao__id=2,
                   _quantity=2)

        execucoes = Execucao.objects.all()

        serializer = GeologiaSerializer(execucoes, subfuncao_id=subfuncao_id)
        ret = serializer.prepare_data(subfuncao_id=subfuncao_id)

        expected = {
            'subfuncao_id': subfuncao_id,
            'orcado': ['mock_o', 'mock_o'],
            'empenhado': ['mock_e', 'mock_e'],
        }

        assert expected == ret

        execs = [execs_2017_p1, execs_2018_p1]
        for exec_year, call in zip(execs, mock_orcado.mock_calls):
            assert set(exec_year) == set(call[1][0])
        for exec_year, call in zip(execs, mock_empenhado.mock_calls):
            assert set(exec_year) == set(call[1][0])
    def test_get_empenhado_data_by_year(self, empenhado_fixture):
        gnds, empenhado_total = empenhado_fixture

        year = date(2017, 1, 1)
        mommy.make(
            Execucao,
            year=year,
            empenhado_liquido=cycle([gnd['empenhado'] for gnd in gnds]),
            _quantity=3)
        execucoes = Execucao.objects.all()

        expected = {
            "year": year.strftime("%Y"),
            "total": empenhado_total,
            "gnds": [],
        }

        serializer = GeologiaSerializer([])
        ret = serializer._get_empenhado_data_by_year(execucoes)

        assert expected == ret
예제 #14
0
    def test_get_orcado_gnds_list(self, orcado_fixture):
        gnds, orcado_total = orcado_fixture

        deflator = Deflator.objects.get(year__year=2017)

        expected = []
        for gnd in gnds:
            orcado = gnd['orcado'] / deflator.index_number

            gnd_dict = {
                "name": gnd['gnd_geologia__desc'],
                "slug": gnd['gnd_geologia__slug'],
                "value": orcado,
                "percent": orcado / orcado_total
            }
            expected.append(gnd_dict)

        serializer = GeologiaSerializer([])
        ret = serializer._get_orcado_gnds_list(gnds, orcado_total,
                                               deflator.year)

        assert expected == ret
    def test_get_subgrupo_orcado_data(self, orcado_fixture):
        gnds, orcado_total = orcado_fixture

        year = date(2017, 1, 1)
        subgrupo = mommy.make(Subgrupo, id=1)
        mommy.make(
            Execucao,
            year=year,
            orcado_atualizado=cycle([gnd['orcado'] for gnd in gnds]),
            subgrupo=subgrupo,
            _quantity=3)
        execucoes = Execucao.objects.all()

        expected = {
            "subgrupo": subgrupo.desc,
            "total": orcado_total,
            "gnds": [],
        }

        serializer = GeologiaSerializer([])
        ret = serializer.get_subgrupo_orcado_data(execucoes)

        assert expected == ret
예제 #16
0
    def test_get_orcado_data_by_year(self, orcado_fixture):
        gnds, orcado_total = orcado_fixture

        year = date(2017, 1, 1)
        deflator = Deflator.objects.get(year=year)
        orcado_total = orcado_total / deflator.index_number

        mommy.make(Execucao,
                   year=year,
                   orcado_atualizado=cycle([gnd['orcado'] for gnd in gnds]),
                   _quantity=3)
        execucoes = Execucao.objects.all()

        expected = {
            "year": year.strftime("%Y"),
            "total": orcado_total,
            "gnds": [],
        }

        serializer = GeologiaSerializer([])
        ret = serializer._get_orcado_data_by_year(execucoes)

        assert expected == ret
예제 #17
0
    def test_returns_date_updated(self, mock_orcado, mock_empenhado):
        mock_orcado.return_value = 'mock_o'
        mock_empenhado.return_value = 'mock_e'

        subgrupo = mommy.make(Subgrupo, grupo__id=1)
        with freeze_time('2019-01-01'):
            mommy.make('Execucao', subgrupo=subgrupo)

        # not expected
        with freeze_time('2000-01-01'):
            mommy.make('Execucao', subgrupo=subgrupo)

        serializer = GeologiaSerializer(Execucao.objects.all())
        assert '01/01/2019' == serializer.data['dt_updated']
예제 #18
0
    def test_get_empenhado_gnds_list(self, empenhado_fixture):
        gnds, empenhado_total = empenhado_fixture

        deflator = Deflator.objects.get(year__year=2018)

        expected = []
        for gnd in gnds:
            if gnd['empenhado'] is None:
                gnd['empenhado'] = 0

            empenhado = gnd['empenhado'] / deflator.index_number

            expected.append({
                "name": gnd['gnd_geologia__desc'],
                "slug": gnd['gnd_geologia__slug'],
                "value": empenhado,
                "percent": empenhado / empenhado_total
            })

        serializer = GeologiaSerializer([])
        ret = serializer._get_empenhado_gnds_list(gnds, empenhado_total,
                                                  deflator.year)

        assert expected == ret
예제 #19
0
    def test_filters_execucoes_without_sme_orgao(self):
        mommy.make(Execucao,
                   subgrupo=None,
                   orgao__id=SME_ORGAO_ID,
                   _quantity=2)
        mommy.make(Execucao,
                   subgrupo__id=1,
                   orgao__id=SME_ORGAO_ID,
                   _quantity=2)
        # not expected
        mommy.make(Execucao, subgrupo__id=1, orgao__id=99, _quantity=2)

        execucoes = Execucao.objects.filter(orgao__id=SME_ORGAO_ID)
        serializer = GeologiaSerializer(execucoes)

        response = self.get()
        assert serializer.data == response.data
예제 #20
0
    def test_filters_execucoes_from_minimo_legal(self):
        mommy.make(Execucao,
                   subgrupo__id=1,
                   orgao__id=SME_ORGAO_ID,
                   is_minimo_legal=False,
                   _quantity=2)
        mommy.make(Execucao,
                   subgrupo__id=1,
                   orgao__id=SME_ORGAO_ID,
                   is_minimo_legal=True,
                   _quantity=2)
        execucoes = Execucao.objects.filter(subgrupo__isnull=False,
                                            is_minimo_legal=False,
                                            orgao__id=SME_ORGAO_ID)
        serializer = GeologiaSerializer(execucoes)

        response = self.get()
        assert serializer.data == response.data
 def test_calculate_percent(self):
     serializer = GeologiaSerializer([])
     assert 0 == serializer._calculate_percent(None, 100)
     assert 0 == serializer._calculate_percent(10, None)
     assert 0.1 == serializer._calculate_percent(10, 100)