Skip to content

Update test_withdraw_preprint #283

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion api/osf_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def create_child_node(
node_id=None,
title='osf selenium child node',
tags=None,
**kwargs
**kwargs,
):
"""Create a child node (a.k.a. component) of a given project node."""
if tags is None:
Expand Down Expand Up @@ -863,6 +863,43 @@ def accept_moderated_preprint(session=None, preprint_node=None):
)


def get_preprint_id(session=None, preprint_node=None):
"""Get priprint's id"""
if not session:
session = get_default_session()
request_url = f'/v2/preprints/{preprint_node}/requests/'

response = session.get(url=request_url)
preprint_id = ''
for item in response.get('data', []):
preprint_id = item.get('id')
return preprint_id


def accept_withdraw_preprint(session=None, preprint_id=None):
"""Accept a withdrawal request for a given preprint request ID."""
if not session:
session = get_default_session()
review_url = '/v2/actions/requests/preprints/'
review_payload = {
'data': {
'type': 'preprint-request-actions',
'attributes': {
'trigger': 'accept',
'comment': 'Preprint Withdraw Approval via OSF api',
},
'relationships': {
'target': {'data': {'id': preprint_id, 'type': 'preprint-requests'}}
},
}
}
session.post(
url=review_url,
item_type='review-actions',
raw_body=json.dumps(review_payload),
)


def create_preprint_withdrawal_request(session=None, preprint_node=None):
"""Create a withdrawal request for a given preprint node id."""
if not session:
Expand Down
12 changes: 9 additions & 3 deletions pages/preprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,10 @@ class PreprintWithdrawPage(GuidBasePage, BasePreprintPage):
By.CSS_SELECTOR, '[data-test-comment-input] textarea'
)
request_withdrawal_button = Locator(
By.XPATH, '//div[@class="_Footer_gyio2l"]/button[text()="Withdraw"]'
By.CSS_SELECTOR, '[data-test-confirm-withdraw-button]'
)
withdrawn_banner = Locator(
By.XPATH, "//span[normalize-space(text())='This preprint has been withdrawn.']"
)


Expand Down Expand Up @@ -280,6 +283,7 @@ class PreprintDetailPage(GuidBasePage, BasePreprintPage):
downloads_count = Locator(By.CSS_SELECTOR, '[data-test-download-count]')
download_button = Locator(By.CSS_SELECTOR, '[data-test-download-button]')
edit_preprint_button = Locator(By.CSS_SELECTOR, '[data-test-edit-preprint-button]')
withdraw_preprint_button = Locator(By.CSS_SELECTOR, '[data-test-withdrawal-button]')
default_citation = Locator(By.CSS_SELECTOR, '[data-test-default-citation="apa"]')

# Locators for the reviews app preprint detail page
Expand Down Expand Up @@ -308,8 +312,10 @@ class PendingPreprintDetailPage(PreprintDetailPage):
settings.LONG_TIMEOUT,
)
# This locator needs a data-test-selector from software devs
# title = Locator(By.CSS_SELECTOR, '[data-test-preprint-title]', settings.LONG_TIMEOUT)
title = Locator(By.ID, 'preprintTitle', settings.LONG_TIMEOUT)
title = Locator(
By.CSS_SELECTOR, '[data-test-preprint-title]', settings.LONG_TIMEOUT
)
# title = Locator(By.ID, 'preprintTitle', settings.LONG_TIMEOUT)


class ReviewsDashboardPage(OSFBasePage):
Expand Down
17 changes: 12 additions & 5 deletions tests/test_preprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,6 @@ def test_edit_preprint(self, session, driver, preprint_detail_page):
assert tag_found

@markers.dont_run_on_prod
@pytest.mark.xfail(reason='https://openscience.atlassian.net/browse/ENG-6065')
def test_withdraw_preprint(self, session, driver, preprint_detail_page):
"""Test the Withdraw Preprint functionality. Using the preprint_detail_page
fixture we start on the Preprint Detail page for an api created preprint. Then
Expand All @@ -340,9 +339,11 @@ def test_withdraw_preprint(self, session, driver, preprint_detail_page):
user in the OSF admin app. The best we can do here is to verify through the api
that the withdrawal request record is created.
"""
assert PreprintDetailPage(driver, verify=True)
preprint_detail_page.edit_preprint_button.click()
edit_page = PreprintEditPage(driver)
assert PreprintDetailPage(driver, verify=True)
preprint_node = preprint_detail_page.url[len(settings.OSF_HOME) + 1 :]
osf_api.accept_moderated_preprint(session=None, preprint_node=preprint_node)
preprint_detail_page.goto()
WebDriverWait(driver, 5).until(
EC.element_to_be_clickable(
(By.CSS_SELECTOR, '[data-test-withdrawal-button]')
Expand All @@ -363,8 +364,14 @@ def test_withdraw_preprint(self, session, driver, preprint_detail_page):
)
assert withdraw_page.request_withdrawal_button.is_enabled()
withdraw_page.request_withdrawal_button.click()
preprint_id = osf_api.get_preprint_id(session=None, preprint_node=preprint_node)
osf_api.accept_withdraw_preprint(session=None, preprint_id=preprint_id)
preprint_detail_page.goto()
WebDriverWait(driver, 5).until(EC.visibility_of(withdraw_page.withdrawn_banner))
# Should be redirected back to Preprint Detail page
assert PendingPreprintDetailPage(driver, verify=True)
assert PreprintDetailPage(driver, verify=True)
# Verify that "This preprint has been withdrawn." banner is displayed on Preprint Detail page.
assert withdraw_page.withdrawn_banner.is_displayed()
# Verify via the api that the Withdrawal Request record was created
requests = osf_api.get_preprint_requests_records(
node_id=preprint_detail_page.guid
Expand All @@ -374,7 +381,7 @@ def test_withdraw_preprint(self, session, driver, preprint_detail_page):
record_found = False
for request in requests:
if request['attributes']['request_type'] == 'withdrawal':
assert request['attributes']['machine_state'] == 'pending'
assert request['attributes']['machine_state'] == 'accepted'
record_found = True
break
if not record_found:
Expand Down