- 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
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):
|
|
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
|