def test_store_diff_update_source_unit(diffable_stores): target_store, source_store = diffable_stores # update a unit in source update_unit = source_store.units.first() update_unit.target_f = "Some other string" update_unit.save() target_unit = target_store.units.get( unitid=update_unit.unitid) # the unit is always marked for update differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision() + 1) result = differ.diff() assert result["update"][0] == set([target_unit.pk]) assert result["update"][1] == {} assert len(result["add"]) == 0 assert len(result["index"]) == 0 differ = StoreDiff( target_store, source_store, 0) result = differ.diff() assert result["update"][0] == set([target_unit.pk]) assert result["update"][1] == {} assert len(result["add"]) == 0 assert len(result["index"]) == 0
def test_store_diff_delete_source_unit(diffable_stores): target_store, source_store = diffable_stores # delete a unit in the source store remove_unit = source_store.units.first() remove_unit.delete() # set the source_revision to max and the unit will be obsoleted differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision()) result = differ.diff() to_remove = target_store.units.get(unitid=remove_unit.unitid) assert result["obsolete"] == [to_remove.pk] assert len(result["obsolete"]) == 1 assert len(result["add"]) == 0 assert len(result["index"]) == 0 # set the source_revision to less that than the target_stores' max_revision # and the unit will be ignored, as its assumed to have been previously # deleted differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision() - 1) assert not differ.diff()
def test_store_diff_delete_target_unit(diffable_stores): target_store, source_store = diffable_stores # delete a unit in the target store remove_unit = target_store.units.first() remove_unit.delete() # the unit will always be re-added (as its not obsolete) # with source_revision to the max differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision()) result = differ.diff() assert result["add"][0][0].source_f == remove_unit.source_f assert len(result["add"]) == 1 assert len(result["index"]) == 0 assert len(result["obsolete"]) == 0 assert result['update'] == (set(), {}) # and source_revision to 0 differ = StoreDiff( target_store, source_store, 0) result = differ.diff() assert result["add"][0][0].source_f == remove_unit.source_f assert len(result["add"]) == 1 assert len(result["index"]) == 0 assert len(result["obsolete"]) == 0 assert result['update'] == (set(), {})
def test_store_diff(diffable_stores): target_store, source_store = diffable_stores differ = StoreDiff(target_store, source_store, target_store.get_max_unit_revision() + 1) # no changes assert not differ.diff() assert differ.target_store == target_store assert differ.source_store == source_store
def test_store_diff_obsoleted_target_unit(diffable_stores): target_store, source_store = diffable_stores # obsolete a unit in target obsolete_unit = target_store.units.first() obsolete_unit.makeobsolete() obsolete_unit.save() # as the revision is higher it gets unobsoleted differ = StoreDiff(target_store, source_store, target_store.get_max_unit_revision() + 1) result = differ.diff() assert result["update"][0] == set([obsolete_unit.pk]) assert len(result["update"][1]) == 1 assert result["update"][1][ obsolete_unit.unitid]["dbid"] == obsolete_unit.pk # if the revision is less - no change differ = StoreDiff(target_store, source_store, target_store.get_max_unit_revision() - 1) assert not differ.diff()
def test_store_diff(diffable_stores): target_store, source_store = diffable_stores differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision() + 1) # no changes assert not differ.diff() assert differ.target_store == target_store assert differ.source_store == source_store
def test_store_diff_delete_obsoleted_target_unit(diffable_stores): target_store, source_store = diffable_stores # delete a unit in the source store remove_unit = source_store.units.first() remove_unit.delete() # and obsolete the same unit in the target obsolete_unit = target_store.units.get(unitid=remove_unit.unitid) obsolete_unit.makeobsolete() obsolete_unit.save() # as the unit is already obsolete - nothing differ = StoreDiff(target_store, source_store, target_store.get_max_unit_revision() + 1) assert not differ.diff()
def update_store(self, source, target): """Update a target Store from a given source Store""" source_revision = target.data.max_unit_revision + 1 differ = StoreDiff(target, source, source_revision) diff = differ.diff() if diff is None: return system = User.objects.get_system_user() update_revision = Revision.incr() return target.updater.update_from_diff(source, source_revision, diff, update_revision, system, SubmissionTypes.SYSTEM, SOURCE_WINS, True)
def test_store_diff_obsoleted_target_unit(diffable_stores): target_store, source_store = diffable_stores # obsolete a unit in target obsolete_unit = target_store.units.first() obsolete_unit.makeobsolete() obsolete_unit.save() # as the revision is higher it gets unobsoleted differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision() + 1) result = differ.diff() assert result["update"][0] == set([obsolete_unit.pk]) assert len(result["update"][1]) == 1 assert result["update"][1][obsolete_unit.unitid]["dbid"] == obsolete_unit.pk # if the revision is less - no change differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision() - 1) assert not differ.diff()
def test_store_diff_delete_obsoleted_source_unit(diffable_stores): target_store, source_store = diffable_stores # delete a unit in the target store remove_unit = target_store.units.first() remove_unit.delete() # and obsolete the same unit in the target obsolete_unit = source_store.units.get(unitid=remove_unit.unitid) obsolete_unit.makeobsolete() obsolete_unit.save() # as the unit is already obsolete - nothing differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision() + 1) assert not differ.diff()
def test_store_diff_obsoleted_target_unit(diffable_stores): target_store, source_store = diffable_stores # obsolete a unit in target obsolete_unit = target_store.units.first() obsolete_unit.makeobsolete() obsolete_unit.save() # no matter the revision, the unit will be resurrected differ = StoreDiff( target_store, source_store, target_store.get_max_unit_revision(), ) result = differ.diff() assert result["update"][0] == set([obsolete_unit.pk]) assert len(result["update"][1]) == 1 assert result["update"][1][obsolete_unit.unitid]["dbid"] == obsolete_unit.pk
def update_store(self, source, target): source_revision = target.get_max_unit_revision() + 1 differ = StoreDiff(target, source, source_revision) diff = differ.diff() if diff is None: return system = User.objects.get_system_user() update_revision = Revision.incr() return target.update_from_diff( source, source_revision, diff, update_revision, system, SubmissionTypes.SYSTEM, SOURCE_WINS, True)
def update_store(self, source, target): """Update a target Store from a given source Store""" source_revision = target.data.max_unit_revision + 1 differ = StoreDiff(target, source, source_revision) diff = differ.diff() if diff is None: return system = User.objects.get_system_user() update_revision = Revision.incr() with update_data_after(target): return target.updater.update_from_diff( source, source_revision, diff, update_revision, system, SubmissionTypes.SYSTEM, SOURCE_WINS, True)