blob: f899ce886bcc3779e7613c301dc8ce7124a6238a [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 tests for issuelistcsv module."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import six
import unittest
from google.appengine.ext import testbed
import flask
from framework import permissions
from framework import sorting
from framework import xsrf
from services import service_manager
from testing import fake
from testing import testing_helpers
from features import hotlistissuescsv
class HotlistIssuesCsvTest(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_memcache_stub()
self.testbed.init_datastore_v3_stub()
self.services = service_manager.Services(
issue_star=fake.IssueStarService(),
config=fake.ConfigService(),
user=fake.UserService(),
issue=fake.IssueService(),
project=fake.ProjectService(),
cache_manager=fake.CacheManager(),
features=fake.FeaturesService())
self.servlet = hotlistissuescsv.HotlistIssuesCsv(services=self.services)
self.servlet.response = flask.Response()
self.user1 = self.services.user.TestAddUser('testuser@gmail.com', 111)
self.user2 = self.services.user.TestAddUser('testuser2@gmail.com', 222)
self.services.project.TestAddProject('project-name', project_id=1)
self.issue1 = fake.MakeTestIssue(
1, 1, 'issue_summary', 'New', 111, project_name='project-name')
self.services.issue.TestAddIssue(self.issue1)
self.issues = [self.issue1]
self.hotlist_item_fields = [
(issue.issue_id, rank, 111, 1205079300, '') for
rank, issue in enumerate(self.issues)]
self.hotlist = self.services.features.TestAddHotlist(
'MyHotlist', hotlist_id=123, owner_ids=[222], editor_ids=[111],
hotlist_item_fields=self.hotlist_item_fields)
self._MakeMR('/u/222/hotlists/MyHotlist')
sorting.InitializeArtValues(self.services)
def _MakeMR(self, path):
self.mr = testing_helpers.MakeMonorailRequest(
hotlist=self.hotlist, path=path, services=self.services)
self.mr.hotlist_id = self.hotlist.hotlist_id
self.mr.hotlist = self.hotlist
def testGatherPageData_AnonUsers(self):
"""Anonymous users cannot download the issue list."""
self.mr.auth.user_id = 0
self.assertRaises(permissions.PermissionException,
self.servlet.GatherPageData, self.mr)
def testGatherPageData_NoXSRF(self):
"""Users need a valid XSRF token to download the issue list."""
# Note no token query-string parameter is set.
self.mr.auth.user_id = self.user2.user_id
self.assertRaises(xsrf.TokenIncorrect,
self.servlet.GatherPageData, self.mr)
def testGatherPageData_BadXSRF(self):
"""Users need a valid XSRF token to download the issue list."""
for path in ('/u/222/hotlists/MyHotlist',
'/u/testuser2@gmail.com/hotlists/MyHotlist'):
token = 'bad'
self._MakeMR(path + '?token=%s' % six.ensure_str(token))
self.mr.auth.user_id = self.user2.user_id
self.assertRaises(xsrf.TokenIncorrect,
self.servlet.GatherPageData, self.mr)
def testGatherPageData_Normal(self):
"""Users can get the hotlist issue list."""
for path in ('/u/222/hotlists/MyHotlist',
'/u/testuser2@gmail.com/hotlists/MyHotlist'):
form_token_path = self.servlet._FormHandlerURL(path)
token = xsrf.GenerateToken(self.user1.user_id, form_token_path)
self._MakeMR(path + '?token=%s' % six.ensure_str(token))
self.mr.auth.email = self.user1.email
self.mr.auth.user_id = self.user1.user_id
self.servlet.GatherPageData(self.mr)