def test_config_wms_url_params(config_path, DummyRenderInfo):
    Config._config = None
    Config.init('./tests/contrib.print_proxy.mapfish_print/resources/test_config.yml', 'pyramid_oereb')
    renderer = Renderer(DummyRenderInfo())
    config = renderer.get_wms_url_params()
    # Restore normal config
    Config._config = None
    Config.init(config_path, 'pyramid_oereb')
    # Do the check for this test. Value should match the one from the YAML configuration.
    assert config == {'TRANSPARENT': 'true', 'OTHERCUSTOM': 'myvalue'}
def test_bad_config_wms_url_params(config_path, DummyRenderInfo):
    Config._config = None
    Config.init('./tests/contrib.print_proxy.mapfish_print/resources/test_bad_config.yml', 'pyramid_oereb')
    renderer = Renderer(DummyRenderInfo())
    config = renderer.get_wms_url_params()
    # Restore normal config
    Config._config = None
    Config.init(config_path, 'pyramid_oereb')
    # Do the check for this test. Value should be empty.
    assert config == {}
def test_mapfish_print_entire_extract(extract, geometry, expected_printable_extract, DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo())
    renderer.convert_to_printable_extract(extract, geometry)
    # Uncomment to print the result
    # with open('./printable_extract.json', 'w') as f:
    #     json.dump(extract, f, indent=2, ensure_ascii=False)

    assert extract == expected_printable_extract
    assert deepCompare(extract, expected_printable_extract)
    # Do it twice, to test all keys in each reports
    assert deepCompare(expected_printable_extract, extract)
def test_get_custom_wms_params_true(config_path, DummyRenderInfo):
    Config._config = None
    Config.init('./tests/contrib.print_proxy.mapfish_print/resources/test_custom_config.yml', 'pyramid_oereb')
    renderer = Renderer(DummyRenderInfo())
    # Define different test cases
    params1 = {
        'TRANSPARENT': ['true'],
        'OTHERCUSTOM': ['myvalue'],
        'epoch': ['2018-11-29T15:13:31']
    }
    params2 = {
        'OTHERCUSTOM': ['myvalue'],
        'epoch': ['2018-11-29T15:13:31']
    }
    params3 = {
        'epoch': '2018-11-29T15:13:31'
    }
    params4 = {
        'epoch': ['2018-11-29T15:13:31', '2020-11-29T17:13:50']
    }

    config1 = renderer.get_custom_wms_params(params1)
    config2 = renderer.get_custom_wms_params(params2)
    config3 = renderer.get_custom_wms_params(params3)
    config4 = renderer.get_custom_wms_params(params4)

    # Restore normal config
    Config._config = None
    Config.init(config_path, 'pyramid_oereb')

    # Do the check for the different test cases. Value should match the ones from the YAML configuration.
    assert config1 == {
        'TRANSPARENT': 'true',
        'epoch': '2018-11-29T15:13:31'
    }
    assert config2 == {
        'epoch': '2018-11-29T15:13:31'
    }
    assert config3 == {
        'epoch': '2018-11-29T15:13:31'
    }
    assert config4 == {
        'epoch': '2018-11-29T15:13:31,2020-11-29T17:13:50'
    }
def test_get_custom_wms_params_false(config_path, DummyRenderInfo):
    Config._config = None
    Config.init('./tests/contrib.print_proxy.mapfish_print/resources/test_config.yml', 'pyramid_oereb')
    renderer = Renderer(DummyRenderInfo())
    params = {
        'TRANSPARENT': ['true'],
        'OTHERCUSTOM': ['myvalue'],
        'epoch': ['2018-11-29T15:13:31']
    }
    config = renderer.get_custom_wms_params(params)

    # Restore normal config
    Config._config = None
    Config.init(config_path, 'pyramid_oereb')

    assert config == {
        'OTHERCUSTOM': 'myvalue',
        'TRANSPARENT': 'true'
    }
def test_archive_pdf(DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo())
    extract = {'RealEstate_EGRID': 'CH113928077734'}
    path_and_filename = renderer.archive_pdf_file('/tmp', bytes(), extract)
    assert os.path.isfile(path_and_filename)
