diff mbox series

[v3,1/3] Toaster: Write UI TestCase create new project

Message ID 20231109221517.110357-1-alassane.yattara@savoirfairelinux.com
State Accepted, archived
Commit 8502ed9ce3e04e5e0f913a8af60828ac0cefa110
Headers show
Series [v3,1/3] Toaster: Write UI TestCase create new project | expand

Commit Message

Alassane Yattara Nov. 9, 2023, 10:15 p.m. UTC
Test create new project using:
- Project Name: Any string
- Release: Master/Kirkstone/Dunfell/Local
- Merge Toaster settings: False/True

Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
 .../functional/test_create_new_project.py     | 134 ++++++++++++++++++
 1 file changed, 134 insertions(+)
 create mode 100644 lib/toaster/tests/functional/test_create_new_project.py

Comments

Alexandre Belloni Nov. 10, 2023, 8:09 a.m. UTC | #1
Hello Alassane,

On 09/11/2023 23:15:15+0100, Alassane Yattara wrote:
> Test create new project using:
> - Project Name: Any string
> - Release: Master/Kirkstone/Dunfell/Local
> - Merge Toaster settings: False/True
> 
> Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
> ---

Please include a changelog here. At least, explain why you are sending
multiple versions of the series on the same day, this would make the
maintainers job easier.

Thanks!

>  .../functional/test_create_new_project.py     | 134 ++++++++++++++++++
>  1 file changed, 134 insertions(+)
>  create mode 100644 lib/toaster/tests/functional/test_create_new_project.py
> 
> diff --git a/lib/toaster/tests/functional/test_create_new_project.py b/lib/toaster/tests/functional/test_create_new_project.py
> new file mode 100644
> index 00000000..81355eaf
> --- /dev/null
> +++ b/lib/toaster/tests/functional/test_create_new_project.py
> @@ -0,0 +1,134 @@
> +#! /usr/bin/env python3 #
> +# BitBake Toaster UI tests implementation
> +#
> +# Copyright (C) 2023 Savoir-faire Linux
> +#
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +
> +import re
> +import pytest
> +from django.urls import reverse
> +from selenium.webdriver.support.ui import Select
> +from tests.functional.functional_helpers import SeleniumFunctionalTestCase
> +from orm.models import Project
> +from selenium.webdriver.common.by import By
> +
> +@pytest.mark.django_db
> +class TestCreateNewProject(SeleniumFunctionalTestCase):
> +
> +    def _create_test_new_project(
> +        self,
> +        project_name,
> +        release,
> +        release_title,
> +        merge_toaster_settings,
> +    ):
> +        """ Create/Test new project using:
> +          - Project Name: Any string
> +          - Release: Any string
> +          - Merge Toaster settings: True or False
> +        """
> +        self.get(reverse('newproject'))
> +        self.driver.find_element(By.ID,
> +                                 "new-project-name").send_keys(project_name)
> +
> +        select = Select(self.find('#projectversion'))
> +        select.select_by_value(release)
> +
> +        # check merge toaster settings
> +        checkbox = self.find('.checkbox-mergeattr')
> +        if merge_toaster_settings:
> +            if not checkbox.is_selected():
> +                checkbox.click()
> +        else:
> +            if checkbox.is_selected():
> +                checkbox.click()
> +
> +        self.driver.find_element(By.ID, "create-project-button").click()
> +
> +        element = self.wait_until_visible('#project-created-notification')
> +        self.assertTrue(
> +            self.element_exists('#project-created-notification'), 
> +            f"Project:{project_name} creation notification not shown"
> +        )
> +        self.assertTrue(
> +            project_name in element.text,
> +            f"New project name:{project_name} not in new project notification"
> +        )
> +        self.assertTrue(
> +            Project.objects.filter(name=project_name).count(), 
> +            f"New project:{project_name} not found in database"
> +        )
> +
> +        # check release
> +        self.assertTrue(re.search(
> +            release_title,
> +            self.driver.find_element(By.XPATH,
> +                                     "//span[@id='project-release-title']"
> +                                     ).text),
> +                        'The project release is not defined')
> +
> +    def test_create_new_project_master(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Yocto Project master (option value: 3)
> +          - Merge Toaster settings: False
> +        """
> +        release = '3'
> +        release_title = 'Yocto Project master'
> +        project_name = 'projectmaster'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            False,
> +        )
> +
> +    def test_create_new_project_kirkstone(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Yocto Project 4.0 "Kirkstone" (option value: 1)
> +          - Merge Toaster settings: True
> +        """
> +        release = '1'
> +        release_title = 'Yocto Project 4.0 "Kirkstone"'
> +        project_name = 'projectkirkstone'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            True,
> +        )
> +
> +    def test_create_new_project_dunfull(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Yocto Project 3.1 "Dunfell" (option value: 5)
> +          - Merge Toaster settings: False
> +        """
> +        release = '5'
> +        release_title = 'Yocto Project 3.1 "Dunfell"'
> +        project_name = 'projectdunfull'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            False,
> +        )
> +    
> +    def test_create_new_project_local(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Local Yocto Project (option value: 2)
> +          - Merge Toaster settings: True
> +        """
> +        release = '2'
> +        release_title = 'Local Yocto Project'
> +        project_name = 'projectlocal'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            True,
> +        )
> -- 
> 2.34.1
> 

> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#15487): https://lists.openembedded.org/g/bitbake-devel/message/15487
> Mute This Topic: https://lists.openembedded.org/mt/102496102/3617179
> Group Owner: bitbake-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/bitbake-devel/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Alassane Yattara Nov. 10, 2023, 1:34 p.m. UTC | #2
Hello Alexander,

There is no difference, that's same patch.
 
Sorry about duplicate, my commandeline '$git send-email' was block when sending the patch series,
I canceled the process, then try again, but the first patch 1/3 was already sent in first process.

Thanks!
Alassane.
----- Mail original -----
De: "Alexandre Belloni via lists.openembedded.org" <alexandre.belloni=bootlin.com@lists.openembedded.org>
À: "Alassane Yattara" <alassane.yattara@savoirfairelinux.com>
Cc: "bitbake-devel" <bitbake-devel@lists.openembedded.org>
Envoyé: Vendredi 10 Novembre 2023 09:09:43
Objet: Re: [bitbake-devel] [PATCH v3 1/3] Toaster: Write UI TestCase create new project

Hello Alassane,

On 09/11/2023 23:15:15+0100, Alassane Yattara wrote:
> Test create new project using:
> - Project Name: Any string
> - Release: Master/Kirkstone/Dunfell/Local
> - Merge Toaster settings: False/True
> 
> Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
> ---

Please include a changelog here. At least, explain why you are sending
multiple versions of the series on the same day, this would make the
maintainers job easier.

Thanks!

