Skip to content

Commit 1d8afbc

Browse files
authored
Merge pull request #6608 from opsmill/pog-restrict-range-update-IFC-1560
Restrict range modifications on schema defined number pools
2 parents a6f718e + af08ed6 commit 1d8afbc

File tree

2 files changed

+90
-1
lines changed

2 files changed

+90
-1
lines changed

backend/infrahub/graphql/mutations/resource_manager.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from typing_extensions import Self
88

99
from infrahub.core import protocols, registry
10-
from infrahub.core.constants import InfrahubKind
10+
from infrahub.core.constants import InfrahubKind, NumberPoolType
1111
from infrahub.core.ipam.constants import PrefixMemberType
1212
from infrahub.core.manager import NodeManager
1313
from infrahub.core.schema import NodeSchema
@@ -235,6 +235,14 @@ async def mutate_update(
235235
number_pool, result = await super().mutate_update(
236236
info=info, data=data, branch=branch, database=dbt, node=node
237237
)
238+
239+
if number_pool.pool_type.value.value == NumberPoolType.SCHEMA.value and ( # type: ignore[attr-defined]
240+
"start_range" in data.keys() or "end_range" in data.keys()
241+
):
242+
raise ValidationError(
243+
input_value="start_range or end_range can't be updated on schema defined pools, update the schema in the default branch instead"
244+
)
245+
238246
if number_pool.start_range.value > number_pool.end_range.value: # type: ignore[attr-defined]
239247
raise ValidationError(input_value="start_range can't be larger than end_range")
240248

backend/tests/unit/graphql/mutations/test_resource_manager.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,3 +956,84 @@ async def test_delete_number_pool_in_use_by_numberpool_attribute(
956956

957957
assert delete_fail.errors
958958
assert "Unable to delete number pool SnowTask.number is in use (branches: main)" in str(delete_fail.errors)
959+
960+
961+
async def test_update_schema_number_pool_range(
962+
db: InfrahubDatabase, default_branch: Branch, register_core_models_schema: None
963+
) -> None:
964+
await load_schema(db=db, schema=SNOW_TICKET_SCHEMA)
965+
gql_params = await prepare_graphql_params(db=db, include_subscription=False, branch=default_branch)
966+
node_schema = registry.schema.get(name="SnowTask", branch=default_branch)
967+
number_pool_attribute = node_schema.get_attribute(name="number")
968+
assert isinstance(number_pool_attribute.parameters, NumberPoolParameters)
969+
registry.node[InfrahubKind.NUMBERPOOL] = CoreNumberPool
970+
query_before_creation = await graphql(
971+
schema=gql_params.schema,
972+
source=QUERY_NUMBER_POOL,
973+
context_value=gql_params.context,
974+
root_value=None,
975+
variable_values={
976+
"id": number_pool_attribute.parameters.number_pool_id,
977+
},
978+
)
979+
980+
assert not query_before_creation.errors
981+
assert query_before_creation.data
982+
assert query_before_creation.data["CoreNumberPool"]["count"] == 0
983+
984+
create_snow_incident_mutation = """
985+
mutation CreateSnowIncident(
986+
$title: String!,
987+
) {
988+
SnowIncidentCreate(
989+
data: {
990+
title: {value: $title},
991+
}
992+
) {
993+
object {
994+
title {
995+
value
996+
}
997+
number {
998+
value
999+
source {
1000+
id
1001+
}
1002+
}
1003+
identifier {
1004+
value
1005+
}
1006+
}
1007+
}
1008+
}
1009+
"""
1010+
1011+
create_snow_incident = await graphql(
1012+
schema=gql_params.schema,
1013+
source=create_snow_incident_mutation,
1014+
context_value=gql_params.context,
1015+
root_value=None,
1016+
variable_values={
1017+
"title": "Printer is saying PC load Letter",
1018+
},
1019+
)
1020+
assert not create_snow_incident.errors
1021+
assert create_snow_incident.data
1022+
1023+
update_forbidden = await graphql(
1024+
schema=gql_params.schema,
1025+
source=UPDATE_NUMBER_POOL,
1026+
context_value=gql_params.context,
1027+
root_value=None,
1028+
variable_values={
1029+
"id": number_pool_attribute.parameters.number_pool_id,
1030+
"start_range": 1,
1031+
"end_range": 10,
1032+
},
1033+
)
1034+
1035+
assert update_forbidden.errors
1036+
assert (
1037+
"start_range or end_range can't be updated on schema defined pools, update the schema in the default branch instead"
1038+
in str(update_forbidden.errors)
1039+
)

0 commit comments

Comments
 (0)