|
10 | 10 | from selenium.webdriver.common.by import By
|
11 | 11 | from selenium.webdriver.support import expected_conditions as EC
|
12 | 12 | from selenium.webdriver.support.ui import Select, WebDriverWait
|
| 13 | +from swapper import load_model |
13 | 14 |
|
14 | 15 | from openwisp_utils.test_selenium_mixins import SeleniumTestMixin
|
15 | 16 |
|
16 | 17 | from .utils import CreateConfigTemplateMixin, TestWireguardVpnMixin
|
17 | 18 |
|
| 19 | +Device = load_model('config', 'Device') |
| 20 | + |
18 | 21 |
|
19 | 22 | class SeleniumBaseMixin(CreateConfigTemplateMixin, SeleniumTestMixin):
|
20 | 23 | def setUp(self):
|
@@ -286,6 +289,77 @@ def test_template_context_variables(self):
|
286 | 289 | alert.accept()
|
287 | 290 | self.fail('Unsaved changes alert displayed without any change')
|
288 | 291 |
|
| 292 | + def test_force_delete_device_with_deactivating_config(self): |
| 293 | + self._create_template(default=True) |
| 294 | + config = self._create_config(organization=self._get_org()) |
| 295 | + device = config.device |
| 296 | + self.assertEqual(device.is_deactivated(), False) |
| 297 | + self.assertEqual(config.status, 'modified') |
| 298 | + |
| 299 | + self.login() |
| 300 | + self.open(reverse('admin:config_device_change', args=[device.id])) |
| 301 | + self.web_driver.find_elements( |
| 302 | + by=By.CSS_SELECTOR, value='input.deletelink[type="submit"]' |
| 303 | + )[-1].click() |
| 304 | + device.refresh_from_db() |
| 305 | + config.refresh_from_db() |
| 306 | + self.assertEqual(device.is_deactivated(), True) |
| 307 | + self.assertEqual(config.is_deactivating(), True) |
| 308 | + |
| 309 | + self.open(reverse('admin:config_device_change', args=[device.id])) |
| 310 | + self.web_driver.find_elements(by=By.CSS_SELECTOR, value='a.deletelink')[ |
| 311 | + -1 |
| 312 | + ].click() |
| 313 | + WebDriverWait(self.web_driver, 5).until( |
| 314 | + EC.visibility_of_element_located( |
| 315 | + (By.CSS_SELECTOR, '#deactivating-warning .messagelist .warning p') |
| 316 | + ) |
| 317 | + ) |
| 318 | + self.web_driver.find_element(by=By.CSS_SELECTOR, value='#warning-ack').click() |
| 319 | + delete_confirm = WebDriverWait(self.web_driver, 2).until( |
| 320 | + EC.visibility_of_element_located( |
| 321 | + (By.CSS_SELECTOR, 'form[method="post"] input[type="submit"]') |
| 322 | + ) |
| 323 | + ) |
| 324 | + delete_confirm.click() |
| 325 | + self.assertEqual(Device.objects.count(), 0) |
| 326 | + |
| 327 | + def test_force_delete_multiple_devices_with_deactivating_config(self): |
| 328 | + self._create_template(default=True) |
| 329 | + org = self._get_org() |
| 330 | + device1 = self._create_device(organization=org) |
| 331 | + config1 = self._create_config(device=device1) |
| 332 | + device2 = self._create_device( |
| 333 | + organization=org, name='test2', mac_address='22:22:22:22:22:22' |
| 334 | + ) |
| 335 | + config2 = self._create_config(device=device2) |
| 336 | + self.assertEqual(device1.is_deactivated(), False) |
| 337 | + self.assertEqual(config1.status, 'modified') |
| 338 | + self.assertEqual(device2.is_deactivated(), False) |
| 339 | + self.assertEqual(config2.status, 'modified') |
| 340 | + |
| 341 | + self.login() |
| 342 | + self.open(reverse('admin:config_device_changelist')) |
| 343 | + self.web_driver.find_element(by=By.CSS_SELECTOR, value='#action-toggle').click() |
| 344 | + select = Select(self.web_driver.find_element(by=By.NAME, value='action')) |
| 345 | + select.select_by_value('delete_selected') |
| 346 | + self.web_driver.find_element( |
| 347 | + by=By.CSS_SELECTOR, value='button[type="submit"][name="index"][value="0"]' |
| 348 | + ).click() |
| 349 | + WebDriverWait(self.web_driver, 5).until( |
| 350 | + EC.visibility_of_element_located( |
| 351 | + (By.CSS_SELECTOR, '#deactivating-warning .messagelist .warning p') |
| 352 | + ) |
| 353 | + ) |
| 354 | + self.web_driver.find_element(by=By.CSS_SELECTOR, value='#warning-ack').click() |
| 355 | + delete_confirm = WebDriverWait(self.web_driver, 2).until( |
| 356 | + EC.visibility_of_element_located( |
| 357 | + (By.CSS_SELECTOR, 'form[method="post"] input[type="submit"]') |
| 358 | + ) |
| 359 | + ) |
| 360 | + delete_confirm.click() |
| 361 | + self.assertEqual(Device.objects.count(), 0) |
| 362 | + |
289 | 363 |
|
290 | 364 | class TestVpnAdmin(SeleniumBaseMixin, TestWireguardVpnMixin, StaticLiveServerTestCase):
|
291 | 365 | def test_vpn_edit(self):
|
|
0 commit comments