[Toaster] [PATCH 5/5] toaster-tests: migrate landing page tests to Selenium

Michael Wood michael.g.wood at intel.com
Thu Mar 31 08:12:40 PDT 2016


Yes that'd be great.

Michael

On 31/03/16 16:06, Smith, Elliot wrote:
> Sounds like a good idea to me. Do you want me to amend my branch to 
> start the ball rolling?
>
> Elliot
>
> On 31 March 2016 at 15:41, Michael Wood <michael.g.wood at intel.com 
> <mailto:michael.g.wood at intel.com>> wrote:
>
>     Hijacking this with a bit of an RFC, but as I'm looking at tests
>     at the moment, shall we start consolidating the tests in a single
>     directory?
>
>     I was thinking:
>
>     ├──bitbake/lib/toaster/tests
>     │   ├── browser
>     │   ├── views
>     │   ├── build
>     │   ├── api
>     │   ├── static
>     ...etc
>
>     usage ./manage.py test tests [or tests.views etc]
>
>     Michael
>
>
>     On 16/03/16 13:10, Elliot Smith wrote:
>
>         Signed-off-by: Elliot Smith <elliot.smith at intel.com
>         <mailto:elliot.smith at intel.com>>
>         ---
>           .../lib/toaster/tests_browser/test_landing_page.py | 108
>         +++++++++++++++++++++
>           bitbake/lib/toaster/toastergui/tests.py |  74 --------------
>           2 files changed, 108 insertions(+), 74 deletions(-)
>           create mode 100644
>         bitbake/lib/toaster/tests_browser/test_landing_page.py
>
>         diff --git
>         a/bitbake/lib/toaster/tests_browser/test_landing_page.py
>         b/bitbake/lib/toaster/tests_browser/test_landing_page.py
>         new file mode 100644
>         index 0000000..8343630
>         --- /dev/null
>         +++ b/bitbake/lib/toaster/tests_browser/test_landing_page.py
>         @@ -0,0 +1,108 @@
>         +#! /usr/bin/env python
>         +# ex:ts=4:sw=4:sts=4:et
>         +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
>         +#
>         +# BitBake Toaster Implementation
>         +#
>         +# Copyright (C) 2013-2016 Intel Corporation
>         +#
>         +# This program is free software; you can redistribute it
>         and/or modify
>         +# it under the terms of the GNU General Public License
>         version 2 as
>         +# published by the Free Software Foundation.
>         +#
>         +# This program is distributed in the hope that it will be useful,
>         +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>         +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>         +# GNU General Public License for more details.
>         +#
>         +# You should have received a copy of the GNU General Public
>         License along
>         +# with this program; if not, write to the Free Software
>         Foundation, Inc.,
>         +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>         +
>         +from django.core.urlresolvers import reverse
>         +from django.utils import timezone
>         +from toaster.tests_browser.selenium_helpers import
>         SeleniumTestCase
>         +
>         +from orm.models import 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_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'))
>         +
>         +        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)
>         +        self.assertFalse(self.CLI_BUILDS_PROJECT_NAME in content,
>         +                         'should not show builds for cli
>         project')
>         diff --git a/bitbake/lib/toaster/toastergui/tests.py
>         b/bitbake/lib/toaster/toastergui/tests.py
>         index 6975ac1..eebd1b7 100644
>         --- a/bitbake/lib/toaster/toastergui/tests.py
>         +++ b/bitbake/lib/toaster/toastergui/tests.py
>         @@ -493,80 +493,6 @@ class ViewTests(TestCase):
>                                           "Changed page on table %s
>         but first row is the "
>                                           "same as the previous page"
>         % name)
>           -class LandingPageTests(TestCase):
>         -    """ Tests for redirects on the landing page """
>         -    # disable bogus pylint message error:
>         -    # "Instance of 'WSGIRequest' has no 'url' member (no-member)"
>         -    # (see
>         https://github.com/landscapeio/pylint-django/issues/42)
>         -    # pylint: disable=E1103
>         -
>         -    LANDING_PAGE_TITLE = 'This is Toaster'
>         -
>         -    def setUp(self):
>         -        """ Add default project manually """
>         -        self.project = Project.objects.create_project('foo',
>         None)
>         -        self.project.is_default = True
>         -        self.project.save()
>         -
>         -    def test_only_default_project(self):
>         -        """
>         -        No projects except default
>         -        => get the landing page
>         -        """
>         -        response = self.client.get(reverse('landing'))
>         -        self.assertTrue(self.LANDING_PAGE_TITLE in
>         response.content)
>         -
>         -    def test_default_project_has_build(self):
>         -        """
>         -        Default project has a build, no other projects
>         -        => get the builds page
>         -        """
>         -        now = timezone.now()
>         -        build = Build.objects.create(project=self.project,
>         -                                     started_on=now,
>         -  completed_on=now)
>         -        build.save()
>         -
>         -        response = self.client.get(reverse('landing'))
>         -        self.assertEqual(response.status_code, 302,
>         -                         'response should be a redirect')
>         -        self.assertTrue('/builds' in response.url,
>         -                        'should redirect to builds')
>         -
>         -    def test_user_project_exists(self):
>         -        """
>         -        User has added a project (without builds)
>         -        => get the projects page
>         -        """
>         -        user_project = Project.objects.create_project('foo',
>         None)
>         -        user_project.save()
>         -
>         -        response = self.client.get(reverse('landing'))
>         -        self.assertEqual(response.status_code, 302,
>         -                         'response should be a redirect')
>         -        self.assertTrue('/projects' in response.url,
>         -                        'should redirect to projects')
>         -
>         -    def test_user_project_has_build(self):
>         -        """
>         -        User has added a project (with builds)
>         -        => get the builds page
>         -        """
>         -        user_project = Project.objects.create_project('foo',
>         None)
>         -        user_project.save()
>         -
>         -        now = timezone.now()
>         -        build = Build.objects.create(project=user_project,
>         -                                     started_on=now,
>         -  completed_on=now)
>         -        build.save()
>         -
>         -        response = self.client.get(reverse('landing'))
>         -        self.assertEqual(response.status_code, 302,
>         -                         'response should be a redirect')
>         -        self.assertTrue('/builds' in response.url,
>         -                        'should redirect to builds')
>         -
>           class BuildDashboardTests(TestCase):
>               """ Tests for the build dashboard /build/X """
>
>
>     -- 
>     _______________________________________________
>     toaster mailing list
>     toaster at yoctoproject.org <mailto:toaster at yoctoproject.org>
>     https://lists.yoctoproject.org/listinfo/toaster
>
>
>
>
> -- 
> Elliot Smith
> Software Engineer
> Intel Open Source Technology Centre
>
> ---------------------------------------------------------------------
> Intel Corporation (UK) Limited
> Registered No. 1134945 (England)
> Registered Office: Pipers Way, Swindon SN3 1RJ
> VAT No: 860 2173 47
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>



More information about the toaster mailing list