def test_childs_added_on_stage(): res_0, res_1 = [create_resource(str(n)) for n in range(2)] ModelMeta.save_all_lazy() for res in (res_0, res_1): change.create_run(res) res_0.connect(res_1, {'a': 'a'}) change.staged_log() ModelMeta.save_all_lazy() change.commit_all() res_0.update({'a': '10'}) ModelMeta.save_all_lazy() staged_log = change.staged_log() assert len(staged_log) == 2 child_log_item = next(li for li in staged_log if li.resource == res_1.name) assert child_log_item.action == 'update'
def test_only_relevant_child_updated(): res1, res2, res3 = ( create_resource( name, inputs={'a': '', 'b': ''}) for name in ('t1', 't2', 't3')) res1.update({'a': '9', 'b': '10'}) res1.connect(res2, {'a': 'a'}) res1.connect(res3, {'b': 'b'}) ModelMeta.save_all_lazy() # currently childs added as a side effect of staged log, thus we need # to run it before commiting changes assert set(s.resource for s in change.staged_log()) == {'t1', 't2', 't3'} change.commit_all() res1.update({'a': '12'}) ModelMeta.save_all_lazy() # t3 not updated because "a" connected only to t2 assert set(s.resource for s in change.staged_log()) == {'t1', 't2'}
def test_discard_removed_with_childs_not_affected(): res1, res2, res3 = ( create_resource( name, inputs={'a': '', 'b': ''}) for name in ('t1', 't2', 't3')) res1.update({'a': '9', 'b': '10'}) res1.connect(res2, {'a': 'a'}) res1.connect(res3, {'b': 'b'}) ModelMeta.save_all_lazy() change.staged_log() change.commit_all() res1.remove() ModelMeta.save_all_lazy() staged_items = change.staged_log() assert len(staged_items) == 1 assert staged_items[0].log_action == 't1.remove' change.discard_all() assert not res1.to_be_removed() assert not res2.to_be_removed() assert not res3.to_be_removed() assert change.staged_log() == []
def commit(): change.commit_all()