def test_administrative_function(self):
        """La capital de la provincia debería tener funcion ==
        CAPITAL_PROVINCIA."""
        step = CensusLocalitiesExtractionStep()
        census_localities = step.run(self._tmp_census_localities, self._ctx)

        census_locality = self._ctx.session.query(census_localities).get(
            '70028010')
        self.assertEqual(census_locality.funcion, 'CAPITAL_PROVINCIA')
    def test_id_change(self):
        """Si se modifica el ID de una localidad censal, se debería eliminar la
        localidad censal con el ID antiguo y se debería generar una nueva en la
        tabla georef_localidades_censales."""
        # Ejecutar la extracción por primera vez
        step = CensusLocalitiesExtractionStep()
        step.run(self._tmp_census_localities, self._ctx)

        # Modificar el ID de una localidad censal
        self._ctx.session.query(self._tmp_census_localities).\
            filter_by(link='70091060').\
            update({'link': '70091099'})

        step.run(self._tmp_census_localities, self._ctx)
        report_data = self._ctx.report.get_data(
            'census_localities_extraction')
        self.assertListEqual(report_data['new_entities_ids'], ['70091099'])
        self.assertListEqual(report_data['deleted_entities_ids'],
                             ['70091060'])
    def test_municipality(self):
        """Si una localidad censal está geográficamente contenida por un
        municipio, se debería establecer ese municipio como su propiedad
        'municipio_id'."""
        step = CensusLocalitiesExtractionStep()
        census_localities = step.run(self._tmp_census_localities, self._ctx)

        census_locality = self._ctx.session.query(census_localities).get(
            '70091060')
        self.assertEqual(census_locality.municipio_id, '700091')
    def test_single(self):
        """Las localidades censales deberían poder ser procesadas desde la
        tabla tmp_localidades_censales e insertadas en la tabla correspondiente
        georef_localidades_censales."""
        step = CensusLocalitiesExtractionStep()
        census_localities = step.run(self._tmp_census_localities, self._ctx)

        self.assertEqual(self._ctx.session.query(census_localities).count(),
                         SAN_JUAN_CENSUS_LOCALITIES_COUNT)

        report_data = self._ctx.report.get_data('census_localities_extraction')
        self.assertEqual(len(report_data['new_entities_ids']),
                         SAN_JUAN_CENSUS_LOCALITIES_COUNT)
    def test_clean_string(self):
        """Los campos de texto deberían ser normalizados en el proceso de
        normalización."""
        census_locality_id = '70091060'
        self._ctx.session.query(self._tmp_census_localities).\
            filter_by(link=census_locality_id).\
            update({'localidad': '  LAS FLORES   \n\nLAS FLORES2'})

        step = CensusLocalitiesExtractionStep()
        census_localities = step.run(self._tmp_census_localities, self._ctx)
        name = self._ctx.session.query(census_localities).\
            filter_by(id=census_locality_id).\
            one().nombre
        self.assertEqual(name, 'LAS FLORES')
    def test_invalid_department(self):
        """Si una localidad censal hace referencia a un departamento
        inexistente, se debería reportar el error."""
        new_id = '70555060'
        self._ctx.session.query(self._tmp_census_localities).\
            filter_by(link='70091060').\
            update({'link': new_id})

        step = CensusLocalitiesExtractionStep()
        census_localities = step.run(self._tmp_census_localities, self._ctx)
        query = self._ctx.session.query(census_localities).filter_by(id=new_id)
        self.assertEqual(query.count(), 0)

        report_data = self._ctx.report.get_data('census_localities_extraction')
        self.assertEqual(len(report_data['errors']), 1)
        self.assertEqual(len(report_data['new_entities_ids']),
                         SAN_JUAN_CENSUS_LOCALITIES_COUNT - 1)