diff options
Diffstat (limited to 'bitbake/lib/toaster/tests/browser/test_delete_project.py')
-rw-r--r-- | bitbake/lib/toaster/tests/browser/test_delete_project.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/bitbake/lib/toaster/tests/browser/test_delete_project.py b/bitbake/lib/toaster/tests/browser/test_delete_project.py new file mode 100644 index 0000000000..1941777ccc --- /dev/null +++ b/bitbake/lib/toaster/tests/browser/test_delete_project.py | |||
@@ -0,0 +1,103 @@ | |||
1 | #!/usr/bin/env python3 | ||
2 | # -*- coding: utf-8 -*- | ||
3 | # BitBake Toaster UI tests implementation | ||
4 | # | ||
5 | # Copyright (C) 2023 Savoir-faire Linux Inc | ||
6 | # | ||
7 | # SPDX-License-Identifier: GPL-2.0-only | ||
8 | |||
9 | import pytest | ||
10 | from django.urls import reverse | ||
11 | from selenium.webdriver.support.ui import Select | ||
12 | from tests.browser.selenium_helpers import SeleniumTestCase | ||
13 | from orm.models import BitbakeVersion, Project, Release | ||
14 | from selenium.webdriver.common.by import By | ||
15 | |||
16 | class TestDeleteProject(SeleniumTestCase): | ||
17 | |||
18 | def setUp(self): | ||
19 | bitbake, _ = BitbakeVersion.objects.get_or_create( | ||
20 | name="master", | ||
21 | giturl="git://master", | ||
22 | branch="master", | ||
23 | dirpath="master") | ||
24 | |||
25 | self.release, _ = Release.objects.get_or_create( | ||
26 | name="master", | ||
27 | description="Yocto Project master", | ||
28 | branch_name="master", | ||
29 | helptext="latest", | ||
30 | bitbake_version=bitbake) | ||
31 | |||
32 | Release.objects.get_or_create( | ||
33 | name="foo", | ||
34 | description="Yocto Project foo", | ||
35 | branch_name="foo", | ||
36 | helptext="latest", | ||
37 | bitbake_version=bitbake) | ||
38 | |||
39 | @pytest.mark.django_db | ||
40 | def test_delete_project(self): | ||
41 | """ Test delete a project | ||
42 | - Check delete modal is visible | ||
43 | - Check delete modal has right text | ||
44 | - Confirm delete | ||
45 | - Check project is deleted | ||
46 | """ | ||
47 | project_name = "project_to_delete" | ||
48 | url = reverse('newproject') | ||
49 | self.get(url) | ||
50 | self.enter_text('#new-project-name', project_name) | ||
51 | select = Select(self.find('#projectversion')) | ||
52 | select.select_by_value(str(self.release.pk)) | ||
53 | self.click("#create-project-button") | ||
54 | # We should get redirected to the new project's page with the | ||
55 | # notification at the top | ||
56 | element = self.wait_until_visible('#project-created-notification') | ||
57 | self.assertTrue(project_name in element.text, | ||
58 | "New project name not in new project notification") | ||
59 | self.assertTrue(Project.objects.filter(name=project_name).count(), | ||
60 | "New project not found in database") | ||
61 | |||
62 | # Delete project | ||
63 | delete_project_link = self.driver.find_element( | ||
64 | By.XPATH, '//a[@href="#delete-project-modal"]') | ||
65 | delete_project_link.click() | ||
66 | |||
67 | # Check delete modal is visible | ||
68 | self.wait_until_visible('#delete-project-modal') | ||
69 | |||
70 | # Check delete modal has right text | ||
71 | modal_header_text = self.find('#delete-project-modal .modal-header').text | ||
72 | self.assertTrue( | ||
73 | "Are you sure you want to delete this project?" in modal_header_text, | ||
74 | "Delete project modal header text is wrong") | ||
75 | |||
76 | modal_body_text = self.find('#delete-project-modal .modal-body').text | ||
77 | self.assertTrue( | ||
78 | "Cancel its builds currently in progress" in modal_body_text, | ||
79 | "Modal body doesn't contain: Cancel its builds currently in progress") | ||
80 | self.assertTrue( | ||
81 | "Remove its configuration information" in modal_body_text, | ||
82 | "Modal body doesn't contain: Remove its configuration information") | ||
83 | self.assertTrue( | ||
84 | "Remove its imported layers" in modal_body_text, | ||
85 | "Modal body doesn't contain: Remove its imported layers") | ||
86 | self.assertTrue( | ||
87 | "Remove its custom images" in modal_body_text, | ||
88 | "Modal body doesn't contain: Remove its custom images") | ||
89 | self.assertTrue( | ||
90 | "Remove all its build information" in modal_body_text, | ||
91 | "Modal body doesn't contain: Remove all its build information") | ||
92 | |||
93 | # Confirm delete | ||
94 | delete_btn = self.find('#delete-project-confirmed') | ||
95 | delete_btn.click() | ||
96 | |||
97 | # Check project is deleted | ||
98 | self.wait_until_visible('#change-notification') | ||
99 | delete_notification = self.find('#change-notification-msg') | ||
100 | self.assertTrue("You have deleted 1 project:" in delete_notification.text) | ||
101 | self.assertTrue(project_name in delete_notification.text) | ||
102 | self.assertFalse(Project.objects.filter(name=project_name).exists(), | ||
103 | "Project not deleted from database") | ||