diff --git a/gso/schedules/validate_subscriptions.py b/gso/schedules/validate_subscriptions.py
index e17ee449c4146296fb91d830f51dd6333016fb11..78525caf38eb8569232d07631a10c3b524529fa0 100644
--- a/gso/schedules/validate_subscriptions.py
+++ b/gso/schedules/validate_subscriptions.py
@@ -13,7 +13,12 @@ logger = structlog.get_logger(__name__)
 @celery.task
 @scheduler(name="Subscriptions Validator", minute="10", hour="0")
 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
 
         for workflow in subscription.product.workflows:
diff --git a/test/conftest.py b/test/conftest.py
index 58f5664bec8b4131e3c17a197f2448c120ba0381..8e4a71136d1ad8fc94696e9a0de308a96d8b0e94 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -142,15 +142,14 @@ def configuration_data() -> dict:
 
 @pytest.fixture(scope="session", autouse=True)
 def data_config_filename(configuration_data) -> str:
-    file_name = os.path.join(tempfile.gettempdir(), os.urandom(24).hex())
-    open(file_name, "x").close()
-    with open(file_name, "wb") as f:
-        f.write(json.dumps(configuration_data).encode("utf-8"))
-        f.flush()
-
+    """Create a temporary file with configuration data and set an environment variable to its path."""
+    with tempfile.NamedTemporaryFile(mode="w+", delete=False) as f:
+        json.dump(configuration_data, f, ensure_ascii=False)
         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")
diff --git a/test/schedules/test_scheduling.py b/test/schedules/test_scheduling.py
index 531f20566d05eff1f7023393f91e4c701a4896f3..5007ed0068ac21607f7fc0ed065df71793f7c95e 100644
--- a/test/schedules/test_scheduling.py
+++ b/test/schedules/test_scheduling.py
@@ -1,10 +1,37 @@
-from unittest.mock import patch
+from unittest.mock import MagicMock, patch
 
 import pytest
+from orchestrator.targets import Target
 
 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
 def mock_celery():
     with patch("gso.schedules.scheduling.current_app") as mock_app:
@@ -35,3 +62,46 @@ def test_scheduled_task_still_works():
 
     result = mock_task()
     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)}]
+    )