import pytest
from atst.domain.permission_sets import PermissionSets
from atst.domain.exceptions import NotFoundError
from atst.utils import first_or_none


def test_get_all():
    roles = PermissionSets.get_all()
    assert roles


def test_get_existing_permission_set():
    role = PermissionSets.get("portfolio_poc")
    assert role.name == "portfolio_poc"


def test_get_nonexistent_permission_set():
    with pytest.raises(NotFoundError):
        PermissionSets.get("nonexistent")


def test_get_many():
    perms_sets = PermissionSets.get_many(
        [PermissionSets.VIEW_PORTFOLIO_FUNDING, PermissionSets.EDIT_PORTFOLIO_FUNDING]
    )
    assert len(perms_sets) == 2
    assert first_or_none(
        lambda p: p.name == PermissionSets.VIEW_PORTFOLIO_FUNDING, perms_sets
    )
    assert first_or_none(
        lambda p: p.name == PermissionSets.EDIT_PORTFOLIO_FUNDING, perms_sets
    )


def test_get_many_nonexistent():
    with pytest.raises(NotFoundError):
        PermissionSets.get_many(["nonexistent", "not real"])
