diff --git a/tests/test_store.py b/tests/test_store.py index 75985d1..a909f8d 100644 --- a/tests/test_store.py +++ b/tests/test_store.py @@ -2,17 +2,20 @@ import asyncio import pytest -from app.models import MonitorCreate -from app.store import MonitorStore +from endpoint_monitor.models import MonitorCreate +from endpoint_monitor.store import Conflict, MonitorStore -@pytest.mark.asyncio -async def test_concurrent_creates_are_retained_and_results_are_copies() -> None: - state = MonitorStore() - payload = MonitorCreate(name="same", url="https://example.com") - created = await asyncio.gather(*(state.create(payload) for _ in range(25))) - assert len(await state.list()) == 25 - created[0].name = "mutated" - persisted = await state.get(created[0].id) - assert persisted is not None - assert persisted.name == "same" +async def test_concurrent_unique_name_is_atomic(): + store = MonitorStore(10) + data = MonitorCreate(name="same", url="https://example.com") + results = await asyncio.gather(store.create(data), store.create(data), return_exceptions=True) + assert sum(not isinstance(item, Exception) for item in results) == 1 + assert sum(isinstance(item, Conflict) for item in results) == 1 + + +async def test_capacity(): + store = MonitorStore(1) + await store.create(MonitorCreate(name="one", url="https://example.com")) + with pytest.raises(Conflict, match="capacity"): + await store.create(MonitorCreate(name="two", url="https://example.org"))