blob: 3229382be624926ece41c2b5a0a76af1e58b2129 [file] [log] [blame]
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit test for Hotlist creation servlet."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
try:
from mox3 import mox
except ImportError:
import mox
import unittest
import settings
from framework import permissions
from features import hotlistcreate
from mrproto import site_pb2
from services import service_manager
from testing import fake
from testing import testing_helpers
class HotlistCreateTest(unittest.TestCase):
"""Tests for the HotlistCreate servlet."""
def setUp(self):
self.cnxn = 'fake cnxn'
self.mr = testing_helpers.MakeMonorailRequest()
self.services = service_manager.Services(project=fake.ProjectService(),
user=fake.UserService(),
issue=fake.IssueService(),
features=fake.FeaturesService())
self.servlet = hotlistcreate.HotlistCreate(services=self.services)
self.mox = mox.Mox()
def tearDown(self):
self.mox.UnsetStubs()
self.mox.ResetAll()
def CheckAssertBasePermissions(
self, restriction, expect_admin_ok, expect_nonadmin_ok):
old_hotlist_creation_restriction = settings.hotlist_creation_restriction
settings.hotlist_creation_restriction = restriction
mr = testing_helpers.MakeMonorailRequest(
perms=permissions.GetPermissions(None, {}, None))
self.assertRaises(
permissions.PermissionException,
self.servlet.AssertBasePermission, mr)
mr = testing_helpers.MakeMonorailRequest()
if expect_admin_ok:
self.servlet.AssertBasePermission(mr)
else:
self.assertRaises(
permissions.PermissionException,
self.servlet.AssertBasePermission, mr)
mr = testing_helpers.MakeMonorailRequest(
perms=permissions.GetPermissions(mr.auth.user_pb, {111}, None))
if expect_nonadmin_ok:
self.servlet.AssertBasePermission(mr)
else:
self.assertRaises(
permissions.PermissionException,
self.servlet.AssertBasePermission, mr)
settings.hotlist_creation_restriction = old_hotlist_creation_restriction
def testAssertBasePermission(self):
self.CheckAssertBasePermissions(
site_pb2.UserTypeRestriction.ANYONE, True, True)
self.CheckAssertBasePermissions(
site_pb2.UserTypeRestriction.ADMIN_ONLY, True, False)
self.CheckAssertBasePermissions(
site_pb2.UserTypeRestriction.NO_ONE, False, False)
def testGatherPageData(self):
page_data = self.servlet.GatherPageData(self.mr)
self.assertEqual('st6', page_data['user_tab_mode'])
self.assertEqual('', page_data['initial_name'])
self.assertEqual('', page_data['initial_summary'])
self.assertEqual('', page_data['initial_description'])
self.assertEqual('', page_data['initial_editors'])
self.assertEqual('no', page_data['initial_privacy'])
def testProcessFormData(self):
self.servlet.services.user.TestAddUser('owner', 111)
self.mr.auth.user_id = 111
post_data = fake.PostData(hotlistname=['Hotlist'], summary=['summ'],
description=['hey'],
editors=[''], is_private=['yes'])
url = self.servlet.ProcessFormData(self.mr, post_data)
self.assertTrue('/u/111/hotlists/Hotlist' in url)
def testProcessFormData_OwnerInEditors(self):
self.servlet.services.user.TestAddUser('owner_editor', 222)
self.mr.auth.user_id = 222
self.mr.cnxn = 'fake cnxn'
post_data = fake.PostData(hotlistname=['Hotlist-owner-editor'],
summary=['summ'],
description=['hi'],
editors=['owner_editor'], is_private=['yes'])
url = self.servlet.ProcessFormData(self.mr, post_data)
self.assertTrue('/u/222/hotlists/Hotlist-owner-editor' in url)
hotlists_by_id = self.servlet.services.features.LookupHotlistIDs(
self.mr.cnxn, ['Hotlist-owner-editor'], [222])
self.assertTrue(('hotlist-owner-editor', 222) in hotlists_by_id)
hotlist_id = hotlists_by_id[('hotlist-owner-editor', 222)]
hotlist = self.servlet.services.features.GetHotlist(
self.mr.cnxn, hotlist_id, use_cache=False)
self.assertEqual(hotlist.owner_ids, [222])
self.assertEqual(hotlist.editor_ids, [])
def testProcessFormData_RejectTemplateInvalid(self):
mr = testing_helpers.MakeMonorailRequest()
# invalid hotlist name and nonexistent editor
post_data = fake.PostData(hotlistname=['123BadName'], summary=['summ'],
description=['hey'],
editors=['test@email.com'], is_private=['yes'])
self.mox.StubOutWithMock(self.servlet, 'PleaseCorrect')
self.servlet.PleaseCorrect(
mr, initial_name = '123BadName', initial_summary='summ',
initial_description='hey',
initial_editors='test@email.com', initial_privacy='yes')
self.mox.ReplayAll()
url = self.servlet.ProcessFormData(mr, post_data)
self.mox.VerifyAll()
self.assertEqual(mr.errors.hotlistname, 'Invalid hotlist name')
self.assertEqual(mr.errors.editors,
'One or more editor emails is not valid.')
self.assertIsNone(url)
def testProcessFormData_RejectTemplateMissing(self):
mr = testing_helpers.MakeMonorailRequest()
# missing name and summary
post_data = fake.PostData()
self.mox.StubOutWithMock(self.servlet, 'PleaseCorrect')
self.servlet.PleaseCorrect(mr, initial_name = None, initial_summary=None,
initial_description='',
initial_editors='', initial_privacy=None)
self.mox.ReplayAll()
url = self.servlet.ProcessFormData(mr, post_data)
self.mox.VerifyAll()
self.assertEqual(mr.errors.hotlistname, 'Missing hotlist name')
self.assertEqual(mr.errors.summary,'Missing hotlist summary')
self.assertIsNone(url)