Skip to content
Snippets Groups Projects
Commit b8c08435 authored by Neda Moeini's avatar Neda Moeini
Browse files

Fixed site name validtor issues.

parent 9446a4c5
No related branches found
No related tags found
1 merge request!97Feature/nat 328 site names should be validated
Pipeline #84396 failed
...@@ -187,10 +187,9 @@ def validate_site_name(site_name: str) -> str: ...@@ -187,10 +187,9 @@ def validate_site_name(site_name: str) -> str:
The site name must consist of three uppercase letters (A-Z) followed by an optional single digit (0-9). The site name must consist of three uppercase letters (A-Z) followed by an optional single digit (0-9).
""" """
pattern = re.compile(r"^[A-Z]{3}[0-9]?$") pattern = re.compile(r"^[A-Z]{3}[0-9]?$")
if pattern.match(site_name): if not pattern.match(site_name):
return site_name
else:
raise ValueError( raise ValueError(
"Enter a valid site name. It must consist of three uppercase letters (A-Z) followed by an optional single " "Enter a valid site name. It must consist of three uppercase letters (A-Z) followed by an optional single "
"digit (0-9)." "digit (0-9)."
) )
return site_name
...@@ -5,12 +5,20 @@ from orchestrator.targets import Target ...@@ -5,12 +5,20 @@ from orchestrator.targets import Target
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle from orchestrator.types import FormGenerator, State, SubscriptionLifecycle
from orchestrator.workflow import StepList, done, init, step, workflow from orchestrator.workflow import StepList, done, init, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from pydantic import validator
from pydantic.fields import ModelField
from gso.products import ProductType from gso.products import ProductType
from gso.products.product_blocks.site import SiteTier from gso.products.product_blocks.site import SiteTier
from gso.products.product_types.site import SiteInactive from gso.products.product_types.site import SiteInactive
from gso.services import subscriptions from gso.services import subscriptions
from gso.services.crm import get_customer_by_name from gso.services.crm import get_customer_by_name
from gso.utils.helpers import (
validate_country_code,
validate_ipv4_or_ipv6,
validate_site_fields_is_unique,
validate_site_name,
)
from gso.workflows.site.create_site import initialize_subscription from gso.workflows.site.create_site import initialize_subscription
...@@ -43,6 +51,32 @@ def generate_initial_input_form() -> FormGenerator: ...@@ -43,6 +51,32 @@ def generate_initial_input_form() -> FormGenerator:
site_ts_address: str site_ts_address: str
customer: str customer: str
@validator("site_ts_address", allow_reuse=True)
def validate_ts_address(cls, site_ts_address: str) -> str:
validate_site_fields_is_unique("site_ts_address", site_ts_address)
validate_ipv4_or_ipv6(site_ts_address)
return site_ts_address
@validator("site_country_code", allow_reuse=True)
def country_code_must_exist(cls, country_code: str) -> str:
validate_country_code(country_code)
return country_code
@validator("site_internal_id", "site_bgp_community_id", allow_reuse=True)
def validate_unique_fields(cls, value: str, field: ModelField) -> str | int:
return validate_site_fields_is_unique(field.name, value)
@validator("site_name", allow_reuse=True)
def site_name_must_be_valid(cls, site_name: str) -> str:
"""Validate the site name.
The site name must consist of three uppercase letters (A-Z) followed
by an optional single digit (0-9).
"""
validate_site_fields_is_unique("site_name", site_name)
validate_site_name(site_name)
return site_name
user_input = yield ImportSite user_input = yield ImportSite
return user_input.dict() return user_input.dict()
......
...@@ -295,7 +295,3 @@ def test_import_iptrunk_fails_on_side_a_and_b_members_mismatch( ...@@ -295,7 +295,3 @@ def test_import_iptrunk_fails_on_side_a_and_b_members_mismatch(
assert response.json() == { assert response.json() == {
"detail": [{"loc": ["body", "__root__"], "msg": "Mismatch between Side A and B members", "type": "value_error"}] "detail": [{"loc": ["body", "__root__"], "msg": "Mismatch between Side A and B members", "type": "value_error"}]
} }
def test_site_name_is_valid():
site_model = SiteImportModel(site_name="123456")
assert site_model is not None
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment