toaster.lists.yoctoproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/3] Toaster: Write UI TestCase create new project
@ 2023-11-09 21:55 Alassane Yattara
  2023-11-09 21:55 ` [PATCH v2 2/3] Toaster: Test create new project without project name Alassane Yattara
  2023-11-09 21:55 ` [PATCH v2 3/3] Toaster: Write UI TestCase import new project using Alassane Yattara
  0 siblings, 2 replies; 5+ messages in thread
From: Alassane Yattara @ 2023-11-09 21:55 UTC (permalink / raw)
  To: toaster; +Cc: Alassane Yattara

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

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



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/3] Toaster: Test create new project without project name
  2023-11-09 21:55 [PATCH v2 1/3] Toaster: Write UI TestCase create new project Alassane Yattara
@ 2023-11-09 21:55 ` Alassane Yattara
  2023-11-09 21:55 ` [PATCH v2 3/3] Toaster: Write UI TestCase import new project using Alassane Yattara
  1 sibling, 0 replies; 5+ messages in thread
From: Alassane Yattara @ 2023-11-09 21:55 UTC (permalink / raw)
  To: toaster; +Cc: Alassane Yattara

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

diff --git a/lib/toaster/tests/functional/test_create_new_project.py b/lib/toaster/tests/functional/test_create_new_project.py
index 81355eaf..f33eb16d 100644
--- a/lib/toaster/tests/functional/test_create_new_project.py
+++ b/lib/toaster/tests/functional/test_create_new_project.py
@@ -132,3 +132,20 @@ class TestCreateNewProject(SeleniumFunctionalTestCase):
             release_title,
             True,
         )
+
+    def test_create_new_project_without_name(self):
+        """ Test create new project without project name """
+        self.get(reverse('newproject'))
+
+        select = Select(self.find('#projectversion'))
+        select.select_by_value(str(3))
+
+        # Check input name has required attribute
+        input_name = self.driver.find_element(By.ID, "new-project-name")
+        self.assertIsNotNone(input_name.get_attribute('required'),
+                        'Input name has not required attribute')
+
+        # Check create button is disabled
+        create_btn = self.driver.find_element(By.ID, "create-project-button")
+        self.assertIsNotNone(create_btn.get_attribute('disabled'),
+                        'Create button is not disabled')
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 3/3] Toaster: Write UI TestCase import new project using
  2023-11-09 21:55 [PATCH v2 1/3] Toaster: Write UI TestCase create new project Alassane Yattara
  2023-11-09 21:55 ` [PATCH v2 2/3] Toaster: Test create new project without project name Alassane Yattara
@ 2023-11-09 21:55 ` Alassane Yattara
  2023-11-09 22:06   ` [Toaster] " Richard Purdie
  1 sibling, 1 reply; 5+ messages in thread
From: Alassane Yattara @ 2023-11-09 21:55 UTC (permalink / raw)
  To: toaster; +Cc: Alassane Yattara

* Test import new project using:
  - Project Name: Any string
  - Project type: select (Import command line project)
  - Import existing project directory: Wrong Path
* Update copyright, remove "Inc"

Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
 .../functional/test_create_new_project.py     | 25 +++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/lib/toaster/tests/functional/test_create_new_project.py b/lib/toaster/tests/functional/test_create_new_project.py
index f33eb16d..a211d8b7 100644
--- a/lib/toaster/tests/functional/test_create_new_project.py
+++ b/lib/toaster/tests/functional/test_create_new_project.py
@@ -149,3 +149,28 @@ class TestCreateNewProject(SeleniumFunctionalTestCase):
         create_btn = self.driver.find_element(By.ID, "create-project-button")
         self.assertIsNotNone(create_btn.get_attribute('disabled'),
                         'Create button is not disabled')
+
+    def test_import_new_project(self):
+        """ Test import new project using:
+          - Project Name: Any string
+          - Project type: select (Import command line project)
+          - Import existing project directory: Wrong Path
+        """
+        project_name = 'projectimport'
+        self.get(reverse('newproject'))
+        self.driver.find_element(By.ID,
+                                 "new-project-name").send_keys(project_name)
+        # select import project
+        self.find('#type-import').click()
+
+        # set wrong path
+        wrong_path = '/wrongpath'
+        self.driver.find_element(By.ID,
+                                 "import-project-dir").send_keys(wrong_path)
+        self.driver.find_element(By.ID, "create-project-button").click()
+
+        # check error message
+        self.assertTrue(self.element_exists('.alert-danger'),
+                        'Allert message not shown')
+        self.assertTrue(wrong_path in self.find('.alert-danger').text,
+                        "Wrong path not in alert message")
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Toaster] [PATCH v2 3/3] Toaster: Write UI TestCase import new project using
  2023-11-09 21:55 ` [PATCH v2 3/3] Toaster: Write UI TestCase import new project using Alassane Yattara
@ 2023-11-09 22:06   ` Richard Purdie
  2023-11-09 22:18     ` Alassane Yattara
  0 siblings, 1 reply; 5+ messages in thread
From: Richard Purdie @ 2023-11-09 22:06 UTC (permalink / raw)
  To: Alassane Yattara, toaster

On Thu, 2023-11-09 at 22:55 +0100, Alassane Yattara wrote:
> * Test import new project using:
>   - Project Name: Any string
>   - Project type: select (Import command line project)
>   - Import existing project directory: Wrong Path
> * Update copyright, remove "Inc"

This patch series looks *much* better in general, thanks!

I was a little bit puzzled by this last line item about copyright?

Cheers,

Richard

