agnes-the-ai-analyst/tests/test_permissions.py
ZdenekSrotyr e0ce91ddb9 feat: add dataset permissions, script execution, Kamal config, CI/CD
- SyncSettingsRepository + DatasetPermissionRepository with RBAC
- Script deploy/run/undeploy API with import sandboxing
- User sync settings API with permission checks
- 4 CLI skills (connectors, security, notifications, corporate-memory)
- Kamal production + staging configs
- GitHub Actions CI + deploy workflows
- 91 total tests passing
2026-03-27 15:40:11 +01: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):
os.environ["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