diff options
Diffstat (limited to 'bitbake/lib/toaster/tests/functional/functional_helpers.py')
-rw-r--r-- | bitbake/lib/toaster/tests/functional/functional_helpers.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/bitbake/lib/toaster/tests/functional/functional_helpers.py b/bitbake/lib/toaster/tests/functional/functional_helpers.py index 7c20437d14..e28f2024f5 100644 --- a/bitbake/lib/toaster/tests/functional/functional_helpers.py +++ b/bitbake/lib/toaster/tests/functional/functional_helpers.py | |||
@@ -12,9 +12,12 @@ import logging | |||
12 | import subprocess | 12 | import subprocess |
13 | import signal | 13 | import signal |
14 | import re | 14 | import re |
15 | import requests | ||
15 | 16 | ||
17 | from django.urls import reverse | ||
16 | from tests.browser.selenium_helpers_base import SeleniumTestCaseBase | 18 | from tests.browser.selenium_helpers_base import SeleniumTestCaseBase |
17 | from selenium.webdriver.common.by import By | 19 | from selenium.webdriver.common.by import By |
20 | from selenium.webdriver.support.select import Select | ||
18 | from selenium.common.exceptions import NoSuchElementException | 21 | from selenium.common.exceptions import NoSuchElementException |
19 | 22 | ||
20 | logger = logging.getLogger("toaster") | 23 | logger = logging.getLogger("toaster") |
@@ -136,3 +139,86 @@ class SeleniumFunctionalTestCase(SeleniumTestCaseBase): | |||
136 | except NoSuchElementException: | 139 | except NoSuchElementException: |
137 | return False | 140 | return False |
138 | return element | 141 | return element |
142 | |||
143 | def create_new_project( | ||
144 | self, | ||
145 | project_name, | ||
146 | release, | ||
147 | release_title, | ||
148 | merge_toaster_settings, | ||
149 | ): | ||
150 | """ Create/Test new project using: | ||
151 | - Project Name: Any string | ||
152 | - Release: Any string | ||
153 | - Merge Toaster settings: True or False | ||
154 | """ | ||
155 | |||
156 | # Obtain a CSRF token from a suitable URL | ||
157 | projs = requests.get(self.live_server_url + reverse('newproject')) | ||
158 | csrftoken = projs.cookies.get('csrftoken') | ||
159 | |||
160 | # Use the projects typeahead to find out if the project already exists | ||
161 | req = requests.get(self.live_server_url + reverse('xhr_projectstypeahead'), {'search': project_name, 'format' : 'json'}) | ||
162 | data = req.json() | ||
163 | # Delete any existing projects | ||
164 | for result in data['results']: | ||
165 | del_url = reverse('xhr_project', args=(result['id'],)) | ||
166 | del_response = requests.delete(self.live_server_url + del_url, cookies={'csrftoken': csrftoken}, headers={'X-CSRFToken': csrftoken}) | ||
167 | self.assertEqual(del_response.status_code, 200) | ||
168 | |||
169 | self.get(reverse('newproject')) | ||
170 | self.wait_until_visible('#new-project-name') | ||
171 | self.driver.find_element(By.ID, | ||
172 | "new-project-name").send_keys(project_name) | ||
173 | |||
174 | select = Select(self.find('#projectversion')) | ||
175 | select.select_by_value(release) | ||
176 | |||
177 | # check merge toaster settings | ||
178 | checkbox = self.find('.checkbox-mergeattr') | ||
179 | if merge_toaster_settings: | ||
180 | if not checkbox.is_selected(): | ||
181 | checkbox.click() | ||
182 | else: | ||
183 | if checkbox.is_selected(): | ||
184 | checkbox.click() | ||
185 | |||
186 | self.wait_until_clickable('#create-project-button') | ||
187 | |||
188 | self.driver.find_element(By.ID, "create-project-button").click() | ||
189 | |||
190 | element = self.wait_until_visible('#project-created-notification') | ||
191 | self.assertTrue( | ||
192 | self.element_exists('#project-created-notification'), | ||
193 | f"Project:{project_name} creation notification not shown" | ||
194 | ) | ||
195 | self.assertTrue( | ||
196 | project_name in element.text, | ||
197 | f"New project name:{project_name} not in new project notification" | ||
198 | ) | ||
199 | |||
200 | # Use the projects typeahead again to check the project now exists | ||
201 | req = requests.get(self.live_server_url + reverse('xhr_projectstypeahead'), {'search': project_name, 'format' : 'json'}) | ||
202 | data = req.json() | ||
203 | self.assertGreater(len(data['results']), 0, f"New project:{project_name} not found in database") | ||
204 | |||
205 | project_id = data['results'][0]['id'] | ||
206 | |||
207 | self.wait_until_visible('#project-release-title') | ||
208 | |||
209 | # check release | ||
210 | if release_title is not None: | ||
211 | self.assertTrue(re.search( | ||
212 | release_title, | ||
213 | self.driver.find_element(By.XPATH, | ||
214 | "//span[@id='project-release-title']" | ||
215 | ).text), | ||
216 | 'The project release is not defined') | ||
217 | |||
218 | return project_id | ||
219 | |||
220 | def load_projects_page_helper(self): | ||
221 | self.wait_until_present('#projectstable') | ||
222 | # Need to wait for some data in the table too | ||
223 | self.wait_until_present('td[class="updated"]') | ||
224 | |||