def test_successful_idempotent_migration(self): pipeline = Pipeline("demo") pipeline.add_state(PipelineState("state1", {"attr1": True}), is_starting=True) pipeline.add_state(PipelineState("state2", {"attr2": True})) pipeline.add_state(PipelineState("state3", {"attr3": True})) self.content_store.append_multiple( [ # belongs to state1 {"attr1": True, "idem": 1}, {"attr1": True, "idem": 2}, {"attr1": True, "idem": 3}, # belongs to state2 {"attr2": True, "idem": 4}, # belongs to state3 {"attr3": True, "idem": 5}, ], "idem", ) pipeline.perform_state_migrations(self.content_store) # simulate a failed migration here self.content_store.update_many( filter_q={"attr1": True}, update_doc={"$unset": {"_state": ""}} ) pipeline.perform_state_migrations(self.content_store) assert self.actual_documents_without_id() == [ {"attr1": True, "idem": 1, "_state": "state1"}, {"attr1": True, "idem": 2, "_state": "state1"}, {"attr1": True, "idem": 3, "_state": "state1"}, {"attr2": True, "idem": 4, "_state": "state2"}, {"attr3": True, "idem": 5, "_state": "state3"}, ]
def test_successful_migration(self): pipeline = Pipeline("demo") pipeline.add_state(PipelineState("state1", {"attr1": True}), is_starting=True) pipeline.add_state(PipelineState("state2", {"attr2": True})) pipeline.add_state(PipelineState("state3", {"attr3": True})) self.content_store.append_multiple( [ # belongs to state1 {"attr1": True, "idem": 1}, {"attr1": True, "idem": 2}, {"attr1": True, "idem": 3}, # belongs to state2 {"attr2": True, "idem": 4}, # belongs to state3 {"attr3": True, "idem": 5}, ], "idem", ) pipeline.perform_state_migrations(self.content_store) assert self.actual_documents_without_id() == [ {"attr1": True, "idem": 1, "_state": "state1"}, {"attr1": True, "idem": 2, "_state": "state1"}, {"attr1": True, "idem": 3, "_state": "state1"}, {"attr2": True, "idem": 4, "_state": "state2"}, {"attr3": True, "idem": 5, "_state": "state3"}, ]