Skip to content
Snippets Groups Projects
conftest.py 4.02 KiB
from typing import Any

from gso.services.kentik_client import NewKentikDevice


class MockedNetboxClient:
    class BaseMockObject:
        def __init__(self, **kwargs):
            for key, value in kwargs.items():
                setattr(self, key, value)

    def get_device_by_name(self):
        return self.BaseMockObject(id=1, name="test")

    @staticmethod
    def get_interface_by_name_and_device(interface_name: str, device_name: str):
        return {
            "name": f"{interface_name}",
            "module": {"display": f"Module{interface_name}"},
            "description": f"Description{interface_name}-{device_name}",
        }

    @staticmethod
    def get_available_lags() -> list[str]:
        return [f"lag-{lag}" for lag in range(1, 5)]

    @staticmethod
    def get_available_services_lags() -> list[str]:
        return [f"lag-{lag}" for lag in range(21, 50)]

    @staticmethod
    def get_available_interfaces():
        interfaces = []
        for interface in range(5):
            interface_data = {
                "name": f"Interface{interface}",
                "module": {"display": f"Module{interface}"},
                "description": f"Description{interface}",
            }
            interfaces.append(interface_data)
        return interfaces

    def create_interface(self):
        return self.BaseMockObject(id=1, name="test")

    def attach_interface_to_lag(self):
        return self.BaseMockObject(id=1, name="test")

    def reserve_interface(self):
        return self.BaseMockObject(id=1, name="test")

    @staticmethod
    def allocate_interface():
        return {"id": 1, "name": "test"}

    def free_interface(self):
        return self.BaseMockObject(id=1, name="test")

    @staticmethod
    def detach_interfaces_from_lag():
        return None

    @staticmethod
    def delete_interface():
        return None

    def get_available_lags_in_range(self):
        return self.get_available_lags()


class MockedSharePointClient:
    class BaseMockObject:
        def __init__(self, **kwargs):
            for key, value in kwargs.items():
                setattr(self, key, value)

    @staticmethod
    def add_list_item(list_name: str, fields: dict[str, str]) -> str:
        return f"http://{list_name}/{fields.popitem()}"


class MockedKentikClient:
    class BaseMockObject:
        def __init__(self, **kwargs):
            for key, value in kwargs.items():
                setattr(self, key, value)

    @staticmethod
    def get_devices() -> list[dict[str, Any]]:
        return [{"id": 0, "device_name": "device-1.internal"}, {"id": 1, "device_name": "device-2.internal"}]

    @staticmethod
    def get_device(device_id: str) -> dict[str, Any]:
        return {"id": device_id, "device_name": "device-1.internal"}

    @staticmethod
    def get_device_by_name(fqdn: str) -> dict[str, Any]:
        return {"id": 0, "device_name": fqdn}

    @staticmethod
    def get_sites() -> list[dict[str, Any]]:
        return [{"id": 0, "site_name": "AMS"}, {"id": 1, "site_name": "BRU"}, {"id": 2, "site_name": "LUX"}]

    @staticmethod
    def get_site_by_name(site_name: str) -> dict[str, Any]:
        return {"id": 0, "site_name": site_name}

    @staticmethod
    def get_plans() -> list[dict[str, Any]]:
        return [{"id": 0, "plan_name": "kentik-plan-1"}, {"id": 1, "plan_name": "kentik-plan-2"}]

    @staticmethod
    def get_plan(plan_id: int) -> dict[str, Any]:
        return {"id": plan_id, "plan_name": "kentik-mocked-plan"}

    @staticmethod
    def get_plan_by_name(plan_name: str) -> dict[str, Any]:
        return {"id": 0, "plan_name": plan_name}

    @staticmethod
    def create_device(device: NewKentikDevice) -> dict[str, Any]:
        return device.model_dump()

    @staticmethod
    def update_device(device_id: int, updated_device: dict[str, Any]) -> dict[str, Any]:
        return {"id": device_id, **updated_device}

    @staticmethod
    def remove_device(device_id: int, *, archive: bool) -> None:
        pass

    @staticmethod
    def remove_device_by_fqdn(fqdn: str, *, archive: bool) -> None:
        pass