Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 30 additions & 25 deletions tests/app/core/settings_override/api/test_policy_lockdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,12 @@
from app.inventory.config import inventory_settings, InventorySettings
from app.sep.config import sep_settings, SEPSettings
from app.tasks.config import tasks_settings, TasksSettings
from tests.app.core.settings_override.conftest import insert_override_row
from tests.app.core.settings_override.conftest import (
insert_override_row,
SEP_SETTINGS_TOKEN,
SETTINGS_TOKEN,
TASKS_SETTINGS_TOKEN,
)
from tests.app.db_schema import apply_schema

ANNOTATIONS_KEY = "Settings.PMM__annotations_enabled"
Expand Down Expand Up @@ -363,7 +368,7 @@ async def test_locked_key_with_row_is_deleted(
"""Assert a stale row for a now-locked key is removable."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEP_SETTINGS_TOKEN,
key="INVENTORY_ENDPOINT",
value="https://stale.example.com",
is_active=True,
Expand All @@ -374,7 +379,7 @@ async def test_locked_key_with_row_is_deleted(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEP_SETTINGS_TOKEN,
key="INVENTORY_ENDPOINT",
)
== 0
Expand Down Expand Up @@ -408,7 +413,7 @@ async def test_row_under_fully_locked_parent_is_deleted(
"""Assert a stale leaf row survives its parent becoming unaddressable."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key="NOMAD__timeout",
value=30,
is_active=True,
Expand All @@ -419,7 +424,7 @@ async def test_row_under_fully_locked_parent_is_deleted(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key="NOMAD__timeout",
)
== 0
Expand All @@ -442,7 +447,7 @@ async def test_fully_locked_parent_with_row_is_deleted(
"""Assert a whole-parent row survives every leaf beneath it being withheld."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key="NOMAD",
value={"timeout": 30},
is_active=True,
Expand All @@ -453,7 +458,7 @@ async def test_fully_locked_parent_with_row_is_deleted(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key="NOMAD",
)
== 0
Expand Down Expand Up @@ -499,7 +504,7 @@ async def test_delete_removes_legacy_cased_row(
"""Assert DELETE of the canonical key removes a mixed-case stored row."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key=self._LEGACY_NESTED,
value=30,
is_active=True,
Expand All @@ -509,7 +514,7 @@ async def test_delete_removes_legacy_cased_row(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
)
== 0
)
Expand All @@ -524,7 +529,7 @@ async def test_delete_legacy_row_under_allowlist_is_not_conflict(
"""Assert a withheld field's legacy row is still found and deleted."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key=self._LEGACY_NESTED,
value=30,
is_active=True,
Expand All @@ -535,7 +540,7 @@ async def test_delete_legacy_row_under_allowlist_is_not_conflict(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
)
== 0
)
Expand All @@ -549,14 +554,14 @@ async def test_delete_removes_legacy_and_canonical_duplicates(
"""Assert DELETE of the canonical key removes every matching stored row."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key=self._LEGACY_NESTED,
value=30,
is_active=True,
)
await insert_override_row(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
key=self._CANONICAL_NESTED,
value=45,
is_active=True,
Expand All @@ -566,7 +571,7 @@ async def test_delete_removes_legacy_and_canonical_duplicates(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.TASKS_SETTINGS,
setting_class=TASKS_SETTINGS_TOKEN,
)
== 0
)
Expand All @@ -584,7 +589,7 @@ async def test_delete_removes_legacy_cased_top_level_row(
"""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEP_SETTINGS_TOKEN,
key=self._LEGACY_TOP,
value="https://stale.example.com",
is_active=True,
Expand All @@ -594,7 +599,7 @@ async def test_delete_removes_legacy_cased_top_level_row(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEP_SETTINGS_TOKEN,
)
== 0
)
Expand All @@ -609,7 +614,7 @@ async def test_delete_legacy_top_level_under_allowlist_is_not_conflict(
"""Assert a withheld top-level legacy row is still found and deleted."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEP_SETTINGS_TOKEN,
key=self._LEGACY_TOP,
value="https://stale.example.com",
is_active=True,
Expand All @@ -620,7 +625,7 @@ async def test_delete_legacy_top_level_under_allowlist_is_not_conflict(
assert (
await SettingsOverrideManager.count(
override_session,
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEP_SETTINGS_TOKEN,
)
== 0
)
Expand All @@ -634,7 +639,7 @@ async def test_patch_updates_legacy_row_instead_of_duplicating(
"""Assert PATCH heals a legacy nested key to the canonical spelling."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.SETTINGS,
setting_class=SETTINGS_TOKEN,
key=self._LEGACY_PMM,
value="https://stale.example.com",
is_active=True,
Expand All @@ -643,7 +648,7 @@ async def test_patch_updates_legacy_row_instead_of_duplicating(
response = client.patch(SETTINGS_URL, json={self._CANONICAL_PMM: new_value})
assert response.status_code == status.HTTP_200_OK
rows = await SettingsOverrideManager.list(
override_session, setting_class=SettingClassEnum.SETTINGS
override_session, setting_class=SETTINGS_TOKEN
)
assert len(rows) == 1
assert rows[0].key == self._CANONICAL_PMM
Expand All @@ -659,14 +664,14 @@ async def test_patch_updates_legacy_and_canonical_duplicates(
"""Assert PATCH collapses duplicate case-variants to one canonical row."""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.SETTINGS,
setting_class=SETTINGS_TOKEN,
key=self._LEGACY_PMM,
value="https://legacy.example.com",
is_active=True,
)
await insert_override_row(
override_session,
setting_class=SettingClassEnum.SETTINGS,
setting_class=SETTINGS_TOKEN,
key=self._CANONICAL_PMM,
value="https://canonical.example.com",
is_active=True,
Expand All @@ -675,7 +680,7 @@ async def test_patch_updates_legacy_and_canonical_duplicates(
response = client.patch(SETTINGS_URL, json={self._CANONICAL_PMM: new_value})
assert response.status_code == status.HTTP_200_OK
rows = await SettingsOverrideManager.list(
override_session, setting_class=SettingClassEnum.SETTINGS
override_session, setting_class=SETTINGS_TOKEN
)
assert len(rows) == 1
assert rows[0].key == self._CANONICAL_PMM
Expand All @@ -695,7 +700,7 @@ async def test_patch_updates_legacy_top_level_row_instead_of_duplicating(
"""
await insert_override_row(
override_session,
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEP_SETTINGS_TOKEN,
key=self._LEGACY_TOP,
value="https://stale.example.com",
is_active=True,
Expand All @@ -708,7 +713,7 @@ async def test_patch_updates_legacy_top_level_row_instead_of_duplicating(
assert applied["value"] == new_value
assert applied["has_override"] is True
rows = await SettingsOverrideManager.list(
override_session, setting_class=SettingClassEnum.SEP_SETTINGS
override_session, setting_class=SEP_SETTINGS_TOKEN
)
assert len(rows) == 1
assert rows[0].key == self._CANONICAL_TOP
Expand Down
12 changes: 6 additions & 6 deletions tests/app/core/settings_override/api/test_registry_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,12 +292,12 @@ def test_iter_nested_leaf_keys_enumerates_secret_leaf() -> None:
def test_settings_response_redacts_secret_leaf_with_key_path() -> None:
"""A secret leaf response redacts the value and carries the canonical key_path."""
proxy = OverridableSettingsProxy(
_SecretLeafParent, setting_class=SettingClassEnum.SEP_SETTINGS
_SecretLeafParent, setting_class=SEPSettings.__name__
)
leaf_meta = resolve_nested_field_metadata(_SecretLeafParent, "GROUP__TOKEN")
assert leaf_meta is not None
response = _settings_response_from_field(
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEPSettings.__name__,
settings_cls=_SecretLeafParent,
proxy=proxy,
field_meta=leaf_meta,
Expand All @@ -311,11 +311,11 @@ def test_settings_response_redacts_secret_leaf_with_key_path() -> None:
def test_settings_response_applicable_defaults_true() -> None:
"""Mark a field response applicable when no applicability predicate is given."""
proxy = OverridableSettingsProxy(
_FixtureSettings, setting_class=SettingClassEnum.SEP_SETTINGS
_FixtureSettings, setting_class=SEPSettings.__name__
)
meta = next(m for m in iter_class_fields(_FixtureSettings) if m.key == "HOT_BOOL")
response = _settings_response_from_field(
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEPSettings.__name__,
settings_cls=_FixtureSettings,
proxy=proxy,
field_meta=meta,
Expand All @@ -327,11 +327,11 @@ def test_settings_response_applicable_defaults_true() -> None:
def test_settings_response_honors_applicability_predicate() -> None:
"""Mark the field response not applicable when the predicate returns ``False``."""
proxy = OverridableSettingsProxy(
_FixtureSettings, setting_class=SettingClassEnum.SEP_SETTINGS
_FixtureSettings, setting_class=SEPSettings.__name__
)
meta = next(m for m in iter_class_fields(_FixtureSettings) if m.key == "HOT_BOOL")
response = _settings_response_from_field(
setting_class=SettingClassEnum.SEP_SETTINGS,
setting_class=SEPSettings.__name__,
settings_cls=_FixtureSettings,
proxy=proxy,
field_meta=meta,
Expand Down
19 changes: 17 additions & 2 deletions tests/app/core/settings_override/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,31 @@
from sqlmodel.ext.asyncio.session import AsyncSession
from sqlmodel.pool import StaticPool

from app.core.config import settings
from app.core.alerts.config import AlertSettings
from app.core.config import Settings, settings
from app.core.db.utils import get_async_session_maker_from_engine
from app.core.settings_override.manager import SettingsOverrideManager
from app.core.settings_override.models import SettingOverride
from app.core.settings_override.models import setting_class_token, SettingOverride
from app.core.utils import json_serializer
from app.inventory.config import InventorySettings
from app.sep.config import SEPSettings
from app.sep.snippets.config import SnippetsSettings
from app.tasks.anonymizer.config import AnonymizerSettings
from app.tasks.config import TasksSettings
from tests.app.db_schema import apply_schema

#: Importable path patched when tests replace ``start_refresh_task``.
START_REFRESH_TASK = "app.core.settings_override.worker.start_refresh_task"

#: Storage tokens for ``SettingOverride.setting_class`` (SCREAMING_SNAKE).
ALERT_SETTINGS_TOKEN = setting_class_token(AlertSettings)
ANONYMIZER_SETTINGS_TOKEN = setting_class_token(AnonymizerSettings)
INVENTORY_SETTINGS_TOKEN = setting_class_token(InventorySettings)
SEP_SETTINGS_TOKEN = setting_class_token(SEPSettings)
SETTINGS_TOKEN = setting_class_token(Settings)
SNIPPETS_SETTINGS_TOKEN = setting_class_token(SnippetsSettings)
TASKS_SETTINGS_TOKEN = setting_class_token(TasksSettings)


async def insert_override_row(
session: AsyncSession, **kwargs: object
Expand Down
Loading
Loading