Skip to content
Snippets Groups Projects
Commit 83fc6c76 authored by Mohammad Torkashvand's avatar Mohammad Torkashvand
Browse files

added unit tests for validate_subscriptions

parent 8948c5b8
No related branches found
No related tags found
1 merge request!109added unit tests for validate_subscriptions
Pipeline #84522 passed
...@@ -13,7 +13,12 @@ logger = structlog.get_logger(__name__) ...@@ -13,7 +13,12 @@ logger = structlog.get_logger(__name__)
@celery.task @celery.task
@scheduler(name="Subscriptions Validator", minute="10", hour="0") @scheduler(name="Subscriptions Validator", minute="10", hour="0")
def validate_subscriptions() -> None: def validate_subscriptions() -> None:
for subscription in get_insync_subscriptions(): subscriptions = get_insync_subscriptions()
if not subscriptions:
logger.info("No subscriptions to validate")
return
for subscription in subscriptions:
validation_workflow = None validation_workflow = None
for workflow in subscription.product.workflows: for workflow in subscription.product.workflows:
......
...@@ -142,15 +142,14 @@ def configuration_data() -> dict: ...@@ -142,15 +142,14 @@ def configuration_data() -> dict:
@pytest.fixture(scope="session", autouse=True) @pytest.fixture(scope="session", autouse=True)
def data_config_filename(configuration_data) -> str: def data_config_filename(configuration_data) -> str:
file_name = os.path.join(tempfile.gettempdir(), os.urandom(24).hex()) """Create a temporary file with configuration data and set an environment variable to its path."""
open(file_name, "x").close() with tempfile.NamedTemporaryFile(mode="w+", delete=False) as f:
with open(file_name, "wb") as f: json.dump(configuration_data, f, ensure_ascii=False)
f.write(json.dumps(configuration_data).encode("utf-8"))
f.flush()
os.environ["OSS_PARAMS_FILENAME"] = f.name os.environ["OSS_PARAMS_FILENAME"] = f.name
yield f.name yield f.name
del os.environ["OSS_PARAMS_FILENAME"]
os.remove(f.name)
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
......
from unittest.mock import patch from unittest.mock import MagicMock, patch
import pytest import pytest
from orchestrator.targets import Target
from gso.schedules.scheduling import scheduler from gso.schedules.scheduling import scheduler
@pytest.fixture(scope="module")
def validate_subscriptions():
from gso.schedules.validate_subscriptions import validate_subscriptions as vs
return vs
@pytest.fixture
def mock_get_insync_subscriptions():
with patch("gso.schedules.validate_subscriptions.get_insync_subscriptions") as mock:
yield mock
@pytest.fixture
def mock_get_execution_context():
with patch("gso.schedules.validate_subscriptions.get_execution_context") as mock:
mock.return_value = {"validate": MagicMock()}
yield mock
@pytest.fixture
def mock_logger():
with patch("gso.schedules.validate_subscriptions.logger") as mock:
yield mock
@pytest.fixture @pytest.fixture
def mock_celery(): def mock_celery():
with patch("gso.schedules.scheduling.current_app") as mock_app: with patch("gso.schedules.scheduling.current_app") as mock_app:
...@@ -35,3 +62,46 @@ def test_scheduled_task_still_works(): ...@@ -35,3 +62,46 @@ def test_scheduled_task_still_works():
result = mock_task() result = mock_task()
assert result == "task result" assert result == "task result"
def test_no_subscriptions(mock_get_insync_subscriptions, mock_logger, validate_subscriptions):
mock_get_insync_subscriptions.return_value = []
validate_subscriptions()
mock_logger.info.assert_called_once_with("No subscriptions to validate")
def test_subscriptions_without_system_target_workflow(
mock_get_insync_subscriptions, mock_logger, validate_subscriptions
):
mock_get_insync_subscriptions.return_value = [MagicMock(product=MagicMock(workflows=[]))]
validate_subscriptions()
mock_logger.warning.assert_called_once()
def test_subscription_status_not_usable(
mock_get_insync_subscriptions, mock_get_execution_context, validate_subscriptions
):
subscription_mock = MagicMock()
subscription_mock.product.workflows = [MagicMock(target=Target.SYSTEM, name="workflow_name")]
subscription_mock.status = "Not Usable Status"
mock_get_insync_subscriptions.return_value = [subscription_mock]
validate_subscriptions()
validate_func = mock_get_execution_context()["validate"]
validate_func.assert_not_called()
def test_valid_subscriptions_for_validation(
mock_get_insync_subscriptions, mock_get_execution_context, validate_subscriptions
):
subscription_mock = MagicMock()
mocked_workflow = MagicMock(target=Target.SYSTEM, name="workflow_name")
subscription_mock.product.workflows = [mocked_workflow]
subscription_mock.status = "active"
mock_get_insync_subscriptions.return_value = [subscription_mock]
validate_subscriptions()
validate_func = mock_get_execution_context()["validate"]
validate_func.assert_called_once_with(
mocked_workflow.name, json=[{"subscription_id": str(subscription_mock.subscription_id)}]
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment