|
37 | 37 | _deserialize_from_store, |
38 | 38 | _queue_into_buffer_v1, |
39 | 39 | _queue_into_buffer_v2, |
| 40 | + _update_legacy_self_ref_order, |
40 | 41 | ) |
41 | 42 | from morango.sync.syncsession import TransferClient |
42 | 43 |
|
@@ -654,7 +655,7 @@ def setUp(self): |
654 | 655 | conn.server_info = dict(capabilities=[]) |
655 | 656 | self.data["mc"] = MorangoProfileController("facilitydata") |
656 | 657 | session = SyncSession.objects.create( |
657 | | - id=uuid.uuid4().hex, profile="", last_activity_timestamp=timezone.now() |
| 658 | + id=uuid.uuid4().hex, profile="facilitydata", last_activity_timestamp=timezone.now() |
658 | 659 | ) |
659 | 660 | self.transfer_session = TransferSession.objects.create( |
660 | 661 | id=uuid.uuid4().hex, |
@@ -684,6 +685,21 @@ def assert_store_records_not_tagged_with_last_session(self, store_ids): |
684 | 685 | except Store.DoesNotExist: |
685 | 686 | pass |
686 | 687 |
|
| 688 | + def _make_transferred_store(self, **kwargs): |
| 689 | + defaults = { |
| 690 | + "id": uuid.uuid4().hex, |
| 691 | + "serialized": "{}", |
| 692 | + "last_saved_instance": self.current_id.id, |
| 693 | + "last_saved_counter": 1, |
| 694 | + "model_name": "facility", |
| 695 | + "profile": "facilitydata", |
| 696 | + "partition": uuid.uuid4().hex, |
| 697 | + "source_id": uuid.uuid4().hex, |
| 698 | + "last_transfer_session_id": self.transfer_session.id, |
| 699 | + } |
| 700 | + defaults.update(kwargs) |
| 701 | + return Store.objects.create(**defaults) |
| 702 | + |
687 | 703 | def test_dequeuing_sets_last_session(self): |
688 | 704 | store_ids = [self.data[key] for key in ["model2", "model3", "model4", "model5", "model7"]] |
689 | 705 | self.assert_store_records_not_tagged_with_last_session(store_ids) |
@@ -1009,6 +1025,37 @@ def test_dequeue_into_store__self_ref_order_fallback_for_missing_capability(self |
1009 | 1025 | self.assertEqual(Store.objects.get(id=self.data["model3"])._self_ref_order, 0) |
1010 | 1026 | self.assertEqual(Store.objects.get(id=self.data["model4"])._self_ref_order, 0) |
1011 | 1027 |
|
| 1028 | + def test_update_legacy_self_ref_order_nulls_non_self_ref_models(self): |
| 1029 | + store = self._make_transferred_store( |
| 1030 | + model_name=SummaryLog.morango_model_name, |
| 1031 | + _self_ref_order=3, |
| 1032 | + ) |
| 1033 | + |
| 1034 | + _update_legacy_self_ref_order(self.transfer_session) |
| 1035 | + |
| 1036 | + store.refresh_from_db() |
| 1037 | + self.assertIsNone(store._self_ref_order) |
| 1038 | + |
| 1039 | + def test_update_legacy_self_ref_order_handles_deeper_self_ref_chains(self): |
| 1040 | + root = self._make_transferred_store(_self_ref_fk="", _self_ref_order=None) |
| 1041 | + child = self._make_transferred_store( |
| 1042 | + _self_ref_fk=root.id, |
| 1043 | + _self_ref_order=None, |
| 1044 | + ) |
| 1045 | + grandchild = self._make_transferred_store( |
| 1046 | + _self_ref_fk=child.id, |
| 1047 | + _self_ref_order=None, |
| 1048 | + ) |
| 1049 | + |
| 1050 | + _update_legacy_self_ref_order(self.transfer_session) |
| 1051 | + |
| 1052 | + root.refresh_from_db() |
| 1053 | + child.refresh_from_db() |
| 1054 | + grandchild.refresh_from_db() |
| 1055 | + self.assertEqual(root._self_ref_order, 0) |
| 1056 | + self.assertEqual(child._self_ref_order, 0) |
| 1057 | + self.assertEqual(grandchild._self_ref_order, 0) |
| 1058 | + |
1012 | 1059 | def test_local_dequeue_operation(self): |
1013 | 1060 | self.transfer_session.records_transferred = 1 |
1014 | 1061 | self.context.filter = [self.transfer_session.filter] |
|
0 commit comments