Skip to content

Commit

Permalink
Fix tests for plan regulations
Browse files Browse the repository at this point in the history
  • Loading branch information
Rikuoja committed Jan 28, 2025
1 parent b1f5a5f commit ff20488
Show file tree
Hide file tree
Showing 4 changed files with 159 additions and 181 deletions.
188 changes: 95 additions & 93 deletions database/test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -589,10 +589,8 @@ def type_of_plan_regulation_instance(session):


@pytest.fixture()
def type_of_plan_regulation_number_of_stories_instance(session):
instance = codes.TypeOfPlanRegulation(
value="maanpaallinenKerroslukuArvovali", status="LOCAL"
)
def type_of_plan_regulation_allowed_area_instance(session):
instance = codes.TypeOfPlanRegulation(value="sallittuKerrosala", status="LOCAL")
session.add(instance)
session.commit()
yield instance
Expand All @@ -601,8 +599,10 @@ def type_of_plan_regulation_number_of_stories_instance(session):


@pytest.fixture()
def type_of_plan_regulation_verbal_instance(session):
instance = codes.TypeOfPlanRegulation(value="sanallinenMaarays", status="LOCAL")
def type_of_plan_regulation_number_of_stories_instance(session):
instance = codes.TypeOfPlanRegulation(
value="maanpaallinenKerroslukuArvovali", status="LOCAL"
)
session.add(instance)
session.commit()
yield instance
Expand All @@ -611,8 +611,8 @@ def type_of_plan_regulation_verbal_instance(session):


@pytest.fixture()
def type_of_verbal_plan_regulation_instance(session):
instance = codes.TypeOfVerbalPlanRegulation(value="perustaminen", status="LOCAL")
def type_of_plan_regulation_verbal_instance(session):
instance = codes.TypeOfPlanRegulation(value="sanallinenMaarays", status="LOCAL")
session.add(instance)
session.commit()
yield instance
Expand All @@ -621,10 +621,8 @@ def type_of_verbal_plan_regulation_instance(session):


