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_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_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_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_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_get_egrid_coord(params): 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'}) request.params.update(params) webservice = PlrWebservice(request) webservice.get_egrid_coord()
def _get_test_extract(glossary): date = datetime.datetime.now() file_adapter = FileAdapter() with pyramid_oereb_test_config(): view_service = ViewServiceRecord(u'http://geowms.bl.ch', 1, 1.0, {'de': u'http://geowms.bl.ch'}, None) real_estate = RealEstateRecord( u'RealEstate', u'BL', u'Liestal', 2829, 11395, MultiPolygon([Polygon([(0, 0), (1, 1), (1, 0)])]), u'http://www.geocat.ch', u'1000', u'BL0200002829', u'CH775979211712') real_estate.set_view_service(view_service) real_estate.set_main_page_view_service(view_service) office_record = OfficeRecord({'de': u'AGI'}) resolver = DottedNameResolver() date_method_string = Config.get('extract').get('base_data').get( 'methods').get('date') date_method = resolver.resolve(date_method_string) av_update_date = date_method(real_estate) base_data = Config.get_base_data(av_update_date) av_provider_method_string = Config.get('extract').get('base_data').get( 'methods').get('provider') av_provider_method = resolver.resolve(av_provider_method_string) cadaster_state = date theme = ThemeRecord(u'TEST', {'de': u'TEST TEXT'}) datasources = [DatasourceRecord(theme, date, office_record)] plr_cadastre_authority = Config.get_plr_cadastre_authority() embeddable = EmbeddableRecord(cadaster_state, plr_cadastre_authority, av_provider_method(real_estate), av_update_date, datasources) extract = ExtractRecord( real_estate, ImageRecord(file_adapter.read('tests/resources/python.svg')), ImageRecord(file_adapter.read('tests/resources/python.svg')), ImageRecord(file_adapter.read('tests/resources/python.svg')), ImageRecord(file_adapter.read('tests/resources/python.svg')), office_record, base_data, embeddable, exclusions_of_liability=[ ExclusionOfLiabilityRecord({'de': u'Haftungsausschluss'}, {'de': u'Test'}) ], glossaries=glossary, general_information={'de': u'Allgemeine Informationen'}, certification={'de': u'certification'}, certification_at_web={'de': u'certification_at_web'}, ) # extract.qr_code = 'VGhpcyBpcyBub3QgYSBRUiBjb2Rl'.encode('utf-8') TODO: # qr_code Must be an image ('base64Binary'), but even with images xml validation # fails on it. # extract.electronic_signature = 'Signature' # TODO: fix signature rendering first return extract
def test_return_json(topics): with pyramid_oereb_test_config() as pyramid_config: pyramid_config.add_renderer('pyramid_oereb_extract_json', 'pyramid_oereb.lib.renderer.extract.json_.Renderer') request = MockRequest() request.matchdict.update({ 'flavour': 'REDUCED', 'format': 'JSON', 'param1': 'GEOMETRY', 'param2': 'TEST' }) request.params.update({ 'TOPICS': topics }) service = PlrWebservice(request) response = service.get_extract_by_id() with open(schema_json_extract) as f: schema = json.loads(f.read()) Draft4Validator.check_schema(schema) validator = Draft4Validator(schema) response = json.loads(response.body.decode('utf-8')) validator.validate(response) assert isinstance(response, dict) extract = response.get('GetExtractByIdResponse').get('extract') real_estate = extract.get('RealEstate') assert isinstance(real_estate, dict) if topics == 'ALL': assert len(real_estate.get('RestrictionOnLandownership')) == 3 assert len(extract.get('ConcernedTheme')) == 3 assert len(extract.get('NotConcernedTheme')) == 14 assert len(extract.get('ThemeWithoutData')) == 0 restrictions = real_estate.get('RestrictionOnLandownership') assert restrictions[0]['Theme']['Code'] == 'LandUsePlans' assert restrictions[1]['Theme']['Code'] == 'MotorwaysBuildingLines' assert restrictions[2]['Theme']['Code'] == 'ContaminatedSites' if topics == 'ALL_FEDERAL': assert len(real_estate.get('RestrictionOnLandownership')) == 1 assert len(extract.get('ConcernedTheme')) == 1 assert len(extract.get('NotConcernedTheme')) == 9 assert len(extract.get('ThemeWithoutData')) == 0 restrictions = real_estate.get('RestrictionOnLandownership') assert restrictions[0]['Theme']['Code'] == 'MotorwaysBuildingLines' if topics == 'ContaminatedSites,RailwaysProjectPlanningZones': assert len(real_estate.get('RestrictionOnLandownership')) == 1 assert len(extract.get('ConcernedTheme')) == 1 assert len(extract.get('NotConcernedTheme')) == 1 assert len(extract.get('ThemeWithoutData')) == 0 restrictions = real_estate.get('RestrictionOnLandownership') assert restrictions[0]['Theme']['Code'] == 'ContaminatedSites'
def test_get_symbol_ref(): record = LegendEntryRecord( ImageRecord(FileAdapter().read('tests/resources/logo_canton.png')), {'de': 'Test'}, 'CodeA', 'http://my.codelist.com/test.xml', ThemeRecord('ContaminatedSites', {'de': 'Belastete Standorte'}), view_service_id='1' ) with pyramid_oereb_test_config(): request = DummyRequest() url = urlparse(get_symbol_ref(request, record)) assert url.path == '/image/symbol/ContaminatedSites/1/CodeA.png'
def test_get_symbol_ref(): record = LegendEntryRecord( ImageRecord('1'.encode('utf-8')), {'de': 'Test'}, 'CodeA', 'http://my.codelist.com/test.xml', ThemeRecord('ContaminatedSites', {'de': 'Belastete Standorte'}), view_service_id='1' ) with pyramid_oereb_test_config(): request = DummyRequest() url = urlparse(get_symbol_ref(request, record)) assert url.path == '/image/symbol/ContaminatedSites/1/CodeA'
def test_get_extract_by_id(params): with pyramid_oereb_test_config() as pyramid_config: pyramid_config.add_renderer( 'pyramid_oereb_extract_json', 'pyramid_oereb.lib.renderer.extract.json_.Renderer') request = MockRequest() request.matchdict.update({ 'flavour': 'REDUCED', 'format': 'JSON', 'param1': 'GEOMETRY', 'param2': 'TEST' }) request.params.update(params) service = PlrWebservice(request) service.get_extract_by_id()
def test_get_symbol_ref(theme_code): with pyramid_oereb_test_config(): request = MockRequest() record = LegendEntryRecord(ImageRecord( FileAdapter().read('tests/resources/python.svg')), {'de': 'Test'}, u'test', u'test', ThemeRecord(theme_code, {'de': 'Test'}), view_service_id=1) if theme_code == u'NotExistingTheme': with pytest.raises(HTTPServerError): Base.get_symbol_ref(request, record) else: ref = Base.get_symbol_ref(request, record) assert ref == 'http://example.com/image/symbol/{}/{}/{}.svg'.format( theme_code, record.view_service_id, record.type_code)
def test_getcapabilities(): with pyramid_oereb_test_config(): request = MockRequest(current_route_url='http://example.com/oereb/capabilities/json') # Add params to matchdict as the view will do it for /capabilities/{format} request.matchdict.update({ 'format': u'json' }) service = PlrWebservice(request) with open(schema_json_extract) as f: schema = json.loads(f.read()) Draft4Validator.check_schema(schema) validator = Draft4Validator(schema) response = service.get_capabilities().json validator.validate(response) assert isinstance(response, dict) caps = response.get('GetCapabilitiesResponse') assert isinstance(caps[u'topic'], list) assert len(caps[u'topic']) == 17 assert caps[u'topic'][15][u'Code'] == u'ForestPerimeters' forest_perimeter_languages = list(map(lambda l: l[u'Language'], caps[u'topic'][15][u'Text'])) assert u'de' in forest_perimeter_languages assert u'fr' in forest_perimeter_languages assert u'it' in forest_perimeter_languages assert u'rm' in forest_perimeter_languages assert isinstance(caps[u'flavour'], list) assert len(caps[u'flavour']) == 3 assert u'REDUCED' in caps[u'flavour'] assert u'FULL' in caps[u'flavour'] assert u'EMBEDDABLE' in caps[u'flavour'] assert isinstance(caps[u'language'], list) assert len(caps[u'language']) == 4 assert u'de' in caps[u'language'] assert u'fr' in caps[u'language'] assert u'it' in caps[u'language'] assert u'rm' in caps[u'language'] assert isinstance(caps[u'crs'], list) assert len(caps[u'crs']) == 1 assert caps[u'crs'][0] == u'epsg:2056' assert isinstance(caps[u'municipality'], list)
def test_getversions_json(): with pyramid_oereb_test_config(): request = MockRequest( current_route_url='http://example.com/oereb/versions/json') # Add params to matchdict as the view will do it for /versions/{format} request.matchdict.update({'format': u'json'}) webservice = PlrWebservice(request) versions = webservice.get_versions().json with open(schema_json_versions) as f: schema = json.loads(f.read()) Draft4Validator.check_schema(schema) validator = Draft4Validator(schema) validator.validate(versions) assert isinstance(versions, dict) supported_version = versions.get('GetVersionsResponse') assert len(supported_version.get('supportedVersion')) == 1
def test_format_legend_entry(parameter): with pyramid_oereb_test_config(): renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._params = parameter renderer._request = MockRequest() theme = ThemeRecord(u'ContaminatedSites', {u'de': u'Test'}) legend_entry = LegendEntryRecord( ImageRecord(FileAdapter().read('tests/resources/python.svg')), {u'de': u'Legendeneintrag'}, u'CodeA', u'type_code_list', theme, {'de': u'Subthema'}, u'Weiteres Thema', view_service_id=1 ) result = renderer.format_legend_entry(legend_entry) expected = { 'LegendText': renderer.get_multilingual_text({'de': 'Legendeneintrag'}), 'TypeCode': 'CodeA', 'TypeCodelist': 'type_code_list', 'Theme': renderer.format_theme(theme), 'SubTheme': 'Subthema', 'OtherTheme': 'Weiteres Thema' } if parameter.images: expected.update({ 'Symbol': ImageRecord(FileAdapter().read('tests/resources/python.svg')).encode() }) else: expected.update({ 'SymbolRef': 'http://example.com/image/symbol/{theme_code}/{view_service_id}/{code}.svg' .format( theme_code='ContaminatedSites', view_service_id=1, code='CodeA' ) }) assert isinstance(result, dict) assert result == expected
def test_getegrid_xy(): with pyramid_oereb_test_config(): url = 'http://example.com/oereb/getegrid/json/?XY=-1999999.032739449,-999998.940457533' request = MockRequest(current_route_url=url) # Add params to matchdict as the view will do it for /getegrid/{format}/ request.matchdict.update({'format': u'json'}) request.params.update({'XY': '-1999999.032739449,-999998.940457533'}) 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) == 2 assert real_estates[0]['egrid'] == u'TEST' assert real_estates[0]['number'] == u'1000' assert real_estates[0]['identDN'] == u'BLTEST'
def test_return_json(topics): with pyramid_oereb_test_config() as pyramid_config: pyramid_config.add_renderer( 'pyramid_oereb_extract_json', 'pyramid_oereb.lib.renderer.extract.json_.Renderer') request = MockRequest() request.matchdict.update({ 'flavour': 'REDUCED', 'format': 'JSON', 'param1': 'GEOMETRY', 'param2': 'TEST' }) request.params.update({'TOPICS': topics}) service = PlrWebservice(request) response = service.get_extract_by_id() with open(schema_json_extract) as f: schema = json.loads(f.read()) Draft4Validator.check_schema(schema) validator = Draft4Validator(schema) response = json.loads(response.body.decode('utf-8')) validator.validate(response) assert isinstance(response, dict) extract = response.get('GetExtractByIdResponse').get('extract') real_estate = extract.get('RealEstate') assert isinstance(real_estate, dict) if topics == 'ALL': assert len(real_estate.get('RestrictionOnLandownership')) == 3 assert len(extract.get('ConcernedTheme')) == 3 assert len(extract.get('NotConcernedTheme')) == 14 assert len(extract.get('ThemeWithoutData')) == 0 restrictions = real_estate.get('RestrictionOnLandownership') assert restrictions[0]['Theme']['Code'] == 'LandUsePlans' assert restrictions[1]['Theme']['Code'] == 'MotorwaysBuildingLines' assert restrictions[2]['Theme']['Code'] == 'ContaminatedSites' # Check consistency of ordering (according to config) for not concerned themes assert extract.get( 'NotConcernedTheme')[0]['Code'] == 'MotorwaysProjectPlaningZones' assert extract.get( 'NotConcernedTheme')[1]['Code'] == 'RailwaysBuildingLines' assert extract.get( 'NotConcernedTheme')[2]['Code'] == 'RailwaysProjectPlanningZones' assert extract.get( 'NotConcernedTheme')[3]['Code'] == 'AirportsProjectPlanningZones' assert extract.get( 'NotConcernedTheme')[4]['Code'] == 'AirportsBuildingLines' assert extract.get( 'NotConcernedTheme')[5]['Code'] == 'AirportsSecurityZonePlans' assert extract.get( 'NotConcernedTheme')[6]['Code'] == 'ContaminatedMilitarySites' assert extract.get( 'NotConcernedTheme')[7]['Code'] == 'ContaminatedCivilAviationSites' assert extract.get('NotConcernedTheme' )[8]['Code'] == 'ContaminatedPublicTransportSites' assert extract.get( 'NotConcernedTheme')[9]['Code'] == 'GroundwaterProtectionZones' assert extract.get( 'NotConcernedTheme')[10]['Code'] == 'GroundwaterProtectionSites' assert extract.get( 'NotConcernedTheme')[11]['Code'] == 'NoiseSensitivityLevels' assert extract.get( 'NotConcernedTheme')[12]['Code'] == 'ForestPerimeters' assert extract.get( 'NotConcernedTheme')[13]['Code'] == 'ForestDistanceLines' if topics == 'ALL_FEDERAL': assert len(real_estate.get('RestrictionOnLandownership')) == 1 assert len(extract.get('ConcernedTheme')) == 1 assert len(extract.get('NotConcernedTheme')) == 9 assert len(extract.get('ThemeWithoutData')) == 0 restrictions = real_estate.get('RestrictionOnLandownership') assert restrictions[0]['Theme']['Code'] == 'MotorwaysBuildingLines' if topics == 'ContaminatedSites,RailwaysProjectPlanningZones': assert len(real_estate.get('RestrictionOnLandownership')) == 1 assert len(extract.get('ConcernedTheme')) == 1 assert len(extract.get('NotConcernedTheme')) == 1 assert len(extract.get('ThemeWithoutData')) == 0 restrictions = real_estate.get('RestrictionOnLandownership') assert restrictions[0]['Theme']['Code'] == 'ContaminatedSites'
def test_render(parameter, glossaries_input, glossaries_expected): date = datetime.datetime.now() with pyramid_oereb_test_config(): view_service = ViewServiceRecord(u'http://geowms.bl.ch', 1, 1.0, {'de': u'http://geowms.bl.ch'}, None) real_estate = RealEstateRecord( u'RealEstate', u'BL', u'Liestal', 2829, 11395, MultiPolygon([Polygon([(0, 0), (1, 1), (1, 0)])]), u'http://www.geocat.ch', u'1000', u'BL0200002829', u'CH775979211712') real_estate.set_view_service(view_service) real_estate.set_main_page_view_service(view_service) office_record = OfficeRecord({'de': u'AGI'}) resolver = DottedNameResolver() date_method_string = Config.get('extract').get('base_data').get( 'methods').get('date') date_method = resolver.resolve(date_method_string) av_update_date = date_method(real_estate) base_data = Config.get_base_data(av_update_date) av_provider_method_string = Config.get('extract').get('base_data').get( 'methods').get('provider') av_provider_method = resolver.resolve(av_provider_method_string) cadaster_state = date theme = ThemeRecord(u'TEST', {'de': u'TEST TEXT'}) datasources = [DatasourceRecord(theme, date, office_record)] plr_cadastre_authority = Config.get_plr_cadastre_authority() embeddable = EmbeddableRecord(cadaster_state, plr_cadastre_authority, av_provider_method(real_estate), av_update_date, datasources) extract = ExtractRecord( real_estate, ImageRecord('1'.encode('utf-8')), ImageRecord('2'.encode('utf-8')), ImageRecord('3'.encode('utf-8')), ImageRecord('4'.encode('utf-8')), office_record, base_data, embeddable, exclusions_of_liability=[ ExclusionOfLiabilityRecord({'de': u'Haftungsausschluss'}, {'de': u'Test'}) ], glossaries=glossaries_input, general_information={'de': u'Allgemeine Informationen'}, certification={'de': u'certification'}, certification_at_web={'de': u'certification_at_web'}, ) extract.qr_code = '1'.encode('utf-8') extract.electronic_signature = 'Signature' renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._request = MockRequest() if parameter is None: with pytest.raises(TypeError): renderer._render(extract, None) else: result = renderer._render(extract, parameter) assert isinstance(result, dict) expected = { 'ExtractIdentifier': extract.extract_identifier, 'CreationDate': Base.date_time(extract.creation_date), 'ConcernedTheme': [], 'NotConcernedTheme': [], 'ThemeWithoutData': [], 'isReduced': True, 'PLRCadastreAuthority': renderer.format_office(office_record), 'BaseData': renderer.get_multilingual_text( Config.get_base_data(av_update_date)), 'RealEstate': renderer.format_real_estate(real_estate), 'Certification': [{ 'Language': 'de', 'Text': 'certification' }], 'CertificationAtWeb': [{ 'Language': 'de', 'Text': 'certification_at_web' }], 'GeneralInformation': [{ 'Language': 'de', 'Text': 'Allgemeine Informationen' }], 'QRCode': '1'.encode('utf-8'), 'ExclusionOfLiability': [{ 'Title': [{ 'Language': 'de', 'Text': 'Haftungsausschluss' }], 'Content': [{ 'Language': 'de', 'Text': 'Test' }] }], 'ElectronicSignature': 'Signature' } if glossaries_expected: expected['Glossary'] = glossaries_expected if parameter.images: expected.update({ 'LogoPLRCadastre': base64.b64encode('1'.encode('utf-8')).decode('ascii'), 'FederalLogo': base64.b64encode('2'.encode('utf-8')).decode('ascii'), 'CantonalLogo': base64.b64encode('3'.encode('utf-8')).decode('ascii'), 'MunicipalityLogo': base64.b64encode('4'.encode('utf-8')).decode('ascii'), }) else: expected.update({ 'LogoPLRCadastreRef': u'http://example.com/image/logo/oereb/de', 'FederalLogoRef': u'http://example.com/image/logo/confederation/de', 'CantonalLogoRef': u'http://example.com/image/logo/canton/de', 'MunicipalityLogoRef': u'http://example.com/image/municipality/2829' }) assert result == expected
def test_format_plr(parameter): with pyramid_oereb_test_config(): renderer = Renderer(DummyRenderInfo()) renderer._language = 'de' renderer._params = parameter renderer._request = MockRequest() document = DocumentRecord('Law', law_status(), datetime.date.today(), {u'de': u'Test Dokument'}, OfficeRecord({u'de': u'BUD'}), {'de': 'http://mein.dokument.ch'}) if parameter.flavour == 'reduced': documents = [document] else: documents = None theme = ThemeRecord(u'ContaminatedSites', {u'de': u'Test theme'}) office = OfficeRecord({'de': 'Test Office'}) legend_entry = LegendEntryRecord(ImageRecord( base64.b64encode('1'.encode('utf-8'))), {'de': 'Test'}, 'CodeA', 'TypeCodeList', theme, view_service_id=1) view_service = ViewServiceRecord('http://geowms.bl.ch', 1, 1.0, {'de': u'http://geowms.bl.ch'}, [legend_entry]) geometry = GeometryRecord(law_status(), datetime.date.today(), Point(1, 1)) plr = PlrRecord(theme, {'de': 'Test'}, law_status(), datetime.date.today(), office, ImageRecord('1'.encode('utf-8')), view_service, [geometry], sub_theme={'de': 'Subtopic'}, other_theme='Additional topic', type_code='CodeA', type_code_list='TypeCodeList', documents=documents, view_service_id=1) plr.part_in_percent = 0.5 if parameter.flavour == 'full': with pytest.raises(ValueError): renderer.format_plr([plr]) else: result = renderer.format_plr([plr]) assert isinstance(result, list) assert len(result) == 1 assert isinstance(result[0], dict) expected = { 'Information': renderer.get_multilingual_text(plr.information), 'Theme': renderer.format_theme(plr.theme), 'Lawstatus': { 'Code': 'inForce', 'Text': { 'Language': 'de', 'Text': 'In Kraft' } }, 'ResponsibleOffice': renderer.format_office(plr.responsible_office), 'Map': renderer.format_map(plr.view_service), 'SubTheme': 'Subtopic', 'OtherTheme': 'Additional topic', 'TypeCode': 'CodeA', 'TypeCodelist': 'TypeCodeList', 'LegalProvisions': [renderer.format_document(document)], 'PartInPercent': 0.5 } if parameter.images: expected.update({ 'Symbol': base64.b64encode('1'.encode('utf-8')).decode('ascii') }) else: expected.update({ 'SymbolRef': 'http://example.com/image/symbol/{theme}/{view_service_id}/{code}' .format(theme='ContaminatedSites', view_service_id=1, code='CodeA') }) assert result[0] == expected