> 
> Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
> ---
>  .../functional/test_create_new_project.py     | 25 +++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/lib/toaster/tests/functional/test_create_new_project.py b/lib/toaster/tests/functional/test_create_new_project.py
> index f33eb16d..a211d8b7 100644
> --- a/lib/toaster/tests/functional/test_create_new_project.py
> +++ b/lib/toaster/tests/functional/test_create_new_project.py
> @@ -149,3 +149,28 @@ class TestCreateNewProject(SeleniumFunctionalTestCase):
>          create_btn = self.driver.find_element(By.ID, "create-project-button")
>          self.assertIsNotNone(create_btn.get_attribute('disabled'),
>                          'Create button is not disabled')
> +
> +    def test_import_new_project(self):
> +        """ Test import new project using:
> +          - Project Name: Any string
> +          - Project type: select (Import command line project)
> +          - Import existing project directory: Wrong Path
> +        """
> +        project_name = 'projectimport'
> +        self.get(reverse('newproject'))
> +        self.driver.find_element(By.ID,
> +                                 "new-project-name").send_keys(project_name)
> +        # select import project
> +        self.find('#type-import').click()
> +
> +        # set wrong path
> +        wrong_path = '/wrongpath'
> +        self.driver.find_element(By.ID,
> +                                 "import-project-dir").send_keys(wrong_path)
> +        self.driver.find_element(By.ID, "create-project-button").click()
> +
> +        # check error message
> +        self.assertTrue(self.element_exists('.alert-danger'),
> +                        'Allert message not shown')
> +        self.assertTrue(wrong_path in self.find('.alert-danger').text,
> +                        "Wrong path not in alert message")
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#5976): https://lists.yoctoproject.org/g/toaster/message/5976
> Mute This Topic: https://lists.yoctoproject.org/mt/102495675/1686473
> Group Owner: toaster+owner@lists.yoctoproject.org
> Unsubscribe: https://lists.yoctoproject.org/g/toaster/unsub [richard.purdie@linuxfoundation.org]
> -=-=-=-=-=-=-=-=-=-=-=-
> 



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Toaster] [PATCH v2 3/3] Toaster: Write UI TestCase import new project using
  2023-11-09 22:06   ` [Toaster] " Richard Purdie
@ 2023-11-09 22:18     ` Alassane Yattara
  0 siblings, 0 replies; 5+ messages in thread
From: Alassane Yattara @ 2023-11-09 22:18 UTC (permalink / raw)
  To: Richard Purdie; +Cc: toaster

Richard,

Yes you right below line should be remove from commit msg.

> * Update copyright, remove "Inc"

----- Mail original -----
De: "Richard Purdie" <richard.purdie@linuxfoundation.org>
À: "Alassane Yattara" <alassane.yattara@savoirfairelinux.com>, "toaster" <toaster@lists.yoctoproject.org>
Envoyé: Jeudi 9 Novembre 2023 23:06:28
Objet: Re: [Toaster] [PATCH v2 3/3] Toaster: Write UI TestCase import new project using

On Thu, 2023-11-09 at 22:55 +0100, Alassane Yattara wrote:
> * Test import new project using:
>   - Project Name: Any string
>   - Project type: select (Import command line project)
>   - Import existing project directory: Wrong Path
> * Update copyright, remove "Inc"

This patch series looks *much* better in general, thanks!

I was a little bit puzzled by this last line item about copyright?

Cheers,

Richard

> 
> Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
> ---
>  .../functional/test_create_new_project.py     | 25 +++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/lib/toaster/tests/functional/test_create_new_project.py b/lib/toaster/tests/functional/test_create_new_project.py
> index f33eb16d..a211d8b7 100644
> --- a/lib/toaster/tests/functional/test_create_new_project.py
> +++ b/lib/toaster/tests/functional/test_create_new_project.py
> @@ -149,3 +149,28 @@ class TestCreateNewProject(SeleniumFunctionalTestCase):
>          create_btn = self.driver.find_element(By.ID, "create-project-button")
>          self.assertIsNotNone(create_btn.get_attribute('disabled'),
>                          'Create button is not disabled')
> +
> +    def test_import_new_project(self):
> +        """ Test import new project using:
> +          - Project Name: Any string
> +          - Project type: select (Import command line project)
> +          - Import existing project directory: Wrong Path
> +        """
> +        project_name = 'projectimport'
> +        self.get(reverse('newproject'))
> +        self.driver.find_element(By.ID,
> +                                 "new-project-name").send_keys(project_name)
> +        # select import project
> +        self.find('#type-import').click()
> +
> +        # set wrong path
> +        wrong_path = '/wrongpath'
> +        self.driver.find_element(By.ID,
> +                                 "import-project-dir").send_keys(wrong_path)
> +        self.driver.find_element(By.ID, "create-project-button").click()
> +
> +        # check error message
> +        self.assertTrue(self.element_exists('.alert-danger'),
> +                        'Allert message not shown')
> +        self.assertTrue(wrong_path in self.find('.alert-danger').text,
> +                        "Wrong path not in alert message")
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#5976): https://lists.yoctoproject.org/g/toaster/message/5976
> Mute This Topic: https://lists.yoctoproject.org/mt/102495675/1686473
> Group Owner: toaster+owner@lists.yoctoproject.org
> Unsubscribe: https://lists.yoctoproject.org/g/toaster/unsub [richard.purdie@linuxfoundation.org]
> -=-=-=-=-=-=-=-=-=-=-=-
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-11-09 22:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-09 21:55 [PATCH v2 1/3] Toaster: Write UI TestCase create new project Alassane Yattara
2023-11-09 21:55 ` [PATCH v2 2/3] Toaster: Test create new project without project name Alassane Yattara
2023-11-09 21:55 ` [PATCH v2 3/3] Toaster: Write UI TestCase import new project using Alassane Yattara
2023-11-09 22:06   ` [Toaster] " Richard Purdie
2023-11-09 22:18     ` Alassane Yattara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).