agnes-the-ai-analyst/tests/test_permissions.py
ZdenekSrotyr 8e9a0c367a fix: replace os.environ direct assignment with monkeypatch.setenv in test fixtures
Prevents environment variable leaking between tests. All DATA_DIR,
JWT_SECRET_KEY, and SCRIPT_TIMEOUT assignments in fixtures now use
monkeypatch.setenv() which auto-reverts after each test. Removes
manual os.environ.pop() cleanup lines.
2026-04-09 07:11:36 +02:00

80 lines
3.2 KiB
Python

"""Tests for sync settings, dataset permissions, and script execution."""
import os
import pytest
@pytest.fixture
def db_conn(tmp_path, monkeypatch):
monkeypatch.setenv("DATA_DIR", str(tmp_path))
from src.db import get_system_db
conn = get_system_db()
yield conn
conn.close()
class TestSyncSettingsRepository:
def test_set_and_get(self, db_conn):
from src.repositories.sync_settings import SyncSettingsRepository
repo = SyncSettingsRepository(db_conn)
repo.set_dataset_enabled("u1", "sales", True)
repo.set_dataset_enabled("u1", "support", False)
settings = repo.get_user_settings("u1")
assert len(settings) == 2
def test_is_enabled(self, db_conn):
from src.repositories.sync_settings import SyncSettingsRepository
repo = SyncSettingsRepository(db_conn)
repo.set_dataset_enabled("u1", "sales", True)
assert repo.is_dataset_enabled("u1", "sales") is True
assert repo.is_dataset_enabled("u1", "support") is False
def test_get_enabled_datasets(self, db_conn):
from src.repositories.sync_settings import SyncSettingsRepository
repo = SyncSettingsRepository(db_conn)
repo.set_dataset_enabled("u1", "sales", True)
repo.set_dataset_enabled("u1", "support", False)
repo.set_dataset_enabled("u1", "hr", True)
enabled = repo.get_enabled_datasets("u1")
assert set(enabled) == {"sales", "hr"}
def test_toggle_dataset(self, db_conn):
from src.repositories.sync_settings import SyncSettingsRepository
repo = SyncSettingsRepository(db_conn)
repo.set_dataset_enabled("u1", "sales", True)
assert repo.is_dataset_enabled("u1", "sales") is True
repo.set_dataset_enabled("u1", "sales", False)
assert repo.is_dataset_enabled("u1", "sales") is False
class TestDatasetPermissionRepository:
def test_grant_and_check(self, db_conn):
from src.repositories.sync_settings import DatasetPermissionRepository
repo = DatasetPermissionRepository(db_conn)
repo.grant("u1", "sales", "read")
assert repo.has_access("u1", "sales") is True
assert repo.has_access("u1", "hr") is False
def test_revoke(self, db_conn):
from src.repositories.sync_settings import DatasetPermissionRepository
repo = DatasetPermissionRepository(db_conn)
repo.grant("u1", "sales", "read")
repo.revoke("u1", "sales")
assert repo.has_access("u1", "sales") is False
def test_get_accessible_datasets(self, db_conn):
from src.repositories.sync_settings import DatasetPermissionRepository
repo = DatasetPermissionRepository(db_conn)
repo.grant("u1", "sales", "read")
repo.grant("u1", "hr", "read")
repo.grant("u1", "finance", "none")
accessible = repo.get_accessible_datasets("u1")
assert set(accessible) == {"sales", "hr"}
def test_get_user_permissions(self, db_conn):
from src.repositories.sync_settings import DatasetPermissionRepository
repo = DatasetPermissionRepository(db_conn)
repo.grant("u1", "sales", "read")
repo.grant("u1", "hr", "read")
perms = repo.get_user_permissions("u1")
assert len(perms) == 2