def test_caba_virtual_department(self): """Una localidad censal debería poder pertenecer al departamento '02000', aunque el mismo no exista en la base de datos (ver comentario en constants.py).""" prov = Province( id='02', nombre='test', nombre_completo='test', lat=0, lon=0, iso_id='test', iso_nombre='test', categoria='test', fuente='test', geometria=TEST_MULTIPOLYGON ) self._ctx.session.add(prov) new_census_locality = self._tmp_census_localities( link='02000000', localidad='test', func_loc='0', tiploc='1', geom=TEST_POINT ) self._ctx.session.add(new_census_locality) self._ctx.session.commit() step = CensusLocalitiesExtractionStep() census_localities = step.run(self._tmp_census_localities, self._ctx) loc = self._ctx.session.query(census_localities).get('02000000') self.assertTrue(loc.departamento_id is None)
def create_test_census_localities(cls, extract=False): # Cargar las localidades censales de la provincia de prueba cls.copy_test_file( 'test_localidades_censales/test_localidades_censales.dbf') cls.copy_test_file( 'test_localidades_censales/test_localidades_censales.shp') cls.copy_test_file( 'test_localidades_censales/test_localidades_censales.shx') cls.copy_test_file( 'test_localidades_censales/test_localidades_censales.prj') loader = Ogr2ogrStep(table_name='tmp_localidades_censales', geom_type='Point', env={'SHAPE_ENCODING': 'utf-8'}, metadata=cls._metadata, db_config=cls._ctx.config['test_db']) cls._tmp_census_localities = loader.run('test_localidades_censales', cls._ctx) if extract: step = CensusLocalitiesExtractionStep() step.run(cls._tmp_census_localities, cls._ctx) return cls._tmp_census_localities
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_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_id_length(self): """No se debería poder crear una localidad censal con longitud de ID inválida.""" step = CensusLocalitiesExtractionStep() census_locality = self._ctx.session.\ query(self._tmp_census_localities).\ filter_by(link='70091060').one() self._ctx.session.expunge(census_locality) census_locality.link = '700910600000' # pylint: disable=protected-access with self.assertRaises(ValidationException): step._process_entity(census_locality, self._ctx.cached_session(), self._ctx)
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)
def test_field_change(self): """Si se modifica un campo de una localidad censal (no el ID), luego de la extracción el campo nuevo debería figurar en georef_localidades_censales.""" # Ejecutar la extracción por primera vez census_locality_id = '70091060' step = CensusLocalitiesExtractionStep() step.run(self._tmp_census_localities, self._ctx) self._ctx.session.query(self._tmp_census_localities).\ filter_by(link=census_locality_id).\ update({'localidad': 'Don Bosco'}) localities = step.run(self._tmp_census_localities, self._ctx) name = self._ctx.session.query(localities).\ filter_by(id=census_locality_id).\ one().nombre self.assertEqual(name, 'Don Bosco')
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'])