@pytest.fixture()
def type_of_additional_information_instance(session):
instance = codes.TypeOfAdditionalInformation(
value="paakayttotarkoitus", status="LOCAL"
)
def type_of_verbal_plan_regulation_instance(session):
instance = codes.TypeOfVerbalPlanRegulation(value="perustaminen", status="LOCAL")
session.add(instance)
session.commit()
yield instance
Expand Down Expand Up @@ -876,6 +874,7 @@ def land_use_area_instance(
type_of_underground_instance,
plan_instance,
plan_regulation_group_instance,
numeric_plan_regulation_group_instance,
):
instance = models.LandUseArea(
geom=from_shape(
Expand Down Expand Up @@ -906,7 +905,10 @@ def land_use_area_instance(
lifecycle_status=preparation_status_instance,
type_of_underground=type_of_underground_instance,
plan=plan_instance,
plan_regulation_groups=[plan_regulation_group_instance],
plan_regulation_groups=[
plan_regulation_group_instance,
numeric_plan_regulation_group_instance,
],
)
session.add(instance)
session.commit()
Expand Down Expand Up @@ -1048,6 +1050,26 @@ def plan_regulation_group_instance(
session.commit()


# Multiple numerical/decimal regulations cannot be in the same plan regulation group.
# Therefore, these plan regulations require their own groups.
@pytest.fixture(scope="function")
def numeric_plan_regulation_group_instance(
session, plan_instance, type_of_plan_regulation_group_instance
):
instance = models.PlanRegulationGroup(
short_name="N",
plan=plan_instance,
ordering=3,
type_of_plan_regulation_group=type_of_plan_regulation_group_instance,
name={"fin": "test_numeric_plan_regulation_group"},
)
session.add(instance)
session.commit()
yield instance
session.delete(instance)
session.commit()


@pytest.fixture(scope="function")
def point_plan_regulation_group_instance(
session, plan_instance, type_of_plan_regulation_group_instance
Expand Down Expand Up @@ -1110,18 +1132,18 @@ def empty_value_plan_regulation_instance(
def numeric_plan_regulation_instance(
session,
preparation_status_instance,
type_of_plan_regulation_instance,
plan_regulation_group_instance,
type_of_plan_regulation_allowed_area_instance,
numeric_plan_regulation_group_instance,
):
instance = models.PlanRegulation(
subject_identifiers=["#test_regulation"],
value_data_type=AttributeValueDataType.NUMERIC,
value_data_type=AttributeValueDataType.POSITIVE_NUMERIC,
numeric_value=1,
unit="m",
unit="k-m2",
lifecycle_status=preparation_status_instance,
type_of_plan_regulation=type_of_plan_regulation_instance,
plan_regulation_group=plan_regulation_group_instance,
ordering=2,
type_of_plan_regulation=type_of_plan_regulation_allowed_area_instance,
plan_regulation_group=numeric_plan_regulation_group_instance,
ordering=1,
)
session.add(instance)
session.commit()
Expand All @@ -1139,7 +1161,7 @@ def numeric_range_plan_regulation_instance(
):
instance = models.PlanRegulation(
subject_identifiers=["#test_regulation"],
value_data_type=AttributeValueDataType.NUMERIC_RANGE,
value_data_type=AttributeValueDataType.POSITIVE_NUMERIC_RANGE,
numeric_range_min=2,
numeric_range_max=3,
lifecycle_status=preparation_status_instance,
Expand Down Expand Up @@ -1452,6 +1474,7 @@ def complete_test_plan(
land_use_area_instance: models.LandUseArea,
land_use_point_instance: models.LandUsePoint,
plan_regulation_group_instance: models.PlanRegulationGroup,
numeric_plan_regulation_group_instance: models.PlanRegulationGroup,
point_plan_regulation_group_instance: models.PlanRegulationGroup,
general_regulation_group_instance: models.PlanRegulationGroup,
empty_value_plan_regulation_instance: models.PlanRegulation,
Expand Down Expand Up @@ -1496,15 +1519,19 @@ def complete_test_plan(
# Add the optional (nullable) relationships. We don't want them to be present in
# all fixtures.
empty_value_plan_regulation_instance.plan_theme = plan_theme_instance

# empty value plan regulation may have intended use
empty_value_plan_regulation_instance.additional_information.append(
make_additional_information_instance_for_plan_regulation(
empty_value_plan_regulation_instance,
type_of_main_use_additional_information_instance,
)
)

numeric_plan_regulation_instance.plan_theme = plan_theme_instance
# allowed area numeric value cannot be used with intended use regulation type

text_plan_regulation_instance.plan_theme = plan_theme_instance
# text value plan regulation may have intended use
text_plan_regulation_instance.additional_information.append(
make_additional_information_instance_for_plan_regulation(
text_plan_regulation_instance,
Expand All @@ -1513,40 +1540,16 @@ def complete_test_plan(
)

point_text_plan_regulation_instance.plan_theme = plan_theme_instance
point_text_plan_regulation_instance.additional_information.append(
make_additional_information_instance_for_plan_regulation(
point_text_plan_regulation_instance,
type_of_main_use_additional_information_instance,
)
)

numeric_plan_regulation_instance.plan_theme = plan_theme_instance
numeric_plan_regulation_instance.additional_information.append(
make_additional_information_instance_for_plan_regulation(
numeric_plan_regulation_instance,
type_of_main_use_additional_information_instance,
)
)
# point cannot *currently* be used with intended use regulation type

numeric_range_plan_regulation_instance.plan_theme = plan_theme_instance
# numeric range cannot be used with intended use regulation type

verbal_plan_regulation_instance.plan_theme = plan_theme_instance
verbal_plan_regulation_instance.additional_information.append(
make_additional_information_instance_for_plan_regulation(
verbal_plan_regulation_instance,
type_of_main_use_additional_information_instance,
)
)
# verbal plan regulation cannot be used with intended use regulation type

# Does general plan regulation need additional information?
general_plan_regulation_instance.plan_theme = plan_theme_instance
general_plan_regulation_instance.additional_information.append(
make_additional_information_instance_for_plan_regulation(
general_plan_regulation_instance,
type_of_main_use_additional_information_instance,
)
)
# general plan regulation cannot be used with intended use regulation type

plan_proposition_instance.plan_theme = plan_theme_instance
session.commit()
Expand Down Expand Up @@ -1803,6 +1806,7 @@ def desired_plan_dict(
land_use_area_instance: models.LandUseArea,
land_use_point_instance: models.LandUsePoint,
plan_regulation_group_instance: models.PlanRegulationGroup,
numeric_plan_regulation_group_instance: models.PlanRegulationGroup,
point_plan_regulation_group_instance: models.PlanRegulationGroup,
general_regulation_group_instance: models.PlanRegulationGroup,
empty_value_plan_regulation_instance: models.PlanRegulation,
Expand Down Expand Up @@ -1862,11 +1866,7 @@ def desired_plan_dict(
"text": general_plan_regulation_instance.text_value,
},
"subjectIdentifiers": general_plan_regulation_instance.subject_identifiers,
"additionalInformations": [
{
"type": "http://uri.suomi.fi/codelist/rytj/RY_Kaavamaarayksen_Lisatiedonlaji/code/paakayttotarkoitus"
}
],
"additionalInformations": [],
"planThemes": [
"http://uri.suomi.fi/codelist/rytj/kaavoitusteema/code/01",
],
Expand Down Expand Up @@ -1923,7 +1923,7 @@ def desired_plan_dict(
"srid": str(PROJECT_SRID),
"geometry": {
"type": "Point",
"coordinates": [382000, 6678000],
"coordinates": [382000.0, 6678000.0],
},
},
"name": land_use_point_instance.name,
Expand All @@ -1946,11 +1946,7 @@ def desired_plan_dict(
"text": point_text_plan_regulation_instance.text_value,
},
"subjectIdentifiers": point_text_plan_regulation_instance.subject_identifiers,
"additionalInformations": [
{
"type": "http://uri.suomi.fi/codelist/rytj/RY_Kaavamaarayksen_Lisatiedonlaji/code/paakayttotarkoitus"
}
],
"additionalInformations": [],
"planThemes": [
"http://uri.suomi.fi/codelist/rytj/kaavoitusteema/code/01",
],
Expand Down Expand Up @@ -1991,39 +1987,12 @@ def desired_plan_dict(
# TODO: plan regulation documents to be added.
"periodOfValidity": None,
},
{
"planRegulationKey": numeric_plan_regulation_instance.id,
"lifeCycleStatus": "http://uri.suomi.fi/codelist/rytj/kaavaelinkaari/code/03",
"type": "http://uri.suomi.fi/codelist/rytj/RY_Kaavamaarayslaji/code/asumisenAlue",
"value": {
"dataType": "Numeric",
"number": int(
numeric_plan_regulation_instance.numeric_value
),
"unitOfMeasure": numeric_plan_regulation_instance.unit,
},
"subjectIdentifiers": numeric_plan_regulation_instance.subject_identifiers,
"additionalInformations": [
{
"type": "http://uri.suomi.fi/codelist/rytj/RY_Kaavamaarayksen_Lisatiedonlaji/code/paakayttotarkoitus"
}
],
"planThemes": [
"http://uri.suomi.fi/codelist/rytj/kaavoitusteema/code/01",
],
# oh great, integer has to be string here for reasons unknown.
"regulationNumber": str(
numeric_plan_regulation_instance.ordering
),
# TODO: plan regulation documents to be added.
"periodOfValidity": None,
},
{
"planRegulationKey": numeric_range_plan_regulation_instance.id,
"lifeCycleStatus": "http://uri.suomi.fi/codelist/rytj/kaavaelinkaari/code/03",
"type": "http://uri.suomi.fi/codelist/rytj/RY_Kaavamaarayslaji/code/maanpaallinenKerroslukuArvovali",
"value": {
"dataType": "NumericRange",
"dataType": "PositiveNumericRange",
"minimumValue": int(
numeric_range_plan_regulation_instance.numeric_range_min
),
Expand Down Expand Up @@ -2078,11 +2047,7 @@ def desired_plan_dict(
"verbalRegulations": [
"http://uri.suomi.fi/codelist/rytj/RY_Sanallisen_Kaavamaarayksen_Laji/code/perustaminen"
],
"additionalInformations": [
{
"type": "http://uri.suomi.fi/codelist/rytj/RY_Kaavamaarayksen_Lisatiedonlaji/code/paakayttotarkoitus"
}
],
"additionalInformations": [],
"planThemes": [
"http://uri.suomi.fi/codelist/rytj/kaavoitusteema/code/01",
],
Expand Down Expand Up @@ -2111,12 +2076,49 @@ def desired_plan_dict(
"groupNumber": plan_regulation_group_instance.ordering,
"colorNumber": "#FFFFFF",
},
{
"planRegulationGroupKey": numeric_plan_regulation_group_instance.id,
"titleOfPlanRegulation": numeric_plan_regulation_group_instance.name,
"planRegulations": [
{
"planRegulationKey": numeric_plan_regulation_instance.id,
"lifeCycleStatus": "http://uri.suomi.fi/codelist/rytj/kaavaelinkaari/code/03",
"type": "http://uri.suomi.fi/codelist/rytj/RY_Kaavamaarayslaji/code/sallittuKerrosala",
"value": {
"dataType": "PositiveNumeric",
"number": int(
numeric_plan_regulation_instance.numeric_value
),
"unitOfMeasure": numeric_plan_regulation_instance.unit,
},
"subjectIdentifiers": numeric_plan_regulation_instance.subject_identifiers,
"additionalInformations": [],
"planThemes": [
"http://uri.suomi.fi/codelist/rytj/kaavoitusteema/code/01",
],
# oh great, integer has to be string here for reasons unknown.
"regulationNumber": str(
numeric_plan_regulation_instance.ordering
),
# TODO: plan regulation documents to be added.
"periodOfValidity": None,
},
],
"planRecommendations": [],
"letterIdentifier": numeric_plan_regulation_group_instance.short_name,
"groupNumber": numeric_plan_regulation_group_instance.ordering,
"colorNumber": "#FFFFFF",
},
],
"planRegulationGroupRelations": [
{
"planObjectKey": land_use_area_instance.id,
"planRegulationGroupKey": plan_regulation_group_instance.id,
},
{
"planObjectKey": land_use_area_instance.id,
"planRegulationGroupKey": numeric_plan_regulation_group_instance.id,
},
{
"planObjectKey": land_use_point_instance.id,
"planRegulationGroupKey": point_plan_regulation_group_instance.id,
Expand Down
4 changes: 3 additions & 1 deletion database/test/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ def test_land_use_area(
type_of_underground_instance: codes.TypeOfUnderground,
plan_instance: models.Plan,
plan_regulation_group_instance: models.PlanRegulationGroup,
numeric_plan_regulation_group_instance: models.PlanRegulationGroup,
):
# non-nullable plan object relations
assert land_use_area_instance.lifecycle_status is preparation_status_instance
Expand All @@ -68,7 +69,8 @@ def test_land_use_area(
assert land_use_area_instance.plan is plan_instance
assert plan_instance.land_use_areas == [land_use_area_instance]
assert land_use_area_instance.plan_regulation_groups == [
plan_regulation_group_instance
numeric_plan_regulation_group_instance,
plan_regulation_group_instance,
]

assert plan_regulation_group_instance.land_use_areas == [land_use_area_instance]
Expand Down
Loading

0 comments on commit ff20488

Please sign in to comment.