def test_can_undo_review(db, dummy_contribution, dummy_user, is1, fs1, ok1, is2, fs2, ok2): from indico.modules.events.editing.operations import InvalidEditableState, undo_review editable = Editable(contribution=dummy_contribution, type=EditableType.paper) rev1 = EditingRevision(editable=editable, submitter=dummy_user, initial_state=is1, final_state=fs1) if is2 is not None: rev2 = EditingRevision(editable=editable, submitter=dummy_user, initial_state=is2, final_state=fs2) db.session.flush() if ok1: undo_review(rev1) else: pytest.raises(InvalidEditableState, undo_review, rev1) if is2 is not None: if ok2: undo_review(rev2) else: pytest.raises(InvalidEditableState, undo_review, rev2) db.session.expire( editable) # so a deleted revision shows up in the relationship if ok1: assert rev1.final_state == FinalRevisionState.none assert len(editable.revisions) == 1 elif ok2: assert rev2.final_state == FinalRevisionState.none assert len(editable.revisions) == 2
def create_new_editable(contrib, type_, submitter, files): editable = Editable(contribution=contrib, type=type_) revision = EditingRevision(submitter=submitter, initial_state=InitialRevisionState.ready_for_review, files=_make_editable_files(editable, files)) editable.revisions.append(revision) db.session.flush() logger.info('Editable [%s] created by %s for %s', type_.name, submitter, contrib) return editable
def test_cannot_undo_review_old_rev(dummy_contribution, dummy_user): from indico.modules.events.editing.operations import InvalidEditableState, undo_review editable = Editable(contribution=dummy_contribution, type=EditableType.paper) rev1 = EditingRevision(editable=editable, submitter=dummy_user, initial_state=InitialRevisionState.ready_for_review, final_state=FinalRevisionState.needs_submitter_confirmation, reviewed_dt=now_utc()) rev2 = EditingRevision(editable=editable, submitter=dummy_user, initial_state=InitialRevisionState.needs_submitter_confirmation, final_state=FinalRevisionState.needs_submitter_changes, reviewed_dt=now_utc()) rev3 = EditingRevision(editable=editable, submitter=dummy_user, initial_state=InitialRevisionState.ready_for_review) with pytest.raises(InvalidEditableState): undo_review(rev1) with pytest.raises(InvalidEditableState): undo_review(rev2) undo_review(rev3)