def test_format_map(params, legend_at_web, expected_legend_at_web): with pyramid_oereb_test_config(): renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._params = params renderer._request = MockRequest() legend_entry = LegendEntryRecord(ImageRecord('1'.encode('utf-8')), {u'de': u'Legendeneintrag'}, u'CodeA', u'type_code_list', ThemeRecord(u'ContaminatedSites', {u'de': u'Test'}), view_service_id=1) view_service = ViewServiceRecord('http://my.wms.ch', 1, 1.0, legend_at_web, [legend_entry]) view_service.image = ImageRecord('1'.encode('utf-8')) result = renderer.format_map(view_service) assert isinstance(result, dict) expected_result = { 'Image': base64.b64encode('1'.encode('utf-8')).decode('ascii'), 'layerIndex': 1, 'layerOpacity': 1.0, 'ReferenceWMS': 'http://my.wms.ch', 'OtherLegend': [renderer.format_legend_entry(legend_entry)] } if expected_legend_at_web is not None: expected_result['LegendAtWeb'] = expected_legend_at_web assert result == expected_result
def test_get_image(): request = MockRequest() request.matchdict.update({'logo': 'oereb'}) webservice = Logo(request) result = webservice.get_image() assert isinstance(result, Response) assert result.body == Config.get_logo_config().get('oereb').content
def test_getegrid_address(pyramid_oereb_test_config, schema_json_extract, real_estate_data, address): del pyramid_oereb_test_config request = MockRequest( current_route_url='http://example.com/oereb/getegrid/json/4410/test/10' ) # Add params to matchdict as the view will do it for # /getegrid/{format}/{postalcode}/{localisation}/{number} request.matchdict.update({'format': u'json'}) request.params.update({ 'POSTALCODE': u'4410', 'LOCALISATION': u'test', 'NUMBER': u'10' }) webservice = PlrWebservice(request) response = webservice.get_egrid().json Draft4Validator.check_schema(schema_json_extract) validator = Draft4Validator(schema_json_extract) validator.validate(response) assert isinstance(response, dict) assert response.get('GetEGRIDResponse') is not None assert response.get('GetEGRIDResponse')[0].get('egrid') == u'TEST' assert response.get('GetEGRIDResponse')[0].get('number') == u'1000' assert response.get('GetEGRIDResponse')[0].get('identDN') == u'BLTEST'
def test_matchdict(params, expected): request = MockRequest() request.matchdict.update(params) service = PlrWebservice(request) params = service.__validate_extract_params__() for k, v in expected.items(): assert getattr(params, k) == v
def test_get_image(pyramid_oereb_test_config, logo_test_data): with patch.object(Config, 'logos', logo_test_data): request = MockRequest() request.matchdict.update({'logo': 'oereb', 'language': 'de'}) webservice = Logo(request) result = webservice.get_image() assert isinstance(result, Response)
def test_getegrid_gnss(): with pyramid_oereb_test_config(): request = MockRequest( current_route_url= 'http://example.com/oereb/getegrid/json/?GNSS=-19.917989937473,32.1244978460310' ) # Add params to matchdict as the view will do it for /getegrid/{format}/ request.matchdict.update({'format': u'json'}) request.params.update({'GNSS': '32.1244978460310,-19.917989937473'}) webservice = PlrWebservice(request) response = webservice.get_egrid_coord().json with open(schema_json_extract) as f: schema = json.loads(f.read()) Draft4Validator.check_schema(schema) validator = Draft4Validator(schema) validator.validate(response) assert isinstance(response, dict) real_estates = response.get('GetEGRIDResponse') assert isinstance(real_estates, list) assert len(real_estates) == 1 assert real_estates[0]['egrid'] == u'TEST' assert real_estates[0]['number'] == u'1000' assert real_estates[0]['identDN'] == u'BLTEST'
def test_sub_theme(): parameters = Parameter( response_format='xml', flavour='reduced', with_geometry=False, images=True, identdn='BL0200002829', number='1000', egrid='CH775979211712', language='de') renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._request = MockRequest() renderer._request.route_url = lambda url, **kwargs: "http://example.com/current/view" legend_entry = LegendEntryRecord( symbol=ImageRecord('1'.encode('utf-8')), legend_text={'de': 'legend1'}, type_code='LandUsePlans', type_code_list='bla', theme=ThemeRecord(u'LandUsePlans', {'de': 'Theme 1'}), sub_theme={'de': 'sub theme de'} ) content = template.render(**{ 'params': parameters, 'localized': renderer.get_localized_text, 'multilingual': renderer.get_multilingual_text, 'legend_entry': legend_entry }).decode('utf-8').split('\n') no_empty_lines = list(filter(lambda line: line != '', content)) assert no_empty_lines[19] == '<data:SubTheme>sub theme de</data:SubTheme>' assert len(no_empty_lines) == 20
def test_get_egrid_response(): with pyramid_oereb_test_config(): request = MockRequest( current_route_url='http://example.com/oereb/getegrid/json/') # Add params to matchdict as the view will do it for /getegrid/{format}/ request.matchdict.update({'format': u'json'}) view_service = ViewServiceRecord('test', 1, 1.0, {'de': 'test'}, None) record = RealEstateRecord('test', 'BL', 'test', 1, 100, MultiPolygon( [Polygon([(0, 0), (1, 1), (1, 0)])]), view_service, number='number', identdn='identdn', egrid='egrid') response = PlrWebservice(request).__get_egrid_response__([record]).json assert response == { 'GetEGRIDResponse': [{ 'egrid': 'egrid', 'number': 'number', 'identDN': 'identdn' }] }
def test_invalid_params(matchdict, params): request = MockRequest() request.matchdict.update(matchdict) request.params.update(params) service = PlrWebservice(request) with pytest.raises(HTTPBadRequest): service.__validate_extract_params__()
def test_getegrid_address(): with pyramid_oereb_test_config(): request = MockRequest( current_route_url= 'http://example.com/oereb/getegrid/json/4410/test/10') # Add params to matchdict as the view will do it for # /getegrid/{format}/{postalcode}/{localisation}/{number} request.matchdict.update({ 'format': u'json', 'postalcode': u'4410', 'localisation': u'test', 'number': u'10' }) webservice = PlrWebservice(request) response = webservice.get_egrid_address().json with open(schema_json_extract) as f: schema = json.loads(f.read()) Draft4Validator.check_schema(schema) validator = Draft4Validator(schema) validator.validate(response) assert isinstance(response, dict) assert response.get('GetEGRIDResponse') is not None assert response.get('GetEGRIDResponse')[0].get('egrid') == u'TEST' assert response.get('GetEGRIDResponse')[0].get('number') == u'1000' assert response.get('GetEGRIDResponse')[0].get('identDN') == u'BLTEST'
def test_return_no_content(): request = MockRequest() request.matchdict.update({'format': 'XML'}) request.params.update({'GEOMETRY': 'true', 'EGRID': 'MISSINGEGRID'}) service = PlrWebservice(request) response = service.get_extract_by_id() assert isinstance(response, HTTPNoContent)
def test_getegrid_ident(pyramid_oereb_test_config, schema_json_extract, geometry, real_estate_data): request = MockRequest( current_route_url='http://example.com/oereb/getegrid/json/BLTEST/1000') # Add params to matchdict as the view will do it for /getegrid/{format}/{identdn}/{number} request.matchdict.update({'format': u'json'}) request.params.update({'IDENTDN': u'BLTEST', 'NUMBER': u'1000'}) if geometry: request.params.update({'GEOMETRY': u'true'}) webservice = PlrWebservice(request) response = webservice.get_egrid().json Draft4Validator.check_schema(schema_json_extract) validator = Draft4Validator(schema_json_extract) validator.validate(response) assert isinstance(response, dict) real_estates = response.get('GetEGRIDResponse') assert isinstance(real_estates, list) assert len(real_estates) == 1 assert real_estates[0]['egrid'] == u'TEST' assert real_estates[0]['number'] == u'1000' assert real_estates[0]['identDN'] == u'BLTEST' assert real_estates[0]['type'] == u'Liegenschaft' if geometry: assert 'limit' in real_estates[0] assert 'crs' in real_estates[0]['limit'] assert 'coordinates' in real_estates[0]['limit']
def test_params(): request = MockRequest() request.matchdict.update({ 'flavour': 'REDUCED', 'format': 'XML', 'param1': 'SomeEGRID' }) request.params.update({ 'WITHIMAGES': '', 'LANG': 'de', 'TOPICS': 'top_A,top_B,top_C' }) service = PlrWebservice(request) params = service.__validate_extract_params__() expected = { 'flavour': 'reduced', 'format': 'xml', 'geometry': False, 'images': True, 'egrid': 'SomeEGRID', 'language': 'de', 'topics': ['top_A', 'top_B', 'top_C'] } for k, v in expected.items(): assert getattr(params, k) == v
def test_get_image_invalid(): request = MockRequest() request.matchdict.update({ 'fosnr': '0' }) webservice = Municipality(request) with pytest.raises(HTTPNotFound): webservice.get_image()
def test_matchdict(pyramid_oereb_test_config, matchdict, expected): request = MockRequest() request.matchdict.update(matchdict) request.params.update({'EGRID': 'egrid'}) service = PlrWebservice(request) params = service.__validate_extract_params__() for k, v in expected.items(): assert getattr(params, k) == v
def test_format_url(real_estate_data): request = MockRequest() request.matchdict.update({'format': 'URL'}) request.params.update({'EGRID': 'TEST'}) service = PlrWebservice(request) response = service.get_extract_by_id() assert isinstance(response, HTTPFound) assert response.location == 'https://geoview.bl.ch/oereb/?egrid=TEST'
def test_sub_theme(DummyRenderInfo, xml_templates, pyramid_oereb_test_config): template = xml_templates.get_template('public_law_restriction.xml') parameters = Parameter(response_format='xml', with_geometry=False, images=True, signed=False, identdn='BL0200002829', number='1000', egrid='CH775979211712', language='de') renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._request = MockRequest() renderer._request.route_url = lambda url, **kwargs: "http://example.com/current/view" theme = ThemeRecord(u'ch.Nutzungsplanung', {'de': 'Theme 1'}, 1) subtheme = ThemeRecord(u'ch.Nutzungsplanung', {'de': 'sub-Theme 1'}, 2, u'ch.NutzungsplanungSubCode') office = OfficeRecord(name={'de': 'office de'}) law_status = LawStatusRecord(code='AenderungMitVorwirkung', title={'de': 'law status de'}) geometry = GeometryRecord(law_status, datetime.now(), datetime.now(), Polygon(), 'test') public_law_restriction = PlrRecord( theme=theme, legend_entry=LegendEntryRecord(ImageRecord('1'.encode('utf-8')), {'de': 'information de'}, 'CodeA', None, theme, view_service_id=1), law_status=law_status, published_from=datetime.now(), published_until=None, responsible_office=office, symbol=ImageRecord('1'.encode('utf-8')), view_service=ViewServiceRecord( { 'de': 'http://example.com?SERVICE=WMS&REQUEST=GetMap&FORMAT=image/png&SRS=epsg:2056' }, 1, 1.0, 'de', 2056, None, None), geometries=[geometry], sub_theme=subtheme) content = template.render( **{ 'params': parameters, 'localized': renderer.get_localized_text, 'multilingual': renderer.get_multilingual_text, 'get_localized_image': renderer.get_localized_image, 'public_law_restriction': public_law_restriction }).decode('utf-8').split('\n') no_empty_lines = list(filter(lambda line: line != '', content)) no_empty_lines = [no_space.strip() for no_space in no_empty_lines] # assert '<data:SubTheme>' in no_empty_lines # schema has changed: no subThemes any longer ??? assert '<data:Text>sub-Theme 1</data:Text>' in no_empty_lines assert '<data:SubCode>ch.NutzungsplanungSubCode</data:SubCode>' in no_empty_lines assert '<data:Code>ch.Nutzungsplanung</data:Code>' in no_empty_lines assert len(no_empty_lines) == 74
def test_get_image(): request = MockRequest() request.matchdict.update({ 'fosnr': '1234' }) webservice = Municipality(request) result = webservice.get_image() assert isinstance(result, Response) assert result.body == FileAdapter().read('tests/resources/python.svg')
def test_getegrid_coord_missing_parameter(): request = MockRequest( current_route_url='http://example.com/oereb/getegrid/json/') # Add params to matchdict as the view will do it for /getegrid/{format}/ request.matchdict.update({'format': u'json'}) webservice = PlrWebservice(request) response = webservice.get_egrid() assert response.code == 400
def test_process(): request = MockRequest() request.matchdict.update(request_matchdict) processor = create_processor() webservice = PlrWebservice(request) params = webservice.__validate_extract_params__() real_estate = processor.real_estate_reader.read(params, egrid=u'TEST') extract = processor.process(real_estate[0], params, 'http://test.ch') assert isinstance(extract, ExtractRecord)
def test_get_extract_by_id(pyramid_test_config, params): with pyramid_test_config as pyramid_config: pyramid_config.add_renderer( 'pyramid_oereb_extract_json', 'pyramid_oereb.core.renderer.extract.json_.Renderer') request = MockRequest() request.matchdict.update({'format': 'JSON'}) request.params.update(params) service = PlrWebservice(request) service.get_extract_by_id()
def test_get_egrid_coord(pyramid_oereb_test_config, params): request = MockRequest( current_route_url='http://example.com/oereb/getegrid/json') # Add params to matchdict as the view will do it for /getegrid/{format}/ request.matchdict.update({'format': u'json'}) request.params.update(params) webservice = PlrWebservice(request) webservice.get_egrid()
def test_get_egrid_response_no_content(): with pyramid_oereb_test_config(): request = MockRequest( current_route_url='http://example.com/oereb/getegrid/json/') # Add params to matchdict as the view will do it for /getegrid/{format}/ request.matchdict.update({'format': u'json'}) response = PlrWebservice(request).__get_egrid_response__([]) assert isinstance(response, HTTPNoContent)
def test_getegrid_address_missing_parameter(): request = MockRequest( current_route_url='http://example.com/oereb/getegrid/json/') # Add params to matchdict as the view will do it for # /getegrid/{format}/{postalcode}/{localisation}/{number} request.matchdict.update({'format': u'json'}) webservice = PlrWebservice(request) response = webservice.get_egrid_address() assert response.code == 400
def test_properties(): request = MockRequest() request.matchdict.update(request_matchdict) processor = request.pyramid_oereb_processor assert isinstance(processor.extract_reader, ExtractReader) assert isinstance(processor.municipality_reader, MunicipalityReader) assert isinstance(processor.exclusion_of_liability_reader, ExclusionOfLiabilityReader) assert isinstance(processor.glossary_reader, GlossaryReader) assert isinstance(processor.plr_sources, list) assert isinstance(processor.real_estate_reader, RealEstateReader)
def test_get_image_invalid(): request = MockRequest() request.matchdict.update({ 'theme_code': 'ContaminatedSites', 'view_service_id': '1', 'type_code': 'notExisting' }) webservice = Symbol(request) with pytest.raises(HTTPNotFound): webservice.get_image()
def test_get_image(): request = MockRequest() request.matchdict.update({'fosnr': '1234'}) webservice = Municipality(request) result = webservice.get_image() assert isinstance(result, Response) if sys.version_info.major == 2: assert result.body == 'abcdefg' else: assert result.body == b'abcdefg'
def test_process_geometry_testing(): request = MockRequest() request.matchdict.update(request_matchdict) processor = create_processor() webservice = PlrWebservice(request) params = webservice.__validate_extract_params__() real_estate = processor.real_estate_reader.read(params, egrid=u'TEST') extract = processor.process(real_estate[0], params, 'http://test.ch') for plr in extract.real_estate.public_law_restrictions: for g in plr.geometries: assert g._test_passed
def test_get_image(): request = MockRequest() request.matchdict.update({ 'theme_code': 'ContaminatedSites', 'view_service_id': '1', 'type_code': 'CodeA' }) webservice = Symbol(request) result = webservice.get_image() assert isinstance(result, Response) assert result.body == FileAdapter().read('tests/resources/symbol.png')
def test_return_no_content(): request = MockRequest() request.matchdict.update({ 'flavour': 'REDUCED', 'format': 'XML', 'param1': 'GEOMETRY', 'param2': 'MISSINGEGRID' }) service = PlrWebservice(request) response = service.get_extract_by_id() assert isinstance(response, HTTPNoContent)