From 5e5143caf69c099b0c879ef8546c877280f0e8ee Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Fri, 21 Dec 2018 00:15:31 -0800 Subject: better name for api_entity_state py tests --- python/tests/api_entity_redirects.py | 417 ----------------------------------- python/tests/api_entity_state.py | 417 +++++++++++++++++++++++++++++++++++ 2 files changed, 417 insertions(+), 417 deletions(-) delete mode 100644 python/tests/api_entity_redirects.py create mode 100644 python/tests/api_entity_state.py (limited to 'python') diff --git a/python/tests/api_entity_redirects.py b/python/tests/api_entity_redirects.py deleted file mode 100644 index 208688e9..00000000 --- a/python/tests/api_entity_redirects.py +++ /dev/null @@ -1,417 +0,0 @@ - -import json -import pytest -from copy import copy - -from fatcat_client import * -from fatcat_client.rest import ApiException -from fixtures import * - -def test_get_changelog_entry(api): - """ - Basically just to check that fixture is working - """ - cl = api.get_changelog_entry(1) - assert cl - -def quick_eg(api_inst): - eg = api_inst.create_editgroup( - fatcat_client.Editgroup(editor_id='aaaaaaaaaaaabkvkaaaaaaaaae')) - return eg - -def test_redirect_entity(api): - """ - Create two creators; merge - => get both by ident - => lookup by orcid; should not get old/merged one - => update first; check that get on second by ident returns updated record - => split second back out and re-get by ident/orcid - """ - - offset = 0 - while True: - offset += 1 - o1 = '0000-0000-1111-%04d' % offset - o2 = '0000-0000-2222-%04d' % offset - try: - api.lookup_creator(orcid=o1) - continue - except ApiException: - pass - try: - api.lookup_creator(orcid=o2) - continue - except ApiException: - pass - break - - c1 = CreatorEntity(display_name="test one", orcid=o1) - c2 = CreatorEntity(display_name="test two", orcid=o2) - - # create two creators - eg = quick_eg(api) - c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) - c2 = api.get_creator(api.create_creator(c2, editgroup=eg.id).ident) - api.accept_editgroup(eg.id) - - # merge second into first - c2_redirect = CreatorEntity(redirect=c1.ident) - eg = quick_eg(api) - merge_edit = api.update_creator(c2.ident, c2_redirect, editgroup=eg.id) - api.accept_editgroup(eg.id) - - # get both by ident - res = api.get_creator(c1.ident) - assert res.state == "active" - res = api.get_creator(c2.ident) - assert res.state == "redirect" - assert res.revision == c1.revision - assert res.redirect == c1.ident - assert res.display_name == "test one" - - # get by orcid - res = api.lookup_creator(orcid=o1) - assert res.ident == c1.ident - with pytest.raises(fatcat_client.rest.ApiException): - res = api.lookup_creator(orcid=o2) - - # update first; check that get on second updates - c1.display_name = "test one one" - eg = quick_eg(api) - api.update_creator(c1.ident, c1, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c2.ident) - assert res.state == "redirect" - assert res.display_name == "test one one" - - # delete first; check that second is deleted (but state is redirect) - eg = quick_eg(api) - api.delete_creator(c1.ident, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c1.ident) - assert res.state == "deleted" - assert res.display_name is None - res = api.get_creator(c2.ident) - assert res.state == "redirect" - assert res.display_name is None - assert res.revision is None - - # undelete first; check that second is a redirect - eg = quick_eg(api) - api.update_creator(c1.ident, c1, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c2.ident) - assert res.state == "redirect" - assert res.display_name == "test one one" - - # split second entity back out - assert c2.revision - assert c2.redirect is None - eg = quick_eg(api) - api.update_creator(c2.ident, c2, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c2.ident) - assert res.state == "active" - assert res.display_name == "test two" - res = api.lookup_creator(orcid=o2) - assert res.display_name == "test two" - - # cleanup - eg = quick_eg(api) - api.delete_creator(c1.ident) - api.delete_creator(c2.ident) - api.accept_editgroup(eg.id) - -def test_delete_entity(api): - - offset = 0 - while True: - offset += 1 - o1 = '0000-0000-1111-%04d' % offset - try: - api.lookup_creator(orcid=o1) - continue - except ApiException: - pass - break - - c1 = CreatorEntity(display_name="test deletable", orcid=o1) - - # create - eg = quick_eg(api) - c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) - api.accept_editgroup(eg.id) - res = api.get_creator(c1.ident) - assert res.state == "active" - assert res.display_name == "test deletable" - res = api.lookup_creator(orcid=c1.orcid) - assert res.state == "active" - assert res.display_name == "test deletable" - - # delete - eg = quick_eg(api) - api.delete_creator(c1.ident, editgroup=eg.id) - with pytest.raises(fatcat_client.rest.ApiException): - # can't re-delete in same editgroup - api.delete_creator(c1.ident, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c1.ident) - assert res.state == "deleted" - assert res.display_name is None - with pytest.raises(fatcat_client.rest.ApiException): - res = api.lookup_creator(orcid=c1.orcid) - - # re-delete - eg = quick_eg(api) - try: - # can't re-delete an entity - api.delete_creator(c1.ident, editgroup=eg.id) - #api.accept_editgroup(eg.id) - assert False - except fatcat_client.rest.ApiException as e: - # error is 4xx - print(e) - assert 400 <= e.status < 500 - - # undelete - eg = quick_eg(api) - api.update_creator(c1.ident, c1, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c1.ident) - assert res.state == "active" - assert res.display_name == "test deletable" - res = api.lookup_creator(orcid=c1.orcid) - assert res.state == "active" - assert res.display_name == "test deletable" - - # cleanup - eg = quick_eg(api) - api.delete_creator(c1.ident) - api.accept_editgroup(eg.id) - -def test_multiple_edits_same_group(api): - - c1 = CreatorEntity(display_name="test updates") - - # create - eg = quick_eg(api) - c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) - api.accept_editgroup(eg.id) - - # try multiple edits in the same group - eg = quick_eg(api) - c2 = CreatorEntity(display_name="left") - c3 = CreatorEntity(display_name="right") - edit = api.update_creator(c1.ident, c2, editgroup=eg.id) - # should fail with existing - with pytest.raises(fatcat_client.rest.ApiException): - api.update_creator(c1.ident, c3, editgroup=eg.id) - # ... but succeed after deleting - api.delete_creator_edit(edit.edit_id) - api.update_creator(c1.ident, c3, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c1.ident) - assert res.display_name == "right" - eg = api.get_editgroup(eg.id) - assert len(eg.edits.creators) == 1 - - # cleanup - eg = quick_eg(api) - api.delete_creator(c1.ident) - api.accept_editgroup(eg.id) - -def test_edit_deletion(api): - - c1 = CreatorEntity(display_name="test edit updates") - - # create - eg = quick_eg(api) - c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) - api.accept_editgroup(eg.id) - - # try multiple edits in the same group - c2 = CreatorEntity(display_name="update one") - eg = quick_eg(api) - eg = api.get_editgroup(eg.id) - assert len(eg.edits.creators) == 0 - edit = api.update_creator(c1.ident, c2, editgroup=eg.id) - eg = api.get_editgroup(eg.id) - assert len(eg.edits.creators) == 1 - api.delete_creator_edit(edit.edit_id) - eg = api.get_editgroup(eg.id) - assert len(eg.edits.creators) == 0 - - api.accept_editgroup(eg.id) - res = api.get_creator(c1.ident) - assert res.display_name == "test edit updates" - eg = api.get_editgroup(eg.id) - assert len(eg.edits.creators) == 0 - - # cleanup - eg = quick_eg(api) - api.delete_creator(c1.ident) - api.accept_editgroup(eg.id) - -def test_empty_editgroup(api): - eg = quick_eg(api) - api.accept_editgroup(eg.id) - -def test_recursive_redirects_entity(api): - - offset = 0 - while True: - offset += 1 - o1 = '0000-0000-1111-%04d' % offset - o2 = '0000-0000-2222-%04d' % offset - o3 = '0000-0000-3333-%04d' % offset - try: - api.lookup_creator(orcid=o1) - continue - except ApiException: - pass - try: - api.lookup_creator(orcid=o2) - continue - except ApiException: - pass - try: - api.lookup_creator(orcid=o3) - continue - except ApiException: - pass - break - - c1 = CreatorEntity(display_name="test one", orcid=o1) - c2 = CreatorEntity(display_name="test two", orcid=o2) - c3 = CreatorEntity(display_name="test three", orcid=o3) - - # create three creators - eg = quick_eg(api) - c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) - c2 = api.get_creator(api.create_creator(c2, editgroup=eg.id).ident) - c3 = api.get_creator(api.create_creator(c3, editgroup=eg.id).ident) - api.accept_editgroup(eg.id) - res = api.get_creator(c3.ident) - assert res.display_name == "test three" - - # redirect third to second - c3_redirect = CreatorEntity(redirect=c2.ident) - eg = quick_eg(api) - api.update_creator(c3.ident, c3_redirect, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c3.ident) - assert res.display_name == "test two" - - # redirect second to first: should be an error at merge time - c2_redirect = CreatorEntity(redirect=c1.ident) - eg = quick_eg(api) - api.update_creator(c2.ident, c2_redirect, editgroup=eg.id) - with pytest.raises(fatcat_client.rest.ApiException): - api.accept_editgroup(eg.id) - res = api.get_creator(c2.ident) - assert res.display_name == "test two" - with pytest.raises(fatcat_client.rest.ApiException): - res = api.lookup_creator(orcid=o3) - res = api.lookup_creator(orcid=o2) - assert res.ident == c2.ident - - # redirect first to third: should be an error at merge time - c1_redirect = CreatorEntity(redirect=c3.ident) - eg = quick_eg(api) - api.update_creator(c1.ident, c1_redirect, editgroup=eg.id) - with pytest.raises(fatcat_client.rest.ApiException): - api.accept_editgroup(eg.id) - res = api.get_creator(c1.ident) - assert res.display_name == "test one" - - # update second; check that third updated - c2.display_name = "test two updated" - eg = quick_eg(api) - api.update_creator(c2.ident, c2, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c2.ident) - c2 = res - assert res.display_name == "test two updated" - res = api.get_creator(c3.ident) - assert res.display_name == "test two updated" - assert res.state == "redirect" - res = api.lookup_creator(orcid=o2) - assert res.ident == c2.ident - - # delete second; check that third updated - eg = quick_eg(api) - api.delete_creator(c2.ident, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c2.ident) - assert res.state == "deleted" - res = api.get_creator(c3.ident) - assert res.state == "redirect" - assert res.display_name is None - with pytest.raises(fatcat_client.rest.ApiException): - res = api.lookup_creator(orcid=o2) - - # undelete second; check that third updated - eg = quick_eg(api) - c2_undelete = CreatorEntity(revision=c2.revision) - api.update_creator(c2.ident, c2_undelete, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c2.ident) - assert res.state == "active" - assert res.display_name == "test two updated" - res = api.get_creator(c3.ident) - assert res.state == "redirect" - assert res.display_name == "test two updated" - - # delete third (a redirect) - eg = quick_eg(api) - api.delete_creator(c3.ident, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c3.ident) - assert res.state == "deleted" - assert res.display_name is None - - # re-redirect third - eg = quick_eg(api) - api.update_creator(c3.ident, c3_redirect, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c3.ident) - assert res.state == "redirect" - assert res.display_name == "test two updated" - - # delete second, then delete third - eg = quick_eg(api) - api.delete_creator(c2.ident, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c3.ident) - assert res.state == "redirect" - assert res.display_name is None - with pytest.raises(fatcat_client.rest.ApiException): - res = api.lookup_creator(orcid=o2) - eg = quick_eg(api) - api.delete_creator(c3.ident, editgroup=eg.id) - api.accept_editgroup(eg.id) - res = api.get_creator(c3.ident) - assert res.state == "deleted" - assert res.display_name is None - - # cleanup - eg = quick_eg(api) - api.delete_creator(c1.ident) - # c2 already deleted - # c3 already deleted - api.accept_editgroup(eg.id) - -def test_self_redirect(api): - - c1 = CreatorEntity(display_name="test self-redirect") - - # create creator - eg = quick_eg(api) - c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) - api.accept_editgroup(eg.id) - - # redirect first to itself; should error on PUT - c1_redirect = CreatorEntity(redirect=c1.ident) - eg = quick_eg(api) - with pytest.raises(fatcat_client.rest.ApiException): - merge_edit = api.update_creator(c1.ident, c1_redirect, editgroup=eg.id) diff --git a/python/tests/api_entity_state.py b/python/tests/api_entity_state.py new file mode 100644 index 00000000..208688e9 --- /dev/null +++ b/python/tests/api_entity_state.py @@ -0,0 +1,417 @@ + +import json +import pytest +from copy import copy + +from fatcat_client import * +from fatcat_client.rest import ApiException +from fixtures import * + +def test_get_changelog_entry(api): + """ + Basically just to check that fixture is working + """ + cl = api.get_changelog_entry(1) + assert cl + +def quick_eg(api_inst): + eg = api_inst.create_editgroup( + fatcat_client.Editgroup(editor_id='aaaaaaaaaaaabkvkaaaaaaaaae')) + return eg + +def test_redirect_entity(api): + """ + Create two creators; merge + => get both by ident + => lookup by orcid; should not get old/merged one + => update first; check that get on second by ident returns updated record + => split second back out and re-get by ident/orcid + """ + + offset = 0 + while True: + offset += 1 + o1 = '0000-0000-1111-%04d' % offset + o2 = '0000-0000-2222-%04d' % offset + try: + api.lookup_creator(orcid=o1) + continue + except ApiException: + pass + try: + api.lookup_creator(orcid=o2) + continue + except ApiException: + pass + break + + c1 = CreatorEntity(display_name="test one", orcid=o1) + c2 = CreatorEntity(display_name="test two", orcid=o2) + + # create two creators + eg = quick_eg(api) + c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) + c2 = api.get_creator(api.create_creator(c2, editgroup=eg.id).ident) + api.accept_editgroup(eg.id) + + # merge second into first + c2_redirect = CreatorEntity(redirect=c1.ident) + eg = quick_eg(api) + merge_edit = api.update_creator(c2.ident, c2_redirect, editgroup=eg.id) + api.accept_editgroup(eg.id) + + # get both by ident + res = api.get_creator(c1.ident) + assert res.state == "active" + res = api.get_creator(c2.ident) + assert res.state == "redirect" + assert res.revision == c1.revision + assert res.redirect == c1.ident + assert res.display_name == "test one" + + # get by orcid + res = api.lookup_creator(orcid=o1) + assert res.ident == c1.ident + with pytest.raises(fatcat_client.rest.ApiException): + res = api.lookup_creator(orcid=o2) + + # update first; check that get on second updates + c1.display_name = "test one one" + eg = quick_eg(api) + api.update_creator(c1.ident, c1, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c2.ident) + assert res.state == "redirect" + assert res.display_name == "test one one" + + # delete first; check that second is deleted (but state is redirect) + eg = quick_eg(api) + api.delete_creator(c1.ident, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c1.ident) + assert res.state == "deleted" + assert res.display_name is None + res = api.get_creator(c2.ident) + assert res.state == "redirect" + assert res.display_name is None + assert res.revision is None + + # undelete first; check that second is a redirect + eg = quick_eg(api) + api.update_creator(c1.ident, c1, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c2.ident) + assert res.state == "redirect" + assert res.display_name == "test one one" + + # split second entity back out + assert c2.revision + assert c2.redirect is None + eg = quick_eg(api) + api.update_creator(c2.ident, c2, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c2.ident) + assert res.state == "active" + assert res.display_name == "test two" + res = api.lookup_creator(orcid=o2) + assert res.display_name == "test two" + + # cleanup + eg = quick_eg(api) + api.delete_creator(c1.ident) + api.delete_creator(c2.ident) + api.accept_editgroup(eg.id) + +def test_delete_entity(api): + + offset = 0 + while True: + offset += 1 + o1 = '0000-0000-1111-%04d' % offset + try: + api.lookup_creator(orcid=o1) + continue + except ApiException: + pass + break + + c1 = CreatorEntity(display_name="test deletable", orcid=o1) + + # create + eg = quick_eg(api) + c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) + api.accept_editgroup(eg.id) + res = api.get_creator(c1.ident) + assert res.state == "active" + assert res.display_name == "test deletable" + res = api.lookup_creator(orcid=c1.orcid) + assert res.state == "active" + assert res.display_name == "test deletable" + + # delete + eg = quick_eg(api) + api.delete_creator(c1.ident, editgroup=eg.id) + with pytest.raises(fatcat_client.rest.ApiException): + # can't re-delete in same editgroup + api.delete_creator(c1.ident, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c1.ident) + assert res.state == "deleted" + assert res.display_name is None + with pytest.raises(fatcat_client.rest.ApiException): + res = api.lookup_creator(orcid=c1.orcid) + + # re-delete + eg = quick_eg(api) + try: + # can't re-delete an entity + api.delete_creator(c1.ident, editgroup=eg.id) + #api.accept_editgroup(eg.id) + assert False + except fatcat_client.rest.ApiException as e: + # error is 4xx + print(e) + assert 400 <= e.status < 500 + + # undelete + eg = quick_eg(api) + api.update_creator(c1.ident, c1, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c1.ident) + assert res.state == "active" + assert res.display_name == "test deletable" + res = api.lookup_creator(orcid=c1.orcid) + assert res.state == "active" + assert res.display_name == "test deletable" + + # cleanup + eg = quick_eg(api) + api.delete_creator(c1.ident) + api.accept_editgroup(eg.id) + +def test_multiple_edits_same_group(api): + + c1 = CreatorEntity(display_name="test updates") + + # create + eg = quick_eg(api) + c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) + api.accept_editgroup(eg.id) + + # try multiple edits in the same group + eg = quick_eg(api) + c2 = CreatorEntity(display_name="left") + c3 = CreatorEntity(display_name="right") + edit = api.update_creator(c1.ident, c2, editgroup=eg.id) + # should fail with existing + with pytest.raises(fatcat_client.rest.ApiException): + api.update_creator(c1.ident, c3, editgroup=eg.id) + # ... but succeed after deleting + api.delete_creator_edit(edit.edit_id) + api.update_creator(c1.ident, c3, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c1.ident) + assert res.display_name == "right" + eg = api.get_editgroup(eg.id) + assert len(eg.edits.creators) == 1 + + # cleanup + eg = quick_eg(api) + api.delete_creator(c1.ident) + api.accept_editgroup(eg.id) + +def test_edit_deletion(api): + + c1 = CreatorEntity(display_name="test edit updates") + + # create + eg = quick_eg(api) + c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) + api.accept_editgroup(eg.id) + + # try multiple edits in the same group + c2 = CreatorEntity(display_name="update one") + eg = quick_eg(api) + eg = api.get_editgroup(eg.id) + assert len(eg.edits.creators) == 0 + edit = api.update_creator(c1.ident, c2, editgroup=eg.id) + eg = api.get_editgroup(eg.id) + assert len(eg.edits.creators) == 1 + api.delete_creator_edit(edit.edit_id) + eg = api.get_editgroup(eg.id) + assert len(eg.edits.creators) == 0 + + api.accept_editgroup(eg.id) + res = api.get_creator(c1.ident) + assert res.display_name == "test edit updates" + eg = api.get_editgroup(eg.id) + assert len(eg.edits.creators) == 0 + + # cleanup + eg = quick_eg(api) + api.delete_creator(c1.ident) + api.accept_editgroup(eg.id) + +def test_empty_editgroup(api): + eg = quick_eg(api) + api.accept_editgroup(eg.id) + +def test_recursive_redirects_entity(api): + + offset = 0 + while True: + offset += 1 + o1 = '0000-0000-1111-%04d' % offset + o2 = '0000-0000-2222-%04d' % offset + o3 = '0000-0000-3333-%04d' % offset + try: + api.lookup_creator(orcid=o1) + continue + except ApiException: + pass + try: + api.lookup_creator(orcid=o2) + continue + except ApiException: + pass + try: + api.lookup_creator(orcid=o3) + continue + except ApiException: + pass + break + + c1 = CreatorEntity(display_name="test one", orcid=o1) + c2 = CreatorEntity(display_name="test two", orcid=o2) + c3 = CreatorEntity(display_name="test three", orcid=o3) + + # create three creators + eg = quick_eg(api) + c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) + c2 = api.get_creator(api.create_creator(c2, editgroup=eg.id).ident) + c3 = api.get_creator(api.create_creator(c3, editgroup=eg.id).ident) + api.accept_editgroup(eg.id) + res = api.get_creator(c3.ident) + assert res.display_name == "test three" + + # redirect third to second + c3_redirect = CreatorEntity(redirect=c2.ident) + eg = quick_eg(api) + api.update_creator(c3.ident, c3_redirect, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c3.ident) + assert res.display_name == "test two" + + # redirect second to first: should be an error at merge time + c2_redirect = CreatorEntity(redirect=c1.ident) + eg = quick_eg(api) + api.update_creator(c2.ident, c2_redirect, editgroup=eg.id) + with pytest.raises(fatcat_client.rest.ApiException): + api.accept_editgroup(eg.id) + res = api.get_creator(c2.ident) + assert res.display_name == "test two" + with pytest.raises(fatcat_client.rest.ApiException): + res = api.lookup_creator(orcid=o3) + res = api.lookup_creator(orcid=o2) + assert res.ident == c2.ident + + # redirect first to third: should be an error at merge time + c1_redirect = CreatorEntity(redirect=c3.ident) + eg = quick_eg(api) + api.update_creator(c1.ident, c1_redirect, editgroup=eg.id) + with pytest.raises(fatcat_client.rest.ApiException): + api.accept_editgroup(eg.id) + res = api.get_creator(c1.ident) + assert res.display_name == "test one" + + # update second; check that third updated + c2.display_name = "test two updated" + eg = quick_eg(api) + api.update_creator(c2.ident, c2, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c2.ident) + c2 = res + assert res.display_name == "test two updated" + res = api.get_creator(c3.ident) + assert res.display_name == "test two updated" + assert res.state == "redirect" + res = api.lookup_creator(orcid=o2) + assert res.ident == c2.ident + + # delete second; check that third updated + eg = quick_eg(api) + api.delete_creator(c2.ident, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c2.ident) + assert res.state == "deleted" + res = api.get_creator(c3.ident) + assert res.state == "redirect" + assert res.display_name is None + with pytest.raises(fatcat_client.rest.ApiException): + res = api.lookup_creator(orcid=o2) + + # undelete second; check that third updated + eg = quick_eg(api) + c2_undelete = CreatorEntity(revision=c2.revision) + api.update_creator(c2.ident, c2_undelete, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c2.ident) + assert res.state == "active" + assert res.display_name == "test two updated" + res = api.get_creator(c3.ident) + assert res.state == "redirect" + assert res.display_name == "test two updated" + + # delete third (a redirect) + eg = quick_eg(api) + api.delete_creator(c3.ident, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c3.ident) + assert res.state == "deleted" + assert res.display_name is None + + # re-redirect third + eg = quick_eg(api) + api.update_creator(c3.ident, c3_redirect, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c3.ident) + assert res.state == "redirect" + assert res.display_name == "test two updated" + + # delete second, then delete third + eg = quick_eg(api) + api.delete_creator(c2.ident, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c3.ident) + assert res.state == "redirect" + assert res.display_name is None + with pytest.raises(fatcat_client.rest.ApiException): + res = api.lookup_creator(orcid=o2) + eg = quick_eg(api) + api.delete_creator(c3.ident, editgroup=eg.id) + api.accept_editgroup(eg.id) + res = api.get_creator(c3.ident) + assert res.state == "deleted" + assert res.display_name is None + + # cleanup + eg = quick_eg(api) + api.delete_creator(c1.ident) + # c2 already deleted + # c3 already deleted + api.accept_editgroup(eg.id) + +def test_self_redirect(api): + + c1 = CreatorEntity(display_name="test self-redirect") + + # create creator + eg = quick_eg(api) + c1 = api.get_creator(api.create_creator(c1, editgroup=eg.id).ident) + api.accept_editgroup(eg.id) + + # redirect first to itself; should error on PUT + c1_redirect = CreatorEntity(redirect=c1.ident) + eg = quick_eg(api) + with pytest.raises(fatcat_client.rest.ApiException): + merge_edit = api.update_creator(c1.ident, c1_redirect, editgroup=eg.id) -- cgit v1.2.3