def test_28_make_provenance(self): acc = models.Account() acc.set_id("test") acc.add_role("associate_editor") acc.add_role("editor") obj1 = models.Suggestion() obj1.set_id("obj1") models.Provenance.make(acc, "act1", obj1) time.sleep(2) prov = models.Provenance.get_latest_by_resource_id("obj1") assert prov.type == "suggestion" assert prov.user == "test" assert prov.roles == ["associate_editor", "editor"] assert len(prov.editor_group) == 0 assert prov.subtype is None assert prov.action == "act1" assert prov.resource_id == "obj1" eg1 = models.EditorGroup() eg1.set_id("associate") eg1.add_associate(acc.id) eg1.save() eg2 = models.EditorGroup() eg2.set_id("editor") eg2.set_editor(acc.id) eg2.save() time.sleep(2) obj2 = models.Suggestion() obj2.set_id("obj2") models.Provenance.make(acc, "act2", obj2, "sub") time.sleep(2) prov = models.Provenance.get_latest_by_resource_id("obj2") assert prov.type == "suggestion" assert prov.user == "test" assert prov.roles == ["associate_editor", "editor"] assert prov.editor_group == ["editor", "associate"] assert prov.subtype == "sub" assert prov.action == "act2" assert prov.resource_id == "obj2"
def setUp(self): super(TestTaskJournalBulkEdit, self).setUp() self.default_eg = EditorGroupFixtureFactory.setup_editor_group_with_editors( ) acc = models.Account() acc.set_id("0987654321") acc.set_email("*****@*****.**") acc.save() egs = EditorGroupFixtureFactory.make_editor_group_source( "1234567890", "0987654321") egm = models.EditorGroup(**egs) egm.save(blocking=True) self.journals = [] for j_src in JournalFixtureFactory.make_many_journal_sources( count=TEST_JOURNAL_COUNT): self.journals.append(models.Journal(**j_src)) self.journals[-1].set_editor_group("1234567890") self.journals[-1].set_editor("0987654321") self.journals[-1].save(blocking=True) self.forbidden_accounts = [ AccountFixtureFactory.make_editor_source()['id'], AccountFixtureFactory.make_assed1_source()['id'], AccountFixtureFactory.make_assed2_source()['id'], AccountFixtureFactory.make_assed3_source()['id'] ] self._make_and_push_test_context(acc=models.Account( **AccountFixtureFactory.make_managing_editor_source()))
def setUp(self): super(TestTaskSuggestionBulkEdit, self).setUp() acc = models.Account() acc.set_id("0987654321") acc.set_email("*****@*****.**") acc.save() egs = EditorGroupFixtureFactory.make_editor_group_source( "1234567890", "0987654321") egm = models.EditorGroup(**egs) egm.save(blocking=True) self.suggestions = [] for app_src in ApplicationFixtureFactory.make_many_application_sources( count=TEST_SUGGESTION_COUNT): self.suggestions.append(models.Suggestion(**app_src)) self.suggestions[-1].set_editor_group("1234567890") self.suggestions[-1].set_editor("0987654321") self.suggestions[-1].save() self.default_eg = EditorGroupFixtureFactory.setup_editor_group_with_editors( ) self.forbidden_accounts = [ AccountFixtureFactory.make_editor_source()['id'], AccountFixtureFactory.make_assed1_source()['id'], AccountFixtureFactory.make_assed2_source()['id'], AccountFixtureFactory.make_assed3_source()['id'] ] self._make_and_push_test_context(acc=models.Account( **AccountFixtureFactory.make_managing_editor_source()))
def setup_editor_group_with_editors(cls, group_name=DEFAULT_EDITOR_GROUP_NAME): from portality import models from doajtest.fixtures import AccountFixtureFactory models.Account(**AccountFixtureFactory.make_editor_source()).save() models.Account(**AccountFixtureFactory.make_assed1_source()).save() models.Account(**AccountFixtureFactory.make_assed2_source()).save() models.Account(**AccountFixtureFactory.make_assed3_source()).save() eg = models.EditorGroup(**cls.make_editor_group_source(group_name=group_name, editor="eddie")) eg.save(blocking=True) return eg
def test_03_associate_review_complete(self): """Give the editor's application form a full workout""" acc = models.Account() acc.set_id("contextuser") acc.add_role("associate_editor") ctx = self._make_and_push_test_context(acc=acc) editor = models.Account() editor.set_id("editor") editor.set_email("*****@*****.**") editor.save() eg = models.EditorGroup() eg.set_name(APPLICATION_SOURCE["admin"]["editor_group"]) eg.set_editor("editor") eg.add_associate("contextuser") eg.save() time.sleep(2) # construct a context from a form submission source = deepcopy(APPLICATION_FORM) source["application_status"] = constants.APPLICATION_STATUS_COMPLETED fd = MultiDict(source) fc = formcontext.ApplicationFormFactory.get_form_context( role="associate_editor", form_data=fd, source=models.Suggestion(**APPLICATION_SOURCE)) fc.finalise() time.sleep(2) # now check that a provenance record was recorded count = 0 for prov in models.Provenance.iterall(): if prov.action == "edit": count += 1 if prov.action == "status:completed": count += 10 assert count == 11 ctx.pop()
def editor_group_pull(cls, field, value): eg = models.EditorGroup() eg.set_editor("eddie") eg.set_associates(["associate", "assan"]) eg.set_name("Test Editor Group") return eg
def editor_group_pull(self, _id): return models.EditorGroup(**EDITOR_GROUP_SOURCE)
def editor_group_pull_by_key(cls, field, value): eg = models.EditorGroup(**EDITOR_GROUP_SOURCE) return eg
def editor_group(group_id=None): if not current_user.has_role("modify_editor_groups"): abort(401) if request.method == "GET": form = EditorGroupForm() if group_id is not None: eg = models.EditorGroup.pull(group_id) form.group_id.data = eg.id form.name.data = eg.name form.editor.data = eg.editor form.associates.data = ",".join(eg.associates) return render_template("admin/editor_group.html", admin_page=True, form=form) elif request.method == "POST": if request.values.get("delete", "false") == "true": # we have been asked to delete the id if group_id is None: # we can only delete things that exist abort(400) eg = models.EditorGroup.pull(group_id) if eg is None: abort(404) eg.delete() # return a json response resp = make_response(json.dumps({"success": True})) resp.mimetype = "application/json" return resp # otherwise, we want to edit the content of the form or the object form = EditorGroupForm(request.form) if form.validate(): # get the group id from the url or from the request parameters if group_id is None: group_id = request.values.get("group_id") group_id = group_id if group_id != "" else None # if we have a group id, this is an edit, so get the existing group if group_id is not None: eg = models.EditorGroup.pull(group_id) if eg is None: abort(404) else: eg = models.EditorGroup() associates = form.associates.data if associates is not None: associates = [ a.strip() for a in associates.split(",") if a.strip() != "" ] # prep the user accounts with the correct role(s) ed = models.Account.pull(form.editor.data) ed.add_role("editor") ed.save() if associates is not None: for a in associates: ae = models.Account.pull(a) if ae is not None: # If the account has been deleted, pull fails ae.add_role("associate_editor") ae.save() eg.set_name(form.name.data) eg.set_editor(form.editor.data) if associates is not None: eg.set_associates(associates) eg.save() flash( "Group was updated - changes may not be reflected below immediately. Reload the page to see the update.", "success") return redirect(url_for('admin.editor_group_search')) else: return render_template("admin/editor_group.html", admin_page=True, form=form)