1#! /usr/bin/env python3
2#
3# BitBake Toaster Implementation
4#
5# SPDX-License-Identifier: GPL-2.0-only
6#
7# Copyright (C) 2013-2016 Intel Corporation
8#
9
10from django.urls import reverse
11from django.utils import timezone
12from tests.browser.selenium_helpers import SeleniumTestCase
13
14from orm.models import Project, Build
15
16class TestLandingPage(SeleniumTestCase):
17    """ Tests for redirects on the landing page """
18
19    PROJECT_NAME = 'test project'
20    LANDING_PAGE_TITLE = 'This is Toaster'
21    CLI_BUILDS_PROJECT_NAME = 'command line builds'
22
23    def setUp(self):
24        """ Add default project manually """
25        self.project = Project.objects.create_project(
26            self.CLI_BUILDS_PROJECT_NAME,
27            None
28        )
29        self.project.is_default = True
30        self.project.save()
31
32    def test_only_default_project(self):
33        """
34        No projects except default
35        => should see the landing page
36        """
37        self.get(reverse('landing'))
38        self.assertTrue(self.LANDING_PAGE_TITLE in self.get_page_source())
39
40    def test_default_project_has_build(self):
41        """
42        Default project has a build, no other projects
43        => should see the builds page
44        """
45        now = timezone.now()
46        build = Build.objects.create(project=self.project,
47                                     started_on=now,
48                                     completed_on=now)
49        build.save()
50
51        self.get(reverse('landing'))
52
53        elements = self.find_all('#allbuildstable')
54        self.assertEqual(len(elements), 1, 'should redirect to builds')
55        content = self.get_page_source()
56        self.assertFalse(self.PROJECT_NAME in content,
57                         'should not show builds for project %s' % self.PROJECT_NAME)
58        self.assertTrue(self.CLI_BUILDS_PROJECT_NAME in content,
59                        'should show builds for cli project')
60
61    def test_user_project_exists(self):
62        """
63        User has added a project (without builds)
64        => should see the projects page
65        """
66        user_project = Project.objects.create_project('foo', None)
67        user_project.save()
68
69        self.get(reverse('landing'))
70
71        elements = self.find_all('#projectstable')
72        self.assertEqual(len(elements), 1, 'should redirect to projects')
73
74    def test_user_project_has_build(self):
75        """
76        User has added a project (with builds), command line builds doesn't
77        => should see the builds page
78        """
79        user_project = Project.objects.create_project(self.PROJECT_NAME, None)
80        user_project.save()
81
82        now = timezone.now()
83        build = Build.objects.create(project=user_project,
84                                     started_on=now,
85                                     completed_on=now)
86        build.save()
87
88        self.get(reverse('landing'))
89
90        elements = self.find_all('#allbuildstable')
91        self.assertEqual(len(elements), 1, 'should redirect to builds')
92        content = self.get_page_source()
93        self.assertTrue(self.PROJECT_NAME in content,
94                        'should show builds for project %s' % self.PROJECT_NAME)
95        self.assertFalse(self.CLI_BUILDS_PROJECT_NAME in content,
96                         'should not show builds for cli project')
97