Skip to content

Commit dcc015e

Browse files
authored
Merge pull request #282 from CenterForOpenScience/feature/registration_metadata_fix
Added edit title and edit contributors tests
2 parents 9b5d00a + 62851fd commit dcc015e

File tree

4 files changed

+181
-11
lines changed

4 files changed

+181
-11
lines changed

api/osf_api.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,3 +1279,45 @@ def create_registration_resource(registration_guid, resource_type):
12791279
item_id=resource_id,
12801280
item_type='resources',
12811281
)['data']
1282+
1283+
1284+
def update_registration_title(registration_guid, title):
1285+
"""This method updates the title of the given
1286+
registration."""
1287+
session = client.Session(
1288+
api_base_url=settings.API_DOMAIN,
1289+
auth=(settings.REGISTRATIONS_USER, settings.REGISTRATIONS_USER_PASSWORD),
1290+
)
1291+
url = '/v2/registrations/{}/'.format(registration_guid)
1292+
payload = {
1293+
'data': {
1294+
'id': registration_guid,
1295+
'type': 'registrations',
1296+
'attributes': {'title': title},
1297+
}
1298+
}
1299+
session.patch(
1300+
url=url,
1301+
raw_body=json.dumps(payload),
1302+
item_id=registration_guid,
1303+
item_type='registrations',
1304+
)['data']
1305+
1306+
1307+
def delete_registration_contributor(registration_guid, user_name):
1308+
"""This method deletes the given user from the given registration"""
1309+
session = client.Session(
1310+
api_base_url=settings.API_DOMAIN,
1311+
auth=(settings.REGISTRATIONS_USER, settings.REGISTRATIONS_USER_PASSWORD),
1312+
)
1313+
url = '/v2/registrations/{}/contributors/'.format(registration_guid)
1314+
data = session.get(url)['data']
1315+
1316+
for i in range(0, len(data)):
1317+
if user_name in data[i]['embeds']['users']['data']['attributes']['full_name']:
1318+
user_id = data[i]['embeds']['users']['data']['id']
1319+
delete_url = '/v2/registrations/{}/contributors/{}/'.format(
1320+
registration_guid, user_id
1321+
)
1322+
session.delete(delete_url, item_type='users')
1323+
break

pages/registries.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,22 +143,27 @@ def select_from_dropdown_listbox(self, selection):
143143
class RegistrationMetadataPage(BaseSubmittedRegistrationPage):
144144
url_addition = 'metadata'
145145
identity = Locator(By.CSS_SELECTOR, '[data-test-display-resource-type-general]')
146-
146+
metadata_title = Locator(By.CSS_SELECTOR, '[data-test-display-node-title]')
147147
metadata_description = Locator(
148148
By.CSS_SELECTOR, '[data-test-display-node-description]'
149149
)
150150
edit_metadata_description_button = Locator(
151151
By.CSS_SELECTOR, '[data-test-edit-node-description-button]'
152152
)
153+
save_metadata_title_button = Locator(
154+
By.CSS_SELECTOR, '[data-test-save-node-title-button]'
155+
)
153156
save_metadata_description_button = Locator(
154157
By.CSS_SELECTOR, '[data-test-save-node-description-button]'
155158
)
156159
contributors_list = Locator(By.CSS_SELECTOR, '[data-test-contributors-list]')
157-
contributor_search_button = Locator(By.XPATH, '//input[@class="btn btn-default"]')
160+
contributor_search_button = Locator(
161+
By.CSS_SELECTOR, '[data-test-user-search-button]'
162+
)
158163
add_displayed_contributor_button = Locator(
159164
By.CSS_SELECTOR, '[a.btn.btn-success.contrib-button.btn-mini]'
160165
)
161-
search_input = Locator(By.XPATH, '//input[@class="form-control"]')
166+
search_input = Locator(By.CSS_SELECTOR, '[data-test-user-search-input]')
162167
resource_type = Locator(
163168
By.CSS_SELECTOR, '[data-test-display-resource-type-general]'
164169
)
@@ -183,6 +188,35 @@ def select_from_dropdown_listbox(self, selection):
183188
option.click()
184189
break
185190

191+
rows = GroupLocator(By.CSS_SELECTOR, '[data-test-user-card-main]')
192+
193+
def select_from_table_of_rows(self, selection):
194+
for row in self.rows:
195+
cell = row.find_element(
196+
By.CSS_SELECTOR, '[data-analytics-name="View user"]'
197+
)
198+
if selection in cell.text.strip():
199+
row.find_element(
200+
By.CSS_SELECTOR, '[data-test-add-contributor-button]'
201+
).click()
202+
break
203+
204+
contributors_list = GroupLocator(
205+
By.CSS_SELECTOR, '[data-analytics-name="Contributor name"]'
206+
)
207+
208+
def select_from_list(self, selection):
209+
for contributor in self.contributors_list:
210+
if selection in contributor.text.strip():
211+
return contributor
212+
213+
search_cancel_button = Locator(
214+
By.CSS_SELECTOR, '[data-test-user-search-cancel-button]'
215+
)
216+
add_contributor_finish_button = Locator(
217+
By.CSS_SELECTOR, '[data-test-finish-node-contributor-editing-button]'
218+
)
219+
186220
resource_information_save_button = Locator(
187221
By.CSS_SELECTOR, '[data-test-save-resource-metadata-button]'
188222
)

tests/test_metadata.py

