diff --git a/src/govoplan_addresses/backend/capabilities.py b/src/govoplan_addresses/backend/capabilities.py index b61a835..4aa7ba2 100644 --- a/src/govoplan_addresses/backend/capabilities.py +++ b/src/govoplan_addresses/backend/capabilities.py @@ -1232,7 +1232,10 @@ def _address_book_contact_updated_at(session: Any, address_book_ids: list[str]) if updated_at is None: continue key = str(address_book_id) - revisions[key] = max(revisions.get(key, updated_at), updated_at) + revisions[key] = max( + _aware_datetime(revisions.get(key, updated_at)), + _aware_datetime(updated_at), + ) return revisions @@ -1306,7 +1309,10 @@ def _address_list_updated_at(session: Any, address_list_ids: list[str]) -> dict[ if updated_at is None: continue key = str(address_list_id) - revisions[key] = max(revisions.get(key, updated_at), updated_at) + revisions[key] = max( + _aware_datetime(revisions.get(key, updated_at)), + _aware_datetime(updated_at), + ) return revisions @@ -1314,14 +1320,14 @@ def _recipient_source_revision(book: AddressBook, latest_contact_updated_at: dat stamps: list[datetime] = [book.updated_at] if latest_contact_updated_at is not None: stamps.append(latest_contact_updated_at) - return max(stamps).isoformat() + return max(_aware_datetime(item) for item in stamps).isoformat() def _address_list_source_revision(address_list: AddressList, latest_entry_updated_at: datetime | None = None) -> str: stamps: list[datetime] = [address_list.updated_at] if latest_entry_updated_at is not None: stamps.append(latest_entry_updated_at) - return max(stamps).isoformat() + return max(_aware_datetime(item) for item in stamps).isoformat() def _channel_facts_contact_id(source: DistributionSourceReference) -> str: diff --git a/tests/test_addresses_service.py b/tests/test_addresses_service.py index 9d144b2..c6be140 100644 --- a/tests/test_addresses_service.py +++ b/tests/test_addresses_service.py @@ -1208,7 +1208,9 @@ END:VCARD contact_postal_address_id=contact.postal_addresses[0].id, ), ) - self.session.commit() + # Providers must also work before the surrounding transaction commits; + # SQLite aggregate timestamps are naive while new ORM rows are UTC-aware. + self.session.flush() capability = AddressesContactPointResolutionCapability() direct = capability.resolve_contact_points(