Skip to content

Commit

Permalink
Cleanup code and add tests
Browse files Browse the repository at this point in the history
SDESK-7459
  • Loading branch information
eos87 committed Jan 10, 2025
1 parent fc92c23 commit 81b94aa
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 5 deletions.
10 changes: 5 additions & 5 deletions superdesk/core/privileges.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from typing import cast
from dataclasses import dataclass
from quart_babel.speaklater import LazyString

Expand All @@ -12,17 +11,18 @@ class Privilege:


class PrivilegesRegistry:
__privileges: set[Privilege] | frozenset[Privilege] = set()
__privileges: set[Privilege] | frozenset[Privilege]

def __init__(self):
self.__privileges = set()

def add(self, privilege: Privilege):
"""Add a privilege if the registry is not locked."""

if self.is_locked:
raise RuntimeError("Cannot add privileges after the app has started.")

# mypy does not pick the `is_locked` condition
self.__privileges = cast(set[Privilege], self.__privileges)
self.__privileges.add(privilege)
self.__privileges.add(privilege) # type: ignore[union-attr]

@property
def is_locked(self):
Expand Down
65 changes: 65 additions & 0 deletions tests/core/privileges_registry_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import pytest
from superdesk.core.privileges import PrivilegesRegistry, Privilege


@pytest.fixture(scope="function")
def registry():
reg = PrivilegesRegistry()
yield reg

print("*" * 100)
reg = None


def test_add_privilege_before_lock(registry):
privilege = Privilege(name="edit_article")

registry.add(privilege)

assert "edit_article" in registry
assert registry.get_all() == [privilege]


def test_add_multiple_privileges(registry):
privilege1 = Privilege(name="edit_article")
privilege2 = Privilege(name="delete_article")

registry.add(privilege1)
registry.add(privilege2)

assert "edit_article" in registry
assert "delete_article" in registry
assert len(registry.get_all()) == 2


def test_lock_registry(registry):
privilege = Privilege(name="edit_article")

registry.add(privilege)
registry.lock()

assert registry.is_locked
assert "edit_article" in registry


def test_cannot_add_after_lock(registry):
privilege = Privilege(name="edit_article")

registry.add(privilege)
registry.lock()

with pytest.raises(RuntimeError):
registry.add(Privilege(name="new_privilege"))


def test_lock_prevents_further_additions(registry):
privilege = Privilege(name="edit_article")

registry.add(privilege)
registry.lock()

with pytest.raises(RuntimeError, match="Cannot add privileges after the app has started."):
registry.add(Privilege(name="new_privilege"))

assert len(registry.get_all()) == 1
assert registry.is_locked

0 comments on commit 81b94aa

Please sign in to comment.