Lines changed: 95 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -482,22 +482,49 @@ def test_edit_support_funding_information(
482482
@markers.core_functionality
483483
class TestRegistrationMetadata:
484484
@pytest.fixture()
485-
def registration_metadata_page(self, driver):
486-
registration_guid = osf_api.get_registration_by_title(
487-
'Selenium Registration for Metadata tests'
488-
)
485+
def title(self):
486+
TITLE = 'Selenium Registration for Metadata tests'
487+
return TITLE
488+
489+
@pytest.fixture()
490+
def registration_metadata_page(self, driver, title):
491+
registration_guid = osf_api.get_registration_by_title(title)
489492
osf_api.update_registration_metadata_with_custom_data(registration_guid)
490493
registration_metadata_page = RegistrationMetadataPage(
491494
driver, guid=registration_guid
492495
)
493496
registration_metadata_page.goto()
494497
return registration_metadata_page
495498

496-
def test_edit_metadata_description(self, driver, registration_metadata_page, fake):
497-
"""This test verifies that the registration metadata field
498-
description is editable and changes are saved."""
499+
@pytest.fixture()
500+
def registration_guid(self, title):
501+
registration_guid = osf_api.get_registration_by_title(title)
502+
return registration_guid
503+
504+
def test_edit_metadata_title_and_description(
505+
self, driver, registration_metadata_page, fake, registration_guid, title
506+
):
507+
"""This test verifies that the registration metadata title
508+
and description fields are editable and changes are saved."""
499509

510+
new_title = fake.sentence(nb_words=2)
500511
new_description = fake.sentence(nb_words=4)
512+
# original_title = 'Selenium Registration for Metadata tests'
513+
514+
WebDriverWait(driver, 5).until(
515+
EC.element_to_be_clickable(
516+
(By.CSS_SELECTOR, '[data-test-edit-node-title-button]')
517+
)
518+
).click()
519+
title_input = driver.find_element_by_css_selector(
520+
'[data-test-title-field] textarea'
521+
)
522+
title_input.clear()
523+
title_input.send_keys(new_title)
524+
registration_metadata_page.save_metadata_title_button.click()
525+
assert new_title == utils.clean_text(
526+
registration_metadata_page.metadata_title.text
527+
)
501528

502529
WebDriverWait(driver, 5).until(
503530
EC.element_to_be_clickable(
@@ -511,7 +538,67 @@ def test_edit_metadata_description(self, driver, registration_metadata_page, fak
511538
description_input.clear()
512539
description_input.send_keys(new_description)
513540
registration_metadata_page.save_metadata_description_button.click()
514-
assert new_description == registration_metadata_page.metadata_description.text
541+
assert new_description == utils.clean_text(
542+
registration_metadata_page.metadata_description.text
543+
)
544+
assert new_title == utils.clean_text(
545+
registration_metadata_page.metadata_title.text
546+
)
547+
osf_api.update_registration_title(
548+
registration_guid=registration_guid, title=title
549+
)
550+
551+
def test_edit_contributors(
552+
self, session, driver, registration_metadata_page, registration_guid
553+
):
554+
"""This test verifies that user can add/remove
555+
contributors to registration metadata."""
556+
557+
if settings.DOMAIN == 'test':
558+
new_user = 'Selenium Test User (Do Not Use)'
559+
elif settings.DOMAIN == 'prod':
560+
new_user = 'OSF Tester1'
561+
else:
562+
new_user = 'Selenium Staging'
563+
564+
# Delete the user if its already exists
565+
osf_api.delete_registration_contributor(
566+
registration_guid=registration_guid, user_name=new_user
567+
)
568+
registration_metadata_page.goto_with_reload()
569+
570+
WebDriverWait(driver, 5).until(
571+
EC.element_to_be_clickable(
572+
(By.CSS_SELECTOR, '[data-test-edit-node-contributors-button]')
573+
)
574+
).click()
575+
576+
registration_metadata_page.search_input.click()
577+
registration_metadata_page.search_input.send_keys(new_user)
578+
registration_metadata_page.contributor_search_button.click()
579+
580+
# Get the row number for the user from the search table
581+
WebDriverWait(driver, 5).until(
582+
EC.visibility_of_element_located(
583+
(
584+
By.CSS_SELECTOR,
585+
'[data-test-user-card]',
586+
)
587+
)
588+
)
589+
590+
registration_metadata_page.select_from_table_of_rows(new_user)
591+
registration_metadata_page.search_cancel_button.click()
592+
registration_metadata_page.add_contributor_finish_button.click()
593+
594+
WebDriverWait(driver, 5).until(
595+
EC.visibility_of_element_located(
596+
(By.CSS_SELECTOR, '[data-test-contributors-list]')
597+
)
598+
)
599+
600+
user = registration_metadata_page.select_from_list(new_user)
601+
assert new_user in user.text.strip()
515602

516603
def test_edit_resource_information(self, driver, registration_metadata_page):
517604
"""This test verifies that user can add/remove

utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,3 +261,10 @@ def read_data_from_table(driver, table_path, check_match, item_match=None):
261261
return i, datalist
262262

263263
return rlen, datalist
264+
265+
266+
def clean_text(stringvalue):
267+
clean_text = stringvalue.strip()
268+
clean_text = clean_text.replace('\n', ' ')
269+
clean_text = ' '.join(clean_text.split())
270+
return clean_text

0 commit comments

Comments
 (0)