diff options
| author | Alassane Yattara <alassane.yattara@savoirfairelinux.com> | 2023-11-10 15:11:08 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-11-16 16:52:19 +0000 |
| commit | cdecc1f6056a9f4ff15c6af91c15262172d04b57 (patch) | |
| tree | 4c26598eac83e82e20eba2eab3507f139bfc1f91 /bitbake/lib | |
| parent | 22960747ea39506be2a368681df53c9f38df9c8d (diff) | |
| download | poky-cdecc1f6056a9f4ff15c6af91c15262172d04b57.tar.gz | |
bitbake: toaster/tests: Add UI TestCase for deleting project
Test delete project:
- Check delete modal is visible
- Check delete modal has right text
- Confirm delete
- Check project is deleted
(Bitbake rev: 669b270b6839dbf8f2daaa20ad809b309957edfd)
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
| -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") | ||
