|
1 | 1 | import pytest
|
| 2 | +from selenium.webdriver.common.by import By |
| 3 | +from selenium.webdriver.support import expected_conditions as EC |
| 4 | +from selenium.webdriver.support.ui import WebDriverWait |
2 | 5 |
|
3 | 6 | import markers
|
4 | 7 | from api import osf_api
|
@@ -73,3 +76,151 @@ def test_overview_link(self, driver, session):
|
73 | 76 | metadata_page.goto()
|
74 | 77 | metadata_page.side_navbar.overview_link.click()
|
75 | 78 | assert RegistrationDetailPage(driver, verify=True)
|
| 79 | + |
| 80 | + |
| 81 | +@pytest.mark.usefixtures('must_be_logged_in_as_registration_user') |
| 82 | +@markers.dont_run_on_prod |
| 83 | +@markers.core_functionality |
| 84 | +class TestRegistrationOutputs: |
| 85 | + @pytest.fixture() |
| 86 | + def registration_guid(self, session): |
| 87 | + registration_guid = osf_api.get_registration_by_title( |
| 88 | + 'Selenium Registration For Outputs Testing' |
| 89 | + ) |
| 90 | + return registration_guid |
| 91 | + |
| 92 | + @pytest.fixture() |
| 93 | + def registration_details_page(self, driver, registration_guid): |
| 94 | + registration_details_page = RegistrationDetailPage( |
| 95 | + driver, guid=registration_guid |
| 96 | + ) |
| 97 | + registration_details_page.goto() |
| 98 | + return registration_details_page |
| 99 | + |
| 100 | + def create_new_resource( |
| 101 | + self, driver, registration_guid, registration_details_page, resource_type |
| 102 | + ): |
| 103 | + """This method creates new resource of the type given for the given registration""" |
| 104 | + doi = '10.17605' |
| 105 | + registration_details_page.add_resource_button.click() |
| 106 | + registration_details_page.doi_input_field.clear() |
| 107 | + registration_details_page.doi_input_field.click() |
| 108 | + registration_details_page.doi_input_field.send_keys(doi) |
| 109 | + |
| 110 | + # Select 'Data' from the resource type listbox |
| 111 | + registration_details_page.resource_type_dropdown.click() |
| 112 | + |
| 113 | + registration_details_page.select_from_dropdown_listbox(resource_type) |
| 114 | + registration_details_page.preview_button.click() |
| 115 | + registration_details_page.resource_type_add_button.click() |
| 116 | + |
| 117 | + def test_add_new_resource_data( |
| 118 | + self, driver, registration_details_page, registration_guid |
| 119 | + ): |
| 120 | + """This test verifies adding new Data output resource for a registration |
| 121 | + and verifies that the Data icon color changes when resource is added""" |
| 122 | + registration_details_page.open_practice_resource_data.click() |
| 123 | + WebDriverWait(driver, 5).until( |
| 124 | + EC.visibility_of_element_located( |
| 125 | + (By.CSS_SELECTOR, '[data-test-add-resource-section]') |
| 126 | + ) |
| 127 | + ) |
| 128 | + # Verify if resource already exists and delete the resource if already exists |
| 129 | + resource_id = osf_api.get_registration_resource_id( |
| 130 | + registration_id=registration_guid |
| 131 | + ) |
| 132 | + if resource_id is not None: |
| 133 | + osf_api.delete_registration_resource(registration_guid) |
| 134 | + registration_details_page.reload() |
| 135 | + WebDriverWait(driver, 10).until( |
| 136 | + EC.invisibility_of_element_located( |
| 137 | + (By.CSS_SELECTOR, '[data-test-resource-card-type]') |
| 138 | + ) |
| 139 | + ) |
| 140 | + |
| 141 | + self.create_new_resource( |
| 142 | + self, driver, registration_details_page, resource_type='Data' |
| 143 | + ) |
| 144 | + |
| 145 | + data_resource = WebDriverWait(driver, 10).until( |
| 146 | + EC.presence_of_element_located((By.XPATH, '//li/p[text()="Data"]')) |
| 147 | + ) |
| 148 | + assert data_resource is not None |
| 149 | + osf_api.delete_registration_resource(registration_guid) |
| 150 | + |
| 151 | + def test_edit_resource_data( |
| 152 | + self, driver, registration_details_page, registration_guid, fake |
| 153 | + ): |
| 154 | + """This test updates the description of data output resource for a given registration""" |
| 155 | + resource_description = fake.sentence(nb_words=1) |
| 156 | + registration_details_page.open_practice_resource_data.click() |
| 157 | + # Verify n and delete the resource if already exists |
| 158 | + resource_id = osf_api.get_registration_resource_id( |
| 159 | + registration_id=registration_guid |
| 160 | + ) |
| 161 | + if resource_id is not None: |
| 162 | + osf_api.delete_registration_resource(registration_guid) |
| 163 | + registration_details_page.reload() |
| 164 | + WebDriverWait(driver, 10).until( |
| 165 | + EC.invisibility_of_element_located((By.XPATH, '//li/p[text()="Data"]')) |
| 166 | + ) |
| 167 | + |
| 168 | + osf_api.create_registration_resource(registration_guid, resource_type='Data') |
| 169 | + registration_details_page.reload() |
| 170 | + WebDriverWait(driver, 10).until( |
| 171 | + EC.presence_of_element_located((By.XPATH, '//li/p[text()="Data"]')) |
| 172 | + ) |
| 173 | + registration_details_page.resource_type_edit_button.click() |
| 174 | + registration_details_page.resource_description.click() |
| 175 | + registration_details_page.resource_description.clear() |
| 176 | + registration_details_page.resource_description.send_keys(resource_description) |
| 177 | + registration_details_page.save_button.click() |
| 178 | + |
| 179 | + registration_details_page.reload() |
| 180 | + WebDriverWait(driver, 5).until( |
| 181 | + EC.presence_of_element_located((By.XPATH, '//li/p[text()="Data"]')) |
| 182 | + ) |
| 183 | + assert ( |
| 184 | + registration_details_page.resource_card_description.text |
| 185 | + == resource_description |
| 186 | + ) |
| 187 | + osf_api.delete_registration_resource(registration_guid) |
| 188 | + |
| 189 | + def test_delete_resource_data( |
| 190 | + self, driver, registration_details_page, registration_guid, fake |
| 191 | + ): |
| 192 | + """This test verifies delete functionality of data output resource for a registration""" |
| 193 | + |
| 194 | + registration_details_page.open_practice_resource_data.click() |
| 195 | + # Verify and delete the resource if already exists |
| 196 | + resource_id = osf_api.get_registration_resource_id( |
| 197 | + registration_id=registration_guid |
| 198 | + ) |
| 199 | + if resource_id is not None: |
| 200 | + osf_api.delete_registration_resource(registration_guid) |
| 201 | + registration_details_page.reload() |
| 202 | + WebDriverWait(driver, 10).until( |
| 203 | + EC.invisibility_of_element_located((By.XPATH, '//li/p[text()="Data"]')) |
| 204 | + ) |
| 205 | + |
| 206 | + osf_api.create_registration_resource(registration_guid, resource_type='Data') |
| 207 | + registration_details_page.reload() |
| 208 | + WebDriverWait(driver, 5).until( |
| 209 | + EC.visibility_of_element_located((By.XPATH, '//li/p[text()="Data"]')) |
| 210 | + ) |
| 211 | + |
| 212 | + orig_data_icon_color = driver.find_element_by_css_selector( |
| 213 | + 'img[data-analytics-name="data"]' |
| 214 | + ).get_attribute('src') |
| 215 | + registration_details_page.resource_type_delete_button.click() |
| 216 | + registration_details_page.resource_type_delete_confirm.click() |
| 217 | + registration_details_page.reload() |
| 218 | + WebDriverWait(driver, 10).until( |
| 219 | + EC.visibility_of_element_located( |
| 220 | + (By.CSS_SELECTOR, '[data-test-add-resource-section]') |
| 221 | + ) |
| 222 | + ) |
| 223 | + new_data_icon_color = driver.find_element_by_css_selector( |
| 224 | + 'img[data-analytics-name="data"]' |
| 225 | + ).get_attribute('src') |
| 226 | + assert new_data_icon_color != orig_data_icon_color |
0 commit comments