#! /usr/bin/env python3
|
#
|
# BitBake Toaster Implementation
|
#
|
# Copyright (C) 2013-2016 Intel Corporation
|
#
|
# SPDX-License-Identifier: GPL-2.0-only
|
#
|
|
from django.urls import reverse
|
from tests.browser.selenium_helpers import SeleniumTestCase
|
|
from orm.models import BitbakeVersion, Release, Project, ProjectVariable
|
|
class TestProjectConfigsPage(SeleniumTestCase):
|
""" Test data at /project/X/builds is displayed correctly """
|
|
PROJECT_NAME = 'test project'
|
INVALID_PATH_START_TEXT = 'The directory path should either start with a /'
|
INVALID_PATH_CHAR_TEXT = 'The directory path cannot include spaces or ' \
|
'any of these characters'
|
|
def setUp(self):
|
bbv = BitbakeVersion.objects.create(name='bbv1', giturl='/tmp/',
|
branch='master', dirpath='')
|
release = Release.objects.create(name='release1',
|
bitbake_version=bbv)
|
self.project1 = Project.objects.create_project(name=self.PROJECT_NAME,
|
release=release)
|
self.project1.save()
|
|
|
def test_no_underscore_iamgefs_type(self):
|
"""
|
Should not accept IMAGEFS_TYPE with an underscore
|
"""
|
|
imagefs_type = "foo_bar"
|
|
ProjectVariable.objects.get_or_create(project = self.project1, name = "IMAGE_FSTYPES", value = "abcd ")
|
url = reverse('projectconf', args=(self.project1.id,));
|
self.get(url);
|
|
self.click('#change-image_fstypes-icon')
|
|
self.enter_text('#new-imagefs_types', imagefs_type)
|
|
element = self.wait_until_visible('#hintError-image-fs_type')
|
|
self.assertTrue(("A valid image type cannot include underscores" in element.text),
|
"Did not find underscore error message")
|
|
|
def test_checkbox_verification(self):
|
"""
|
Should automatically check the checkbox if user enters value
|
text box, if value is there in the checkbox.
|
"""
|
imagefs_type = "btrfs"
|
|
ProjectVariable.objects.get_or_create(project = self.project1, name = "IMAGE_FSTYPES", value = "abcd ")
|
url = reverse('projectconf', args=(self.project1.id,));
|
self.get(url);
|
|
self.click('#change-image_fstypes-icon')
|
|
self.enter_text('#new-imagefs_types', imagefs_type)
|
|
checkboxes = self.driver.find_elements_by_xpath("//input[@class='fs-checkbox-fstypes']")
|
|
for checkbox in checkboxes:
|
if checkbox.get_attribute("value") == "btrfs":
|
self.assertEqual(checkbox.is_selected(), True)
|
|
|
def test_textbox_with_checkbox_verification(self):
|
"""
|
Should automatically add or remove value in textbox, if user checks
|
or unchecks checkboxes.
|
"""
|
|
ProjectVariable.objects.get_or_create(project = self.project1, name = "IMAGE_FSTYPES", value = "abcd ")
|
url = reverse('projectconf', args=(self.project1.id,));
|
self.get(url);
|
|
self.click('#change-image_fstypes-icon')
|
|
self.wait_until_visible('#new-imagefs_types')
|
|
checkboxes_selector = '.fs-checkbox-fstypes'
|
|
self.wait_until_visible(checkboxes_selector)
|
checkboxes = self.find_all(checkboxes_selector)
|
|
for checkbox in checkboxes:
|
if checkbox.get_attribute("value") == "cpio":
|
checkbox.click()
|
element = self.driver.find_element_by_id('new-imagefs_types')
|
|
self.wait_until_visible('#new-imagefs_types')
|
|
self.assertTrue(("cpio" in element.get_attribute('value'),
|
"Imagefs not added into the textbox"))
|
checkbox.click()
|
self.assertTrue(("cpio" not in element.text),
|
"Image still present in the textbox")
|
|
def test_set_download_dir(self):
|
"""
|
Validate the allowed and disallowed types in the directory field for
|
DL_DIR
|
"""
|
|
ProjectVariable.objects.get_or_create(project=self.project1,
|
name='DL_DIR')
|
url = reverse('projectconf', args=(self.project1.id,))
|
self.get(url)
|
|
# activate the input to edit download dir
|
self.click('#change-dl_dir-icon')
|
self.wait_until_visible('#new-dl_dir')
|
|
# downloads dir path doesn't start with / or ${...}
|
self.enter_text('#new-dl_dir', 'home/foo')
|
element = self.wait_until_visible('#hintError-initialChar-dl_dir')
|
|
msg = 'downloads directory path starts with invalid character but ' \
|
'treated as valid'
|
self.assertTrue((self.INVALID_PATH_START_TEXT in element.text), msg)
|
|
# downloads dir path has a space
|
self.driver.find_element_by_id('new-dl_dir').clear()
|
self.enter_text('#new-dl_dir', '/foo/bar a')
|
|
element = self.wait_until_visible('#hintError-dl_dir')
|
msg = 'downloads directory path characters invalid but treated as valid'
|
self.assertTrue((self.INVALID_PATH_CHAR_TEXT in element.text), msg)
|
|
# downloads dir path starts with ${...} but has a space
|
self.driver.find_element_by_id('new-dl_dir').clear()
|
self.enter_text('#new-dl_dir', '${TOPDIR}/down foo')
|
|
element = self.wait_until_visible('#hintError-dl_dir')
|
msg = 'downloads directory path characters invalid but treated as valid'
|
self.assertTrue((self.INVALID_PATH_CHAR_TEXT in element.text), msg)
|
|
# downloads dir path starts with /
|
self.driver.find_element_by_id('new-dl_dir').clear()
|
self.enter_text('#new-dl_dir', '/bar/foo')
|
|
hidden_element = self.driver.find_element_by_id('hintError-dl_dir')
|
self.assertEqual(hidden_element.is_displayed(), False,
|
'downloads directory path valid but treated as invalid')
|
|
# downloads dir path starts with ${...}
|
self.driver.find_element_by_id('new-dl_dir').clear()
|
self.enter_text('#new-dl_dir', '${TOPDIR}/down')
|
|
hidden_element = self.driver.find_element_by_id('hintError-dl_dir')
|
self.assertEqual(hidden_element.is_displayed(), False,
|
'downloads directory path valid but treated as invalid')
|
|
def test_set_sstate_dir(self):
|
"""
|
Validate the allowed and disallowed types in the directory field for
|
SSTATE_DIR
|
"""
|
|
ProjectVariable.objects.get_or_create(project=self.project1,
|
name='SSTATE_DIR')
|
url = reverse('projectconf', args=(self.project1.id,))
|
self.get(url)
|
|
self.click('#change-sstate_dir-icon')
|
|
self.wait_until_visible('#new-sstate_dir')
|
|
# path doesn't start with / or ${...}
|
self.enter_text('#new-sstate_dir', 'home/foo')
|
element = self.wait_until_visible('#hintError-initialChar-sstate_dir')
|
|
msg = 'sstate directory path starts with invalid character but ' \
|
'treated as valid'
|
self.assertTrue((self.INVALID_PATH_START_TEXT in element.text), msg)
|
|
# path has a space
|
self.driver.find_element_by_id('new-sstate_dir').clear()
|
self.enter_text('#new-sstate_dir', '/foo/bar a')
|
|
element = self.wait_until_visible('#hintError-sstate_dir')
|
msg = 'sstate directory path characters invalid but treated as valid'
|
self.assertTrue((self.INVALID_PATH_CHAR_TEXT in element.text), msg)
|
|
# path starts with ${...} but has a space
|
self.driver.find_element_by_id('new-sstate_dir').clear()
|
self.enter_text('#new-sstate_dir', '${TOPDIR}/down foo')
|
|
element = self.wait_until_visible('#hintError-sstate_dir')
|
msg = 'sstate directory path characters invalid but treated as valid'
|
self.assertTrue((self.INVALID_PATH_CHAR_TEXT in element.text), msg)
|
|
# path starts with /
|
self.driver.find_element_by_id('new-sstate_dir').clear()
|
self.enter_text('#new-sstate_dir', '/bar/foo')
|
|
hidden_element = self.driver.find_element_by_id('hintError-sstate_dir')
|
self.assertEqual(hidden_element.is_displayed(), False,
|
'sstate directory path valid but treated as invalid')
|
|
# paths starts with ${...}
|
self.driver.find_element_by_id('new-sstate_dir').clear()
|
self.enter_text('#new-sstate_dir', '${TOPDIR}/down')
|
|
hidden_element = self.driver.find_element_by_id('hintError-sstate_dir')
|
self.assertEqual(hidden_element.is_displayed(), False,
|
'sstate directory path valid but treated as invalid')
|