Skip to content

Commit a12db25

Browse files
authored
Merge pull request #283 from Shtogryn/pshtohryn/ENG-6724/update/test_withdraw_preprint
Update test_withdraw_preprint
2 parents dcc015e + 1c014d7 commit a12db25

File tree

3 files changed

+59
-9
lines changed

3 files changed

+59
-9
lines changed

api/osf_api.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def create_child_node(
4646
node_id=None,
4747
title='osf selenium child node',
4848
tags=None,
49-
**kwargs
49+
**kwargs,
5050
):
5151
"""Create a child node (a.k.a. component) of a given project node."""
5252
if tags is None:
@@ -863,6 +863,43 @@ def accept_moderated_preprint(session=None, preprint_node=None):
863863
)
864864

865865

866+
def get_preprint_id(session=None, preprint_node=None):
867+
"""Get priprint's id"""
868+
if not session:
869+
session = get_default_session()
870+
request_url = f'/v2/preprints/{preprint_node}/requests/'
871+
872+
response = session.get(url=request_url)
873+
preprint_id = ''
874+
for item in response.get('data', []):
875+
preprint_id = item.get('id')
876+
return preprint_id
877+
878+
879+
def accept_withdraw_preprint(session=None, preprint_id=None):
880+
"""Accept a withdrawal request for a given preprint request ID."""
881+
if not session:
882+
session = get_default_session()
883+
review_url = '/v2/actions/requests/preprints/'
884+
review_payload = {
885+
'data': {
886+
'type': 'preprint-request-actions',
887+
'attributes': {
888+
'trigger': 'accept',
889+
'comment': 'Preprint Withdraw Approval via OSF api',
890+
},
891+
'relationships': {
892+
'target': {'data': {'id': preprint_id, 'type': 'preprint-requests'}}
893+
},
894+
}
895+
}
896+
session.post(
897+
url=review_url,
898+
item_type='review-actions',
899+
raw_body=json.dumps(review_payload),
900+
)
901+
902+
866903
def create_preprint_withdrawal_request(session=None, preprint_node=None):
867904
"""Create a withdrawal request for a given preprint node id."""
868905
if not session:

pages/preprints.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,10 @@ class PreprintWithdrawPage(GuidBasePage, BasePreprintPage):
225225
By.CSS_SELECTOR, '[data-test-comment-input] textarea'
226226
)
227227
request_withdrawal_button = Locator(
228-
By.XPATH, '//div[@class="_Footer_gyio2l"]/button[text()="Withdraw"]'
228+
By.CSS_SELECTOR, '[data-test-confirm-withdraw-button]'
229+
)
230+
withdrawn_banner = Locator(
231+
By.XPATH, "//span[normalize-space(text())='This preprint has been withdrawn.']"
229232
)
230233

231234

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

285289
# Locators for the reviews app preprint detail page
@@ -308,8 +312,10 @@ class PendingPreprintDetailPage(PreprintDetailPage):
308312
settings.LONG_TIMEOUT,
309313
)
310314
# This locator needs a data-test-selector from software devs
311-
# title = Locator(By.CSS_SELECTOR, '[data-test-preprint-title]', settings.LONG_TIMEOUT)
312-
title = Locator(By.ID, 'preprintTitle', settings.LONG_TIMEOUT)
315+
title = Locator(
316+
By.CSS_SELECTOR, '[data-test-preprint-title]', settings.LONG_TIMEOUT
317+
)
318+
# title = Locator(By.ID, 'preprintTitle', settings.LONG_TIMEOUT)
313319

314320

315321
class ReviewsDashboardPage(OSFBasePage):

tests/test_preprints.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ def test_edit_preprint(self, session, driver, preprint_detail_page):
328328
assert tag_found
329329

330330
@markers.dont_run_on_prod
331-
@pytest.mark.xfail(reason='https://openscience.atlassian.net/browse/ENG-6065')
332331
def test_withdraw_preprint(self, session, driver, preprint_detail_page):
333332
"""Test the Withdraw Preprint functionality. Using the preprint_detail_page
334333
fixture we start on the Preprint Detail page for an api created preprint. Then
@@ -340,9 +339,11 @@ def test_withdraw_preprint(self, session, driver, preprint_detail_page):
340339
user in the OSF admin app. The best we can do here is to verify through the api
341340
that the withdrawal request record is created.
342341
"""
343-
assert PreprintDetailPage(driver, verify=True)
344-
preprint_detail_page.edit_preprint_button.click()
345342
edit_page = PreprintEditPage(driver)
343+
assert PreprintDetailPage(driver, verify=True)
344+
preprint_node = preprint_detail_page.url[len(settings.OSF_HOME) + 1 :]
345+
osf_api.accept_moderated_preprint(session=None, preprint_node=preprint_node)
346+
preprint_detail_page.goto()
346347
WebDriverWait(driver, 5).until(
347348
EC.element_to_be_clickable(
348349
(By.CSS_SELECTOR, '[data-test-withdrawal-button]')
@@ -363,8 +364,14 @@ def test_withdraw_preprint(self, session, driver, preprint_detail_page):
363364
)
364365
assert withdraw_page.request_withdrawal_button.is_enabled()
365366
withdraw_page.request_withdrawal_button.click()
367+
preprint_id = osf_api.get_preprint_id(session=None, preprint_node=preprint_node)
368+
osf_api.accept_withdraw_preprint(session=None, preprint_id=preprint_id)
369+
preprint_detail_page.goto()
370+
WebDriverWait(driver, 5).until(EC.visibility_of(withdraw_page.withdrawn_banner))
366371
# Should be redirected back to Preprint Detail page
367-
assert PendingPreprintDetailPage(driver, verify=True)
372+
assert PreprintDetailPage(driver, verify=True)
373+
# Verify that "This preprint has been withdrawn." banner is displayed on Preprint Detail page.
374+
assert withdraw_page.withdrawn_banner.is_displayed()
368375
# Verify via the api that the Withdrawal Request record was created
369376
requests = osf_api.get_preprint_requests_records(
370377
node_id=preprint_detail_page.guid
@@ -374,7 +381,7 @@ def test_withdraw_preprint(self, session, driver, preprint_detail_page):
374381
record_found = False
375382
for request in requests:
376383
if request['attributes']['request_type'] == 'withdrawal':
377-
assert request['attributes']['machine_state'] == 'pending'
384+
assert request['attributes']['machine_state'] == 'accepted'
378385
record_found = True
379386
break
380387
if not record_found:

0 commit comments

Comments
 (0)