コード例 #1
0
 def test_hard_deleted_model_propagates_to_store_record(self):
     """
     It could be the case that we have two store records, one that is hard deleted and the other that has a fk pointing to the hard deleted record.
     When we deserialize, we want to ensure that the record with the fk pointer also gets the hard deleted flag set, while also not
     deserializing the data into a model.
     """
     # user will be deleted
     user = MyUser(username='******')
     user.save(update_dirty_bit_to=False)
     # log may be synced in from other device
     log = SummaryLog(user_id=user.id)
     log.id = log.calculate_uuid()
     StoreModelFacilityFactory(model_name="user",
                               id=user.id,
                               serialized=json.dumps(user.serialize()),
                               deleted=True,
                               hard_deleted=True)
     StoreModelFacilityFactory(model_name="contentsummarylog",
                               id=log.id,
                               serialized=json.dumps(log.serialize()))
     # make sure delete propagates to store due to deleted foreign key
     self.mc.deserialize_from_store()
     # have to serialize to update deleted models
     self.mc.serialize_into_store()
     self.assertFalse(SummaryLog.objects.filter(id=log.id).exists())
     self.assertTrue(Store.objects.get(id=log.id).hard_deleted)
コード例 #2
0
 def test_store_hard_delete_propagates(self):
     user = MyUser(username='******')
     user.save(update_dirty_bit_to=False)
     log = SummaryLog(user=user)
     log.save(update_dirty_bit_to=False)
     StoreModelFacilityFactory(model_name="user",
                               id=user.id,
                               serialized=json.dumps(user.serialize()),
                               hard_deleted=True,
                               deleted=True)
     # make sure hard_deleted propagates to related models even if they are not hard_deleted
     self.mc.deserialize_from_store()
     self.assertTrue(HardDeletedModels.objects.filter(id=log.id).exists())
コード例 #3
0
 def test_in_app_hard_delete_propagates(self):
     user = MyUser.objects.create(username='******')
     log_id = uuid.uuid4().hex
     log = SummaryLog(user=user, id=log_id)
     StoreModelFacilityFactory(model_name="user",
                               id=user.id,
                               serialized=json.dumps(user.serialize()))
     store_log = StoreModelFacilityFactory(model_name="contentsummarylog",
                                           id=log.id,
                                           serialized=json.dumps(
                                               log.serialize()))
     user.delete(hard_delete=True)
     # preps log to be hard_deleted
     self.mc.deserialize_from_store()
     # updates store log to be hard_deleted
     self.mc.serialize_into_store()
     store_log.refresh_from_db()
     self.assertTrue(store_log.hard_deleted)
     self.assertEqual(store_log.serialized, '{}')
コード例 #4
0
    def build_buffer_items(self, transfer_session, **kwargs):

        data = {
            "profile":
            kwargs.get("profile", 'facilitydata'),
            "serialized":
            kwargs.get("serialized", '{"test": 99}'),
            "deleted":
            kwargs.get("deleted", False),
            "last_saved_instance":
            kwargs.get("last_saved_instance",
                       uuid.uuid4().hex),
            "last_saved_counter":
            kwargs.get("last_saved_counter", 179),
            "partition":
            kwargs.get("partition", 'partition'),
            "source_id":
            kwargs.get("source_id",
                       uuid.uuid4().hex),
            "model_name":
            kwargs.get("model_name", "contentsummarylog"),
            "conflicting_serialized_data":
            kwargs.get("conflicting_serialized_data", ""),
            "model_uuid":
            kwargs.get("model_uuid", None),
            "transfer_session":
            transfer_session,
        }

        for i in range(self.chunk_size):
            data['source_id'] = uuid.uuid4().hex
            data["model_uuid"] = SummaryLog.compute_namespaced_id(
                data["partition"], data["source_id"], data["model_name"])
            Buffer.objects.create(**data)

        buffered_items = Buffer.objects.filter(
            transfer_session=self.syncclient.current_transfer_session)
        serialized_records = BufferSerializer(buffered_items, many=True)
        return json.dumps(serialized_records.data)