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.
80 lines
3.2 KiB
Python
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
|