>  .../functional/test_create_new_project.py     | 134 ++++++++++++++++++
>  1 file changed, 134 insertions(+)
>  create mode 100644 lib/toaster/tests/functional/test_create_new_project.py
> 
> diff --git a/lib/toaster/tests/functional/test_create_new_project.py b/lib/toaster/tests/functional/test_create_new_project.py
> new file mode 100644
> index 00000000..81355eaf
> --- /dev/null
> +++ b/lib/toaster/tests/functional/test_create_new_project.py
> @@ -0,0 +1,134 @@
> +#! /usr/bin/env python3 #
> +# BitBake Toaster UI tests implementation
> +#
> +# Copyright (C) 2023 Savoir-faire Linux
> +#
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +
> +import re
> +import pytest
> +from django.urls import reverse
> +from selenium.webdriver.support.ui import Select
> +from tests.functional.functional_helpers import SeleniumFunctionalTestCase
> +from orm.models import Project
> +from selenium.webdriver.common.by import By
> +
> +@pytest.mark.django_db
> +class TestCreateNewProject(SeleniumFunctionalTestCase):
> +
> +    def _create_test_new_project(
> +        self,
> +        project_name,
> +        release,
> +        release_title,
> +        merge_toaster_settings,
> +    ):
> +        """ Create/Test new project using:
> +          - Project Name: Any string
> +          - Release: Any string
> +          - Merge Toaster settings: True or False
> +        """
> +        self.get(reverse('newproject'))
> +        self.driver.find_element(By.ID,
> +                                 "new-project-name").send_keys(project_name)
> +
> +        select = Select(self.find('#projectversion'))
> +        select.select_by_value(release)
> +
> +        # check merge toaster settings
> +        checkbox = self.find('.checkbox-mergeattr')
> +        if merge_toaster_settings:
> +            if not checkbox.is_selected():
> +                checkbox.click()
> +        else:
> +            if checkbox.is_selected():
> +                checkbox.click()
> +
> +        self.driver.find_element(By.ID, "create-project-button").click()
> +
> +        element = self.wait_until_visible('#project-created-notification')
> +        self.assertTrue(
> +            self.element_exists('#project-created-notification'), 
> +            f"Project:{project_name} creation notification not shown"
> +        )
> +        self.assertTrue(
> +            project_name in element.text,
> +            f"New project name:{project_name} not in new project notification"
> +        )
> +        self.assertTrue(
> +            Project.objects.filter(name=project_name).count(), 
> +            f"New project:{project_name} not found in database"
> +        )
> +
> +        # check release
> +        self.assertTrue(re.search(
> +            release_title,
> +            self.driver.find_element(By.XPATH,
> +                                     "//span[@id='project-release-title']"
> +                                     ).text),
> +                        'The project release is not defined')
> +
> +    def test_create_new_project_master(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Yocto Project master (option value: 3)
> +          - Merge Toaster settings: False
> +        """
> +        release = '3'
> +        release_title = 'Yocto Project master'
> +        project_name = 'projectmaster'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            False,
> +        )
> +
> +    def test_create_new_project_kirkstone(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Yocto Project 4.0 "Kirkstone" (option value: 1)
> +          - Merge Toaster settings: True
> +        """
> +        release = '1'
> +        release_title = 'Yocto Project 4.0 "Kirkstone"'
> +        project_name = 'projectkirkstone'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            True,
> +        )
> +
> +    def test_create_new_project_dunfull(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Yocto Project 3.1 "Dunfell" (option value: 5)
> +          - Merge Toaster settings: False
> +        """
> +        release = '5'
> +        release_title = 'Yocto Project 3.1 "Dunfell"'
> +        project_name = 'projectdunfull'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            False,
> +        )
> +    
> +    def test_create_new_project_local(self):
> +        """ Test create new project using:
> +          - Project Name: Any string
> +          - Release: Local Yocto Project (option value: 2)
> +          - Merge Toaster settings: True
> +        """
> +        release = '2'
> +        release_title = 'Local Yocto Project'
> +        project_name = 'projectlocal'
> +        self._create_test_new_project(
> +            project_name,
> +            release,
> +            release_title,
> +            True,
> +        )
> -- 
> 2.34.1
> 

> 
> 
>
diff mbox series

Patch

diff --git a/lib/toaster/tests/functional/test_create_new_project.py b/lib/toaster/tests/functional/test_create_new_project.py
new file mode 100644
index 00000000..81355eaf
--- /dev/null
+++ b/lib/toaster/tests/functional/test_create_new_project.py
@@ -0,0 +1,134 @@ 
+#! /usr/bin/env python3 #
+# BitBake Toaster UI tests implementation
+#
+# Copyright (C) 2023 Savoir-faire Linux
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import re
+import pytest
+from django.urls import reverse
+from selenium.webdriver.support.ui import Select
+from tests.functional.functional_helpers import SeleniumFunctionalTestCase
+from orm.models import Project
+from selenium.webdriver.common.by import By
+
+@pytest.mark.django_db
+class TestCreateNewProject(SeleniumFunctionalTestCase):
+
+    def _create_test_new_project(
+        self,
+        project_name,
+        release,
+        release_title,
+        merge_toaster_settings,
+    ):
+        """ Create/Test new project using:
+          - Project Name: Any string
+          - Release: Any string
+          - Merge Toaster settings: True or False
+        """
+        self.get(reverse('newproject'))
+        self.driver.find_element(By.ID,
+                                 "new-project-name").send_keys(project_name)
+
+        select = Select(self.find('#projectversion'))
+        select.select_by_value(release)
+
+        # check merge toaster settings
+        checkbox = self.find('.checkbox-mergeattr')
+        if merge_toaster_settings:
+            if not checkbox.is_selected():
+                checkbox.click()
+        else:
+            if checkbox.is_selected():
+                checkbox.click()
+
+        self.driver.find_element(By.ID, "create-project-button").click()
+
+        element = self.wait_until_visible('#project-created-notification')
+        self.assertTrue(
+            self.element_exists('#project-created-notification'), 
+            f"Project:{project_name} creation notification not shown"
+        )
+        self.assertTrue(
+            project_name in element.text,
+            f"New project name:{project_name} not in new project notification"
+        )
+        self.assertTrue(
+            Project.objects.filter(name=project_name).count(), 
+            f"New project:{project_name} not found in database"
+        )
+
+        # check release
+        self.assertTrue(re.search(
+            release_title,
+            self.driver.find_element(By.XPATH,
+                                     "//span[@id='project-release-title']"
+                                     ).text),
+                        'The project release is not defined')
+
+    def test_create_new_project_master(self):
+        """ Test create new project using:
+          - Project Name: Any string
+          - Release: Yocto Project master (option value: 3)
+          - Merge Toaster settings: False
+        """
+        release = '3'
+        release_title = 'Yocto Project master'
+        project_name = 'projectmaster'
+        self._create_test_new_project(
+            project_name,
+            release,
+            release_title,
+            False,
+        )
+
+    def test_create_new_project_kirkstone(self):
+        """ Test create new project using:
+          - Project Name: Any string
+          - Release: Yocto Project 4.0 "Kirkstone" (option value: 1)
+          - Merge Toaster settings: True
+        """
+        release = '1'
+        release_title = 'Yocto Project 4.0 "Kirkstone"'
+        project_name = 'projectkirkstone'
+        self._create_test_new_project(
+            project_name,
+            release,
+            release_title,
+            True,
+        )
+
+    def test_create_new_project_dunfull(self):
+        """ Test create new project using:
+          - Project Name: Any string
+          - Release: Yocto Project 3.1 "Dunfell" (option value: 5)
+          - Merge Toaster settings: False
+        """
+        release = '5'
+        release_title = 'Yocto Project 3.1 "Dunfell"'
+        project_name = 'projectdunfull'
+        self._create_test_new_project(
+            project_name,
+            release,
+            release_title,
+            False,
+        )
+    
+    def test_create_new_project_local(self):
+        """ Test create new project using:
+          - Project Name: Any string
+          - Release: Local Yocto Project (option value: 2)
+          - Merge Toaster settings: True
+        """
+        release = '2'
+        release_title = 'Local Yocto Project'
+        project_name = 'projectlocal'
+        self._create_test_new_project(
+            project_name,
+            release,
+            release_title,
+            True,
+        )