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 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# BitBake Toaster UI tests implementation +# +# Copyright (C) 2023 Savoir-faire Linux Inc +# +# SPDX-License-Identifier: GPL-2.0-only + +import pytest +from django.urls import reverse +from selenium.webdriver.support.ui import Select +from tests.browser.selenium_helpers import SeleniumTestCase +from orm.models import BitbakeVersion, Project, Release +from selenium.webdriver.common.by import By + +class TestDeleteProject(SeleniumTestCase): + + def setUp(self): + bitbake, _ = BitbakeVersion.objects.get_or_create( + name="master", + giturl="git://master", + branch="master", + dirpath="master") + + self.release, _ = Release.objects.get_or_create( + name="master", + description="Yocto Project master", + branch_name="master", + helptext="latest", + bitbake_version=bitbake) + + Release.objects.get_or_create( + name="foo", + description="Yocto Project foo", + branch_name="foo", + helptext="latest", + bitbake_version=bitbake) + + @pytest.mark.django_db + def test_delete_project(self): + """ Test delete a project + - Check delete modal is visible + - Check delete modal has right text + - Confirm delete + - Check project is deleted + """ + project_name = "project_to_delete" + url = reverse('newproject') + self.get(url) + self.enter_text('#new-project-name', project_name) + select = Select(self.find('#projectversion')) + select.select_by_value(str(self.release.pk)) + self.click("#create-project-button") + # We should get redirected to the new project's page with the + # notification at the top + element = self.wait_until_visible('#project-created-notification') + self.assertTrue(project_name in element.text, + "New project name not in new project notification") + self.assertTrue(Project.objects.filter(name=project_name).count(), + "New project not found in database") + + # Delete project + delete_project_link = self.driver.find_element( + By.XPATH, '//a[@href="#delete-project-modal"]') + delete_project_link.click() + + # Check delete modal is visible + self.wait_until_visible('#delete-project-modal') + + # Check delete modal has right text + modal_header_text = self.find('#delete-project-modal .modal-header').text + self.assertTrue( + "Are you sure you want to delete this project?" in modal_header_text, + "Delete project modal header text is wrong") + + modal_body_text = self.find('#delete-project-modal .modal-body').text + self.assertTrue( + "Cancel its builds currently in progress" in modal_body_text, + "Modal body doesn't contain: Cancel its builds currently in progress") + self.assertTrue( + "Remove its configuration information" in modal_body_text, + "Modal body doesn't contain: Remove its configuration information") + self.assertTrue( + "Remove its imported layers" in modal_body_text, + "Modal body doesn't contain: Remove its imported layers") + self.assertTrue( + "Remove its custom images" in modal_body_text, + "Modal body doesn't contain: Remove its custom images") + self.assertTrue( + "Remove all its build information" in modal_body_text, + "Modal body doesn't contain: Remove all its build information") + + # Confirm delete + delete_btn = self.find('#delete-project-confirmed') + delete_btn.click() + + # Check project is deleted + self.wait_until_visible('#change-notification') + delete_notification = self.find('#change-notification-msg') + self.assertTrue("You have deleted 1 project:" in delete_notification.text) + self.assertTrue(project_name in delete_notification.text) + self.assertFalse(Project.objects.filter(name=project_name).exists(), + "Project not deleted from database") |