mirror of
https://git.yoctoproject.org/poky
synced 2026-02-20 08:29:42 +01:00
Added a new button on the base template to access a new template. Added a model register the information on the builds and generate access links Added a form to include the option to load specific files Added jquery and ajax functions to block screen and redirect to build page when import eventlogs is trigger Added a new button on landing page linked to import build page, and set min-height of buttons in landing page for uniformity Removed test assertion to check command line build in content, because new button contains text Updated toaster_eventreplay to use library Fix test in test_layerdetails_page Rebased from master This feature uses the value from the variable BB_DEFAULT_EVENTLOG to read the files created by bitbake Exclude listing of files that don't contain the allvariables definitions used to replay builds This part of the feature should be revisited. Over a long period of time, the BB_DEFAULT_EVENTLOG will exponentially increase the size of the log file and cause bottlenecks when importing. (Bitbake rev: ab96cafe03d8bab33c1de09602cc62bd6974f157) Signed-off-by: Marlon Rodriguez Garcia <marlon.rodriguez-garcia@savoirfairelinux.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
222 lines
8.9 KiB
Python
222 lines
8.9 KiB
Python
#! /usr/bin/env python3
|
|
#
|
|
# BitBake Toaster Implementation
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Copyright (C) 2013-2016 Intel Corporation
|
|
#
|
|
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
from tests.browser.selenium_helpers import SeleniumTestCase
|
|
from selenium.webdriver.common.by import By
|
|
|
|
from orm.models import Layer, Layer_Version, Project, Build
|
|
|
|
|
|
class TestLandingPage(SeleniumTestCase):
|
|
""" Tests for redirects on the landing page """
|
|
|
|
PROJECT_NAME = 'test project'
|
|
LANDING_PAGE_TITLE = 'This is Toaster'
|
|
CLI_BUILDS_PROJECT_NAME = 'command line builds'
|
|
|
|
def setUp(self):
|
|
""" Add default project manually """
|
|
self.project = Project.objects.create_project(
|
|
self.CLI_BUILDS_PROJECT_NAME,
|
|
None
|
|
)
|
|
self.project.is_default = True
|
|
self.project.save()
|
|
|
|
def test_icon_info_visible_and_clickable(self):
|
|
""" Test that the information icon is visible and clickable """
|
|
self.get(reverse('landing'))
|
|
info_sign = self.find('#toaster-version-info-sign')
|
|
|
|
# check that the info sign is visible
|
|
self.assertTrue(info_sign.is_displayed())
|
|
|
|
# check that the info sign is clickable
|
|
# and info modal is appearing when clicking on the info sign
|
|
info_sign.click() # click on the info sign make attribute 'aria-describedby' visible
|
|
info_model_id = info_sign.get_attribute('aria-describedby')
|
|
info_modal = self.find(f'#{info_model_id}')
|
|
self.assertTrue(info_modal.is_displayed())
|
|
self.assertTrue("Toaster version information" in info_modal.text)
|
|
|
|
def test_documentation_link_displayed(self):
|
|
""" Test that the documentation link is displayed """
|
|
self.get(reverse('landing'))
|
|
documentation_link = self.find('#navbar-docs > a')
|
|
|
|
# check that the documentation link is visible
|
|
self.assertTrue(documentation_link.is_displayed())
|
|
|
|
# check browser open new tab toaster manual when clicking on the documentation link
|
|
self.assertEqual(documentation_link.get_attribute('target'), '_blank')
|
|
self.assertEqual(
|
|
documentation_link.get_attribute('href'),
|
|
'http://docs.yoctoproject.org/toaster-manual/index.html#toaster-user-manual')
|
|
self.assertTrue("Documentation" in documentation_link.text)
|
|
|
|
def test_openembedded_jumbotron_link_visible_and_clickable(self):
|
|
""" Test OpenEmbedded link jumbotron is visible and clickable: """
|
|
self.get(reverse('landing'))
|
|
jumbotron = self.find('.jumbotron')
|
|
|
|
# check OpenEmbedded
|
|
openembedded = jumbotron.find_element(By.LINK_TEXT, 'OpenEmbedded')
|
|
self.assertTrue(openembedded.is_displayed())
|
|
openembedded.click()
|
|
self.assertTrue("openembedded.org" in self.driver.current_url)
|
|
|
|
def test_bitbake_jumbotron_link_visible_and_clickable(self):
|
|
""" Test BitBake link jumbotron is visible and clickable: """
|
|
self.get(reverse('landing'))
|
|
jumbotron = self.find('.jumbotron')
|
|
|
|
# check BitBake
|
|
bitbake = jumbotron.find_element(By.LINK_TEXT, 'BitBake')
|
|
self.assertTrue(bitbake.is_displayed())
|
|
bitbake.click()
|
|
self.assertTrue(
|
|
"docs.yoctoproject.org/bitbake.html" in self.driver.current_url)
|
|
|
|
def test_yoctoproject_jumbotron_link_visible_and_clickable(self):
|
|
""" Test Yocto Project link jumbotron is visible and clickable: """
|
|
self.get(reverse('landing'))
|
|
jumbotron = self.find('.jumbotron')
|
|
|
|
# check Yocto Project
|
|
yoctoproject = jumbotron.find_element(By.LINK_TEXT, 'Yocto Project')
|
|
self.assertTrue(yoctoproject.is_displayed())
|
|
yoctoproject.click()
|
|
self.assertTrue("yoctoproject.org" in self.driver.current_url)
|
|
|
|
def test_link_setup_using_toaster_visible_and_clickable(self):
|
|
""" Test big magenta button setting up and using toaster link in jumbotron
|
|
if visible and clickable
|
|
"""
|
|
self.get(reverse('landing'))
|
|
jumbotron = self.find('.jumbotron')
|
|
|
|
# check Big magenta button
|
|
big_magenta_button = jumbotron.find_element(By.LINK_TEXT,
|
|
'Toaster is ready to capture your command line builds'
|
|
)
|
|
self.assertTrue(big_magenta_button.is_displayed())
|
|
big_magenta_button.click()
|
|
self.assertTrue(
|
|
"docs.yoctoproject.org/toaster-manual/setup-and-use.html#setting-up-and-using-toaster" in self.driver.current_url)
|
|
|
|
def test_link_create_new_project_in_jumbotron_visible_and_clickable(self):
|
|
""" Test big blue button create new project jumbotron if visible and clickable """
|
|
# Create a layer and a layer version to make visible the big blue button
|
|
layer = Layer.objects.create(name='bar')
|
|
Layer_Version.objects.create(layer=layer)
|
|
|
|
self.get(reverse('landing'))
|
|
jumbotron = self.find('.jumbotron')
|
|
|
|
# check Big Blue button
|
|
big_blue_button = jumbotron.find_element(By.LINK_TEXT,
|
|
'Create your first Toaster project to run manage builds'
|
|
)
|
|
self.assertTrue(big_blue_button.is_displayed())
|
|
big_blue_button.click()
|
|
self.assertTrue("toastergui/newproject/" in self.driver.current_url)
|
|
|
|
def test_toaster_manual_link_visible_and_clickable(self):
|
|
""" Test Read the Toaster manual link jumbotron is visible and clickable: """
|
|
self.get(reverse('landing'))
|
|
jumbotron = self.find('.jumbotron')
|
|
|
|
# check Read the Toaster manual
|
|
toaster_manual = jumbotron.find_element(
|
|
By.LINK_TEXT, 'Read the Toaster manual')
|
|
self.assertTrue(toaster_manual.is_displayed())
|
|
toaster_manual.click()
|
|
self.assertTrue(
|
|
"https://docs.yoctoproject.org/toaster-manual/index.html#toaster-user-manual" in self.driver.current_url)
|
|
|
|
def test_contrib_to_toaster_link_visible_and_clickable(self):
|
|
""" Test Contribute to Toaster link jumbotron is visible and clickable: """
|
|
self.get(reverse('landing'))
|
|
jumbotron = self.find('.jumbotron')
|
|
|
|
# check Contribute to Toaster
|
|
contribute_to_toaster = jumbotron.find_element(
|
|
By.LINK_TEXT, 'Contribute to Toaster')
|
|
self.assertTrue(contribute_to_toaster.is_displayed())
|
|
contribute_to_toaster.click()
|
|
self.assertTrue(
|
|
"wiki.yoctoproject.org/wiki/contribute_to_toaster" in str(self.driver.current_url).lower())
|
|
|
|
def test_only_default_project(self):
|
|
"""
|
|
No projects except default
|
|
=> should see the landing page
|
|
"""
|
|
self.get(reverse('landing'))
|
|
self.assertTrue(self.LANDING_PAGE_TITLE in self.get_page_source())
|
|
|
|
def test_default_project_has_build(self):
|
|
"""
|
|
Default project has a build, no other projects
|
|
=> should see the builds page
|
|
"""
|
|
now = timezone.now()
|
|
build = Build.objects.create(project=self.project,
|
|
started_on=now,
|
|
completed_on=now)
|
|
build.save()
|
|
|
|
self.get(reverse('landing'))
|
|
|
|
elements = self.find_all('#allbuildstable')
|
|
self.assertEqual(len(elements), 1, 'should redirect to builds')
|
|
content = self.get_page_source()
|
|
self.assertFalse(self.PROJECT_NAME in content,
|
|
'should not show builds for project %s' % self.PROJECT_NAME)
|
|
self.assertTrue(self.CLI_BUILDS_PROJECT_NAME in content,
|
|
'should show builds for cli project')
|
|
|
|
def test_user_project_exists(self):
|
|
"""
|
|
User has added a project (without builds)
|
|
=> should see the projects page
|
|
"""
|
|
user_project = Project.objects.create_project('foo', None)
|
|
user_project.save()
|
|
|
|
self.get(reverse('landing'))
|
|
|
|
elements = self.find_all('#projectstable')
|
|
self.assertEqual(len(elements), 1, 'should redirect to projects')
|
|
|
|
def test_user_project_has_build(self):
|
|
"""
|
|
User has added a project (with builds), command line builds doesn't
|
|
=> should see the builds page
|
|
"""
|
|
user_project = Project.objects.create_project(self.PROJECT_NAME, None)
|
|
user_project.save()
|
|
|
|
now = timezone.now()
|
|
build = Build.objects.create(project=user_project,
|
|
started_on=now,
|
|
completed_on=now)
|
|
build.save()
|
|
|
|
self.get(reverse('landing'))
|
|
|
|
self.wait_until_visible("#latest-builds", poll=3)
|
|
elements = self.find_all('#allbuildstable')
|
|
self.assertEqual(len(elements), 1, 'should redirect to builds')
|
|
content = self.get_page_source()
|
|
self.assertTrue(self.PROJECT_NAME in content,
|
|
'should show builds for project %s' % self.PROJECT_NAME)
|