1#! /usr/bin/env python3 2# 3# BitBake Toaster Implementation 4# 5# Copyright (C) 2013-2016 Intel Corporation 6# 7# SPDX-License-Identifier: GPL-2.0-only 8# 9 10from django.urls import reverse 11from tests.browser.selenium_helpers import SeleniumTestCase 12from selenium.webdriver.support.ui import Select 13from selenium.common.exceptions import InvalidElementStateException 14 15from orm.models import Project, Release, BitbakeVersion 16 17 18class TestNewProjectPage(SeleniumTestCase): 19 """ Test project data at /project/X/ is displayed correctly """ 20 21 def setUp(self): 22 bitbake, c = BitbakeVersion.objects.get_or_create( 23 name="master", 24 giturl="git://master", 25 branch="master", 26 dirpath="master") 27 28 release, c = Release.objects.get_or_create(name="msater", 29 description="master" 30 "release", 31 branch_name="master", 32 helptext="latest", 33 bitbake_version=bitbake) 34 35 self.release, c = Release.objects.get_or_create( 36 name="msater2", 37 description="master2" 38 "release2", 39 branch_name="master2", 40 helptext="latest2", 41 bitbake_version=bitbake) 42 43 def test_create_new_project(self): 44 """ Test creating a project """ 45 46 project_name = "masterproject" 47 48 url = reverse('newproject') 49 self.get(url) 50 51 self.enter_text('#new-project-name', project_name) 52 53 select = Select(self.find('#projectversion')) 54 select.select_by_value(str(self.release.pk)) 55 56 self.click("#create-project-button") 57 58 # We should get redirected to the new project's page with the 59 # notification at the top 60 element = self.wait_until_visible('#project-created-notification') 61 62 self.assertTrue(project_name in element.text, 63 "New project name not in new project notification") 64 65 self.assertTrue(Project.objects.filter(name=project_name).count(), 66 "New project not found in database") 67 68 def test_new_duplicates_project_name(self): 69 """ 70 Should not be able to create a new project whose name is the same 71 as an existing project 72 """ 73 74 project_name = "dupproject" 75 76 Project.objects.create_project(name=project_name, 77 release=self.release) 78 79 url = reverse('newproject') 80 self.get(url) 81 82 self.enter_text('#new-project-name', project_name) 83 84 select = Select(self.find('#projectversion')) 85 select.select_by_value(str(self.release.pk)) 86 87 element = self.wait_until_visible('#hint-error-project-name') 88 89 self.assertTrue(("Project names must be unique" in element.text), 90 "Did not find unique project name error message") 91 92 # Try and click it anyway, if it submits we'll have a new project in 93 # the db and assert then 94 try: 95 self.click("#create-project-button") 96 except InvalidElementStateException: 97 pass 98 99 self.assertTrue( 100 (Project.objects.filter(name=project_name).count() == 1), 101 "New project not found in database") 102