blob: 72e11484cdf22784fb3ddc69776ca4e50b85d55d [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from unittest import TestCase
from mock import patch
from ming.odm import ThreadLocalORMSession
from allura.tests import TestController
from allura.tests.decorators import with_tool
from allura import model as M
from forgeimporters.github import GitHubOAuthMixin
# important to be distinct from 'test' which ForgeTracker uses, so that
# the tests can run in parallel and not clobber each other
test_project_with_tracker = 'test2'
with_tracker = with_tool(test_project_with_tracker,
'tickets', 'spooky-issues', 'tickets')
class TestGitHubTrackerImportController(TestController, TestCase):
url = '/p/%s/admin/ext/import/github-tracker/' % test_project_with_tracker
@with_tracker
def test_index(self):
r = self.app.get(self.url)
self.assertIsNotNone(r.html.find(attrs=dict(name='gh_user_name')))
self.assertIsNotNone(r.html.find(attrs=dict(name='gh_project_name')))
self.assertIsNotNone(r.html.find(attrs=dict(name='mount_label')))
self.assertIsNotNone(r.html.find(attrs=dict(name='mount_point')))
@with_tracker
@patch('forgeimporters.base.import_tool')
def test_create(self, import_tool):
params = dict(
gh_user_name='spooky',
gh_project_name='mulder',
mount_point='issues',
mount_label='Issues')
r = self.app.post(self.url + 'create', params, status=302)
self.assertEqual(r.location, 'http://localhost/p/%s/admin/' %
test_project_with_tracker)
self.assertEqual(
u'Issues', import_tool.post.call_args[1]['mount_label'])
self.assertEqual(
u'issues', import_tool.post.call_args[1]['mount_point'])
self.assertEqual(
u'mulder', import_tool.post.call_args[1]['project_name'])
self.assertEqual(u'spooky', import_tool.post.call_args[1]['user_name'])
@with_tracker
@patch('forgeimporters.base.import_tool')
def test_create_limit(self, import_tool):
p = M.Project.query.get(shortname=test_project_with_tracker)
p.set_tool_data('GitHubTrackerImporter', pending=1)
ThreadLocalORMSession.flush_all()
params = dict(
gh_user_name='spooky',
gh_project_name='mulder',
mount_point='issues',
mount_label='Issues')
r = self.app.post(self.url + 'create', params, status=302).follow()
self.assertIn('Please wait and try again', r)
self.assertEqual(import_tool.post.call_count, 0)
@with_tracker
@patch.object(GitHubOAuthMixin, 'oauth_begin')
def test_oauth(self, oauth_begin):
self.app.get(self.url)
oauth_begin.assert_called_once()