|
| 1 | +"""Tests for async entity update functionality in AsyncArkivModule.""" |
| 2 | + |
| 3 | +import logging |
| 4 | + |
| 5 | +import pytest |
| 6 | + |
| 7 | +from arkiv import AsyncArkiv |
| 8 | +from arkiv.types import Annotations |
| 9 | +from arkiv.utils import check_entity_key |
| 10 | + |
| 11 | +from .utils import check_tx_hash |
| 12 | + |
| 13 | +logger = logging.getLogger(__name__) |
| 14 | + |
| 15 | + |
| 16 | +class TestAsyncEntityUpdate: |
| 17 | + """Test cases for async update_entity function.""" |
| 18 | + |
| 19 | + @pytest.mark.asyncio |
| 20 | + async def test_async_update_entity_basic( |
| 21 | + self, async_arkiv_client_http: AsyncArkiv |
| 22 | + ) -> None: |
| 23 | + """Test updating an entity with async client.""" |
| 24 | + # Create entity |
| 25 | + original_payload = b"Original payload" |
| 26 | + original_annotations = Annotations({"status": "initial", "version": 1}) |
| 27 | + entity_key, _tx_hash = await async_arkiv_client_http.arkiv.create_entity( |
| 28 | + payload=original_payload, annotations=original_annotations, btl=100 |
| 29 | + ) |
| 30 | + |
| 31 | + # Update entity |
| 32 | + new_payload = b"Updated payload" |
| 33 | + new_annotations = Annotations({"status": "updated", "version": 2}) |
| 34 | + update_tx_hash = await async_arkiv_client_http.arkiv.update_entity( |
| 35 | + entity_key=entity_key, |
| 36 | + payload=new_payload, |
| 37 | + annotations=new_annotations, |
| 38 | + btl=150, |
| 39 | + ) |
| 40 | + |
| 41 | + # Verify update transaction hash |
| 42 | + check_tx_hash("test_async_update_entity_basic", update_tx_hash) |
| 43 | + |
| 44 | + # Verify entity was updated |
| 45 | + entity = await async_arkiv_client_http.arkiv.get_entity(entity_key) |
| 46 | + assert entity.payload == new_payload, "Payload should be updated" |
| 47 | + assert entity.annotations == new_annotations, "Annotations should be updated" |
| 48 | + |
| 49 | + logger.info(f"Updated async entity: {entity_key} (tx: {update_tx_hash})") |
| 50 | + |
| 51 | + @pytest.mark.asyncio |
| 52 | + async def test_async_update_entities_sequentially( |
| 53 | + self, async_arkiv_client_http: AsyncArkiv |
| 54 | + ) -> None: |
| 55 | + """Test updating multiple entities sequentially.""" |
| 56 | + # Create multiple entities |
| 57 | + entity_keys = [] |
| 58 | + for i in range(3): |
| 59 | + entity_key, _tx_hash = await async_arkiv_client_http.arkiv.create_entity( |
| 60 | + payload=f"Entity {i}".encode(), |
| 61 | + annotations=Annotations({"index": i, "version": 1}), |
| 62 | + ) |
| 63 | + entity_keys.append(entity_key) |
| 64 | + |
| 65 | + # Update all entities sequentially |
| 66 | + for i, entity_key in enumerate(entity_keys): |
| 67 | + update_tx_hash = await async_arkiv_client_http.arkiv.update_entity( |
| 68 | + entity_key=entity_key, |
| 69 | + payload=f"Updated entity {i}".encode(), |
| 70 | + annotations=Annotations({"index": i, "version": 2}), |
| 71 | + ) |
| 72 | + # Verify individual entity_key and tx_hash formats |
| 73 | + check_entity_key(entity_key, f"test_async_update_entities_sequentially_{i}") |
| 74 | + check_tx_hash(f"test_async_update_entities_sequentially_{i}", update_tx_hash) |
| 75 | + logger.info(f"Updated entity {i + 1}/3: {entity_key}") |
| 76 | + |
| 77 | + # Verify all updates |
| 78 | + for i, entity_key in enumerate(entity_keys): |
| 79 | + entity = await async_arkiv_client_http.arkiv.get_entity(entity_key) |
| 80 | + assert entity.payload == f"Updated entity {i}".encode() |
| 81 | + assert entity.annotations == Annotations({"index": i, "version": 2}) |
| 82 | + |
| 83 | + logger.info("Successfully updated 3 entities sequentially") |
0 commit comments