blob: 86d3606010003d3ca1f379ceec861199f1a57794 [file] [log] [blame]
# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for the Monorail SPA pages, as served by EZT."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import mock
import unittest
from framework import exceptions
from mrproto import project_pb2
from services import service_manager
from tracker import webcomponentspage
from testing import fake
from testing import testing_helpers
class WebComponentsPageTest(unittest.TestCase):
def setUp(self):
self.services = service_manager.Services(
user=fake.UserService(),
project=fake.ProjectService(),
features=fake.FeaturesService())
self.user = self.services.user.TestAddUser('user@example.com', 111)
self.project = self.services.project.TestAddProject('proj', project_id=789)
self.hotlist = self.services.features.TestAddHotlist(
'HotlistName', summary='summary', owner_ids=[111], hotlist_id=1236)
self.servlet = webcomponentspage.WebComponentsPage(services=self.services)
def testHotlistPage_OldUiUrl(self):
mr = testing_helpers.MakeMonorailRequest(
user_info={'user_id': 111},
path='/hotlists/1236',
services=self.services)
page_data = self.servlet.GatherPageData(mr)
self.assertEqual('/u/111/hotlists/HotlistName', page_data['old_ui_url'])
def testHotlistPage_OldUiUrl_People(self):
mr = testing_helpers.MakeMonorailRequest(
user_info={'user_id': 111},
path='/hotlists/1236/people',
services=self.services)
page_data = self.servlet.GatherPageData(mr)
self.assertEqual(
'/u/111/hotlists/HotlistName/people', page_data['old_ui_url'])
def testHotlistPage_OldUiUrl_Settings(self):
mr = testing_helpers.MakeMonorailRequest(
user_info={'user_id': 111},
path='/hotlists/1236/settings',
services=self.services)
page_data = self.servlet.GatherPageData(mr)
self.assertEqual(
'/u/111/hotlists/HotlistName/details', page_data['old_ui_url'])
class ProjectListPageTest(unittest.TestCase):
def setUp(self):
self.services = service_manager.Services(project=fake.ProjectService())
self.project_a = self.services.project.TestAddProject('a', project_id=1)
self.project_b = self.services.project.TestAddProject('b', project_id=2)
self.servlet = webcomponentspage.ProjectListPage(services=self.services)
@mock.patch('settings.domain_to_default_project', {})
def testMaybeRedirectToDomainDefaultProject_NoMatch(self):
"""No redirect if the user is not accessing via a configured domain."""
mr = testing_helpers.MakeMonorailRequest()
mr.request.host = 'example.com'
msg = self.servlet._MaybeRedirectToDomainDefaultProject(mr)
print('msg: ' + msg)
self.assertTrue(msg.startswith('No configured'))
@mock.patch('settings.domain_to_default_project', {'example.com': 'huh'})
def testMaybeRedirectToDomainDefaultProject_NoSuchProject(self):
"""No redirect if the configured project does not exist."""
mr = testing_helpers.MakeMonorailRequest()
mr.request.host = 'example.com'
print('host is %r' % mr.request.host)
msg = self.servlet._MaybeRedirectToDomainDefaultProject(mr)
print('msg: ' + msg)
self.assertTrue(msg.endswith('not found'))
@mock.patch('settings.domain_to_default_project', {'example.com': 'a'})
def testMaybeRedirectToDomainDefaultProject_CantView(self):
"""No redirect if the user can't view the configured project."""
self.project_a.access = project_pb2.ProjectAccess.MEMBERS_ONLY
mr = testing_helpers.MakeMonorailRequest()
mr.request.host = 'example.com'
msg = self.servlet._MaybeRedirectToDomainDefaultProject(mr)
print('msg: ' + msg)
self.assertTrue(msg.startswith('User cannot'))
@mock.patch('settings.domain_to_default_project', {'example.com': 'a'})
def testMaybeRedirectToDomainDefaultProject_Redirect(self):
"""We redirect if there's a configured project that the user can view."""
mr = testing_helpers.MakeMonorailRequest()
mr.request.host = 'example.com'
self.servlet.redirect = mock.Mock()
with self.assertRaises(exceptions.RedirectException) as e:
self.servlet._MaybeRedirectToDomainDefaultProject(mr)
self.assertIn('/p/a', str(e.exception))