예제 #1
0
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': '4410',
            'localisation': 'test',
            'number': '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'
예제 #2
0
def test_format_legend_entry(parameter, config):
    assert isinstance(config._config, dict)
    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('1'.encode('utf-8')),
                                         {u'de': u'Legendeneintrag'}, u'type1',
                                         u'type_code_list', theme, u'Subthema',
                                         u'Weiteres Thema')
        result = renderer.format_legend_entry(legend_entry)
        expected = {
            'LegendText':
            renderer.get_multilingual_text({'de': 'Legendeneintrag'}),
            'TypeCode': 'type1',
            'TypeCodelist': 'type_code_list',
            'Theme': renderer.format_theme(theme),
            'SubTheme': 'Subthema',
            'OtherTheme': 'Weiteres Thema'
        }
        if parameter.images:
            expected.update(
                {'Symbol': ImageRecord('1'.encode('utf-8')).encode()})
        else:
            expected.update({
                'SymbolRef':
                'http://example.com/image/symbol/{theme_code}/{code}'.format(
                    theme_code='ContaminatedSites', code='type1')
            })
        assert isinstance(result, dict)
        assert result == expected
예제 #3
0
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, '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'
            }]
        }
예제 #4
0
def test_parse_gnss(config):
    pyramid_oereb.config = config
    geom = PlrWebservice(MockRequest()).__parse_gnss__('47.48911,7.72866')
    assert isinstance(geom, Polygon)
    assert round(geom.centroid.x, 3) == 2621858.036
    assert round(geom.centroid.y, 3) == 1259856.747
    assert round(geom.area, 2) == round(math.pi, 2)
예제 #5
0
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
예제 #6
0
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
예제 #7
0
def test_getegrid_gnss(config):
    pyramid_oereb.config = config
    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'
예제 #8
0
def test_format_map(config, params):
    assert isinstance(config._config, dict)
    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'type1', u'type_code_list',
            ThemeRecord(u'ContaminatedSites', {u'de': u'Test'}))
        view_service = ViewServiceRecord(
            'http://my.wms.ch',
            'http://my.wms.ch?SERVICE=WMS&REQUEST=GetLegendGraphic',
            [legend_entry])
        view_service.image = ImageRecord('1'.encode('utf-8'))
        result = renderer.format_map(view_service)
        assert isinstance(result, dict)
        assert result == {
            'Image': base64.b64encode('1'.encode('utf-8')).decode('ascii'),
            'ReferenceWMS': 'http://my.wms.ch',
            'LegendAtWeb':
            'http://my.wms.ch?SERVICE=WMS&REQUEST=GetLegendGraphic',
            'OtherLegend': [renderer.format_legend_entry(legend_entry)]
        }
예제 #9
0
def test_getcapabilities():
    with pyramid_oereb_test_config():
        request = MockRequest(
            current_route_url='http://example.com/oereb/capabilities.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'
        assert caps[u'topic'][15][u'Text'][0][u'Language'] == u'de'

        assert isinstance(caps[u'flavour'], list)
        assert len(caps[u'flavour']) == 3
        assert caps[u'flavour'][0] == u'REDUCED'

        assert isinstance(caps[u'language'], list)
        assert len(caps[u'language']) == 4
        assert caps[u'language'][0] == u'de'

        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)
예제 #10
0
def test_get_image_invalid():
    request = MockRequest()
    request.matchdict.update({
        'logo': 'invalid'
    })
    webservice = Logo(request)
    with pytest.raises(HTTPNotFound):
        webservice.get_image()
예제 #11
0
def test_get_image_invalid():
    request = MockRequest()
    request.matchdict.update({
        'fosnr': '0'
    })
    webservice = Municipality(request)
    with pytest.raises(HTTPNotFound):
        webservice.get_image()
예제 #12
0
def test_get_image_invalid():
    request = MockRequest()
    request.matchdict.update({
        'theme_code': 'ContaminatedSites',
        'type_code': 'notExisting'
    })
    webservice = Symbol(request)
    with pytest.raises(HTTPNotFound):
        webservice.get_image()
예제 #13
0
def test_process():
    request = MockRequest()
    request.matchdict.update(request_matchdict)
    processor = request.pyramid_oereb_processor
    real_estate = processor.real_estate_reader.read(egrid=u'TEST')
    webservice = PlrWebservice(request)
    params = webservice.__validate_extract_params__()
    extract = processor.process(real_estate[0], params, 'http://test.ch')
    assert isinstance(extract, ExtractRecord)
예제 #14
0
def test_get_image(config):
    assert isinstance(config._config, dict)
    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
예제 #15
0
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)
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
def test_process_geometry_testing():
    request = MockRequest()
    request.matchdict.update(request_matchdict)
    processor = request.pyramid_oereb_processor
    real_estate = processor.real_estate_reader.read(egrid=u'TEST')
    webservice = PlrWebservice(request)
    params = webservice.__validate_extract_params__()
    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