def test_group_legal_provisions(DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo())
    test_legal_provisions = [
        {
            "Canton": "BL",
            "DocumentType": "LegalProvision",
            "Lawstatus_Code": "inKraft",
            "Lawstatus_Text": "Rechtskräftig",
            "OfficialNumber": "3891.100",
            "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
            "ResponsibleOffice_OfficeAtWeb":
                "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
            "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/197"}],
            "Title": "Baugesetz"
        }, {
            "Canton": "BL",
            "DocumentType": "LegalProvision",
            "Lawstatus_Code": "inKraft",
            "Lawstatus_Text": "Rechtskräftig",
            "OfficialNumber": "3891.100",
            "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
            "ResponsibleOffice_OfficeAtWeb":
                "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
            "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/198"}],
            "Title": "Baugesetz"
        }, {
            "Canton": "BL",
            "DocumentType": "LegalProvision",
            "Lawstatus_Code": "inKraft",
            "Lawstatus_Text": "Rechtskräftig",
            "OfficialNumber": "07.447",
            "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
            "ResponsibleOffice_OfficeAtWeb":
                "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
            "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/213"}],
            "Title": "Revision Ortsplanung"
        }, {
            "Canton": "BL",
            "DocumentType": "LegalProvision",
            "Lawstatus_Code": "inKraft",
            "Lawstatus_Text": "Rechtskräftig",
            "OfficialNumber": "07.447",
            "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
            "ResponsibleOffice_OfficeAtWeb":
                "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
            "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/214"}],
            "Title": "Revision Ortsplanung"
        }
    ]
    expected_results = [
        {
            "Canton": "BL",
            "DocumentType": "LegalProvision",
            "Lawstatus_Code": "inKraft",
            "Lawstatus_Text": "Rechtskräftig",
            "OfficialNumber": "3891.100",
            "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
            "ResponsibleOffice_OfficeAtWeb":
                "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
            "TextAtWeb": [
                {"URL": "https://oereb-gr-preview.000.ch/api/attachments/197"},
                {"URL": "https://oereb-gr-preview.000.ch/api/attachments/198"},
            ],
            "Title": "Baugesetz"
        }, {
            "Canton": "BL",
            "DocumentType": "LegalProvision",
            "Lawstatus_Code": "inKraft",
            "Lawstatus_Text": "Rechtskräftig",
            "OfficialNumber": "07.447",
            "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
            "ResponsibleOffice_OfficeAtWeb":
                "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
            "TextAtWeb": [
                {"URL": "https://oereb-gr-preview.000.ch/api/attachments/213"},
                {"URL": "https://oereb-gr-preview.000.ch/api/attachments/214"},
            ],
            "Title": "Revision Ortsplanung"
        }
    ]

    assert expected_results == renderer.group_legal_provisions(test_legal_provisions)
def test_get_sorted_law(DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo())
    test_law = [
        {
            'DocumentType': 'Law',
            'TextAtWeb': [{'URL': 'http://www.admin.ch/ch/d/sr/c814_01.html'}],
            'Title': 'Raumplanungsverordnung für den Kanton Graubünden',
            'Abbreviation': 'KRVO',
            'OfficialNumber': 'BR 801.110',
            'index': 5,
            'Canton': 'GR',
            'Lawstatus_Code': 'inKraft',
            'Lawstatus_Text': 'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2934?locale=de'
        }, {
            'DocumentType': u'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': u'Raumplanungsgesetz für den Kanton Graubünden',
            'Abbreviation': u'KRG',
            'index': 3,
            'Canton': u'GR',
            'Lawstatus_Code': u'inKraft',
            'Lawstatus_Text': u'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                u'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2936?locale=de'
        }, {
            'DocumentType': u'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': u'Raumplanungsgesetz für den Kanton Graubünden2',
            'Abbreviation': u'KRG',
            'OfficialNumber': u'BR 801.100',
            'index': 1,
            'Canton': u'GR',
            'Lawstatus_Code': u'inKraft',
            'Lawstatus_Text': u'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                u'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2936?locale=de'
        }, {
            'DocumentType': 'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': 'Bundesgesetz über die Raumplanung',
            'Abbreviation': 'RPG',
            'OfficialNumber': 'SR 700',
            'index': 4,
            'Canton': 'GR',
            'Lawstatus_Code': 'inKraft',
            'Lawstatus_Text': 'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb': 'http://www.lexfind.ch/dtah/167348/2'
        }, {
            'DocumentType': u'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': u'Raumplanungsgesetz für den Kanton Graubünden',
            'Abbreviation': u'KRG',
            'OfficialNumber': u'BR 801.100',
            'index': 2,
            'Canton': u'GR',
            'Lawstatus_Code': u'inKraft',
            'Lawstatus_Text': u'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                u'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2936?locale=de'
        }
    ]

    expected_result = [
        {
            'DocumentType': u'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': u'Raumplanungsgesetz für den Kanton Graubünden2',
            'Abbreviation': u'KRG',
            'OfficialNumber': u'BR 801.100',
            'index': 1,
            'Canton': u'GR',
            'Lawstatus_Code': u'inKraft',
            'Lawstatus_Text': u'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                u'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2936?locale=de'
        }, {
            'DocumentType': u'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': u'Raumplanungsgesetz für den Kanton Graubünden',
            'Abbreviation': u'KRG',
            'OfficialNumber': u'BR 801.100',
            'index': 2,
            'Canton': u'GR',
            'Lawstatus_Code': u'inKraft',
            'Lawstatus_Text': u'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                u'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2936?locale=de'
        }, {
            'DocumentType': u'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': u'Raumplanungsgesetz für den Kanton Graubünden',
            'Abbreviation': u'KRG',
            'index': 3,
            'Canton': u'GR',
            'Lawstatus_Code': u'inKraft',
            'Lawstatus_Text': u'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                u'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2936?locale=de'
        }, {
            'DocumentType': 'Law',
            'TextAtWeb': [{'URL': u'http://www.admin.ch/ch/d/sr/c814_680.html'}],
            'Title': 'Bundesgesetz über die Raumplanung',
            'Abbreviation': 'RPG',
            'OfficialNumber': 'SR 700',
            'index': 4,
            'Canton': 'GR',
            'Lawstatus_Code': 'inKraft',
            'Lawstatus_Text': 'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb': 'http://www.lexfind.ch/dtah/167348/2'
        }, {
            'DocumentType': 'Law',
            'TextAtWeb': [{'URL': 'http://www.admin.ch/ch/d/sr/c814_01.html'}],
            'Title': 'Raumplanungsverordnung für den Kanton Graubünden',
            'Abbreviation': 'KRVO',
            'OfficialNumber': 'BR 801.110',
            'index': 5,
            'Canton': 'GR',
            'Lawstatus_Code': 'inKraft',
            'Lawstatus_Text': 'Rechtskräftig',
            'ResponsibleOffice_Name': u'Bundesamt für Verkehr BAV',
            'ResponsibleOffice_OfficeAtWeb':
                'https://www.gr-lex.gr.ch/frontend/versions/pdf_file_with_annex/2934?locale=de'
        }
    ]
    assert expected_result == renderer.sort_dict_list(test_law, renderer.sort_hints_laws)
def test_get_sorted_hints(DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo())
    test_hints = [{
        "Canton": "BL",
        "DocumentType": "Hint",
        "Lawstatus_Code": "inKraft",
        "Lawstatus_Text": "Rechtskräftig",
        "OfficialNumber": "3891.100",
        "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
        "ResponsibleOffice_OfficeAtWeb": "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
        "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/197"}],
        "Title": "Revision Ortsplanung"
    }, {
        "Canton": "BL",
        "DocumentType": "Hint",
        "Lawstatus_Code": "inKraft",
        "Lawstatus_Text": "Rechtskräftig",
        "index": 1,
        "OfficialNumber": "3891.100",
        "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
        "ResponsibleOffice_OfficeAtWeb": "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
        "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/198"}],
    }, {
        "Canton": "BL",
        "DocumentType": "Hint",
        "Lawstatus_Code": "inKraft",
        "Lawstatus_Text": "Rechtskräftig",
        "index": 2,
        "OfficialNumber": "3891.100",
        "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
        "ResponsibleOffice_OfficeAtWeb": "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
        "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/198"}],
        "Title": "Baugesetz"

    }]

    expected_result = [{
        "Canton": "BL",
        "DocumentType": "Hint",
        "Lawstatus_Code": "inKraft",
        "Lawstatus_Text": "Rechtskräftig",
        "index": 1,
        "OfficialNumber": "3891.100",
        "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
        "ResponsibleOffice_OfficeAtWeb": "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
        "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/198"}],
    }, {
        "Canton": "BL",
        "DocumentType": "Hint",
        "Lawstatus_Code": "inKraft",
        "Lawstatus_Text": "Rechtskräftig",
        "index": 2,
        "OfficialNumber": "3891.100",
        "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
        "ResponsibleOffice_OfficeAtWeb": "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
        "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/198"}],
        "Title": "Baugesetz"
    }, {
        "Canton": "BL",
        "DocumentType": "Hint",
        "Lawstatus_Code": "inKraft",
        "Lawstatus_Text": "Rechtskräftig",
        "OfficialNumber": "3891.100",
        "ResponsibleOffice_Name": "Bundesamt für Verkehr BAV",
        "ResponsibleOffice_OfficeAtWeb": "http://www.bav.admin.ch/themen/verkehrspolitik/00709/index.html",
        "TextAtWeb": [{"URL": "https://oereb-gr-preview.000.ch/api/attachments/197"}],
        "Title": "Revision Ortsplanung"
    }]

    assert expected_result == renderer.sort_dict_list(test_hints, renderer.sort_hints_laws)