예제 #19
0
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'
예제 #20
0
def test_processor_without_images():
    request = MockRequest()
    request.matchdict.update(request_matchdict)
    request.params.update({'LANG': 'de'})
    processor = request.pyramid_oereb_processor
    real_estate = processor.real_estate_reader.read(egrid=u'TEST')
    webservice = PlrWebservice(request)
    params = webservice.__validate_extract_params__()
    extract = processor.process(real_estate[0], params, 'http://test.ch')
    assert extract.real_estate.plan_for_land_register.image is None
    for plr in extract.real_estate.public_law_restrictions:
        assert plr.view_service.image is None
예제 #21
0
def test_filter_published_documents():
    request = MockRequest()
    request.matchdict.update(request_matchdict)
    processor = request.pyramid_oereb_processor
    real_estate = processor.real_estate_reader.read(egrid=u'TEST')
    webservice = PlrWebservice(request)
    params = webservice.__validate_extract_params__()
    extract = processor.process(real_estate[0], params, 'http://test.ch')
    for plr in extract.real_estate.public_law_restrictions:
        if plr.theme.code == u'MotorwaysBuildingLines':
            assert len(plr.documents) == 1
            assert len(plr.documents[0].references) == 1
예제 #22
0
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'
예제 #23
0
def test_extract_against_schema(parameter):
    extract = get_test_extract()
    renderer = Renderer(DummyRenderInfo())
    renderer._language = u'de'
    renderer._request = MockRequest()
    renderer._request.route_url = lambda url, **kwargs: "http://example.com/current/view"
    rendered = renderer._render(extract, parameter)

    xmlschema_doc = etree.parse(schema_xml_extract)
    xmlschema = etree.XMLSchema(xmlschema_doc)
    buffer = StringIO(rendered) if sys.version_info.major == 2 else BytesIO(rendered)
    doc = etree.parse(buffer)
    xmlschema.assertValid(doc)
예제 #24
0
def test_processor_with_images():
    request = MockRequest()
    request.matchdict.update(request_matchdict)
    request.params.update({'WITHIMAGES': '', 'LANG': 'de'})
    processor = request.pyramid_oereb_processor
    real_estate = processor.real_estate_reader.read(egrid=u'TEST')
    webservice = PlrWebservice(request)
    params = webservice.__validate_extract_params__()
    extract = processor.process(real_estate[0], params, 'http://test.ch')
    # TODO: uncomment this when issue GSOREB-194 is solved.
    # assert extract.real_estate.plan_for_land_register.image is not None
    for plr in extract.real_estate.public_law_restrictions:
        assert plr.view_service.image is not None
예제 #25
0
def test_parse_xy(src, dst, buffer_dist, config):
    pyramid_oereb.config = config
    geom = PlrWebservice(MockRequest()).__parse_xy__(src,
                                                     buffer_dist=buffer_dist)
    if buffer_dist:
        assert isinstance(geom, Polygon)
        assert round(geom.area, 2) == round(math.pi, 2)
        assert round(geom.centroid.x, 3) == round(dst[0], 3)
        assert round(geom.centroid.y, 3) == round(dst[1], 3)
    else:
        assert isinstance(geom, Point)
        assert round(geom.x, 3) == round(dst[0], 3)
        assert round(geom.y, 3) == round(dst[1], 3)
예제 #26
0
def test_get_image():
    request = MockRequest()
    request.matchdict.update({
        'theme_code': 'ContaminatedSites',
        'type_code': 'test'
    })
    webservice = Symbol(request)
    result = webservice.get_image()
    assert isinstance(result, Response)
    if sys.version_info.major == 2:
        assert result.body == '1'
    else:
        assert result.body == b'1'
예제 #27
0
def test_getversions():
    with pyramid_oereb_test_config():
        request = MockRequest(
            current_route_url='http://example.com/oereb/versions.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
예제 #28
0
def test_get_symbol_ref(config, theme_code):
    assert isinstance(config._config, dict)
    with pyramid_oereb_test_config():
        request = MockRequest()
        record = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                   {'de': 'Test'}, u'test', u'test',
                                   ThemeRecord(theme_code, {'de': 'Test'}))
        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/{}/{}'.format(
                theme_code, record.type_code)
예제 #29
0
def test_get_symbol_ref(config, theme_code):
    assert isinstance(config._config, dict)
    with pyramid_oereb_test_config():
        request = MockRequest()
        record = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                   {'de': 'Test'}, u'test', u'test',
                                   ThemeRecord(theme_code, {'de': 'Test'}))
        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/{}?TEXT={}&CODE={}'.format(
                theme_code,
                base64.b64encode(
                    json.dumps(record.legend_text).encode('utf-8')).decode(
                        'ascii').replace('=', '%3D'), record.type_code)
예제 #30
0
def test_getegrid_ident(config):
    pyramid_oereb.config = config
    with pyramid_oereb_test_config():
        request = MockRequest(
            current_route_url=
            'http://example.com/oereb/getegrid/BLTEST/1000.json')
        request.matchdict.update({'identdn': u'BLTEST', 'number': u'1000'})
        webservice = PlrWebservice(request)
        response = webservice.get_egrid_ident().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'