def test_get_sorted_legend(DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo())
    test_legend_list = [
        {
            'TypeCode': u'StaoTyp2',
            'Geom_Type': u'AreaShare',
            'TypeCodelist': '',
            'AreaShare': 11432,
            'PartInPercent': 32.6,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp2',
            'LegendText': u'Belastet, untersuchungsbedürftig'
        }, {
            'TypeCode': u'StaoTyp3',
            'Geom_Type': u'LengthShare',
            'TypeCodelist': '',
            'LengthShare': 164,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp3',
            'LegendText': u'Belastet, überwachungsbedürftig'
        }, {
            'TypeCode': u'StaoTyp1',
            'Geom_Type': u'NrOfPoints',
            'TypeCodelist': '',
            'NrOfPoints': 2,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp1',
            'LegendText': u'Belastet, keine schädlichen oder lästigen Einwirkungen zu erwarten'
        }, {
            'TypeCode': u'StaoTyp3',
            'Geom_Type': u'LengthShare',
            'TypeCodelist': '',
            'LengthShare': 2000,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp3',
            'LegendText': u'Belastet, untersuchungsbedürftig'
        }, {
            'TypeCode': u'StaoTyp2',
            'Geom_Type': u'AreaShare',
            'TypeCodelist': '',
            'AreaShare': 114,
            'PartInPercent': 32.6,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp2',
            'LegendText': u'Belastet, untersuchungsbedürftig'
        }
    ]
    sorted_list = renderer.sort_dict_list(test_legend_list, renderer.sort_legend_elem)
    expected_result = [
        {
            'TypeCode': u'StaoTyp2',
            'Geom_Type': u'AreaShare',
            'TypeCodelist': '',
            'AreaShare': 11432,
            'PartInPercent': 32.6,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp2',
            'LegendText': u'Belastet, untersuchungsbedürftig'
        }, {
            'TypeCode': u'StaoTyp2',
            'Geom_Type': u'AreaShare',
            'TypeCodelist': '',
            'AreaShare': 114,
            'PartInPercent': 32.6,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp2',
            'LegendText': u'Belastet, untersuchungsbedürftig'
        }, {
            'TypeCode': u'StaoTyp3',
            'Geom_Type': u'LengthShare',
            'TypeCodelist': '',
            'LengthShare': 2000,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp3',
            'LegendText': u'Belastet, untersuchungsbedürftig'
        }, {
            'TypeCode': u'StaoTyp3',
            'Geom_Type': u'LengthShare',
            'TypeCodelist': '',
            'LengthShare': 164,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp3',
            'LegendText': u'Belastet, überwachungsbedürftig'
        }, {
            'TypeCode': u'StaoTyp1',
            'Geom_Type': u'NrOfPoints',
            'TypeCodelist': '',
            'NrOfPoints': 2,
            'SymbolRef': u'http://localhost:6543/oereb/image/symbol/\
                        ch.BelasteteStandorteOeffentlicherVerkehr/1/StaoTyp1',
            'LegendText': u'Belastet, keine schädlichen oder lästigen Einwirkungen zu erwarten'
        }
    ]
    assert sorted_list == expected_result
def test_legend(pyramid_oereb_test_config, extract, geometry, DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo)
    renderer.convert_to_printable_extract(extract, geometry)
    first_plr = extract.get('RealEstate_RestrictionOnLandownership')[0]
    assert isinstance(first_plr, dict)
def test_default_wms_url_param_config(DummyRenderInfo):
    renderer = Renderer(DummyRenderInfo())
    config = renderer.get_wms_url_params()
    # Do the check for this test. Value should be the default setting.
    assert config == {'TRANSPARENT': 'true'}