blob: 85c7124cd9ac3e2450f7375bb3ad743a30e54be0 [file] [log] [blame]
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 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.
r"""
Test utils methods
"""
import contextlib
import shutil
import tempfile
from trac.test import EnvironmentStub, Mock, MockPerm
from trac.ticket import Ticket, Milestone
from trac.web import Href, arg_list_to_args
from trac.wiki import WikiPage
from bhsearch.tests import unittest
from bhsearch.web_ui import BloodhoundSearchModule
BASE_PATH = "/main/"
class BaseBloodhoundSearchTest(unittest.TestCase):
def setUp(self, enabled=None, create_req=False, enable_security=False):
if not enabled:
enabled = ['trac.*', 'bhsearch.*']
if not enable_security:
disabled = ['bhsearch.security.*']
else:
disabled = []
self.env = EnvironmentStub(enable=enabled, disable=disabled)
self.env.path = tempfile.mkdtemp('bhsearch-tempenv')
self.env.config.set('bhsearch', 'silence_on_error', "False")
if create_req:
self.req = Mock(
perm=MockPerm(),
chrome={'logo': {}, 'links': {}},
href=Href("/main"),
base_path=BASE_PATH,
path_info='/bhsearch',
args=arg_list_to_args([]),
authname='x',
)
self.context = Mock(req=self.req)
# Test without multiproduct.
if hasattr(self.env, 'parent'):
del self.env.parent
def tearDown(self):
shutil.rmtree(self.env.path)
self.env.reset_db()
def print_result(self, result):
self.env.log.debug("Received result: %s", result.__dict__)
def create_dummy_ticket(self, summary = None):
if not summary:
summary = 'Hello World'
data = {'component': 'foo', 'milestone': 'bar'}
return self.create_ticket(summary, reporter='john', **data)
def create_ticket(self, summary, **kw):
ticket = Ticket(self.env)
ticket["summary"] = summary
for k, v in kw.items():
ticket[k] = v
return ticket
def insert_ticket(self, summary, **kw):
"""Helper for inserting a ticket into the database"""
ticket = self.create_ticket(summary, **kw)
ticket.insert()
return ticket
def create_wiki(self, name, text, **kw):
page = WikiPage(self.env, name)
page.text = text
for k, v in kw.items():
page[k] = v
return page
def insert_wiki(self, name, text = None, **kw):
text = text or "Dummy text"
page = self.create_wiki(name, text, **kw)
return page.save("dummy author", "dummy comment", "::1")
def insert_milestone(self, name, description = None):
milestone = self.create_milestone(
name = name,
description = description)
milestone.insert()
return milestone
def create_milestone(self, name, description = None):
milestone = Milestone(self.env)
milestone.name = name
if description is not None:
milestone.description = description
return milestone
def change_milestone(self, name_to_change, name=None, description=None):
milestone = Milestone(self.env, name_to_change)
if name is not None:
milestone.name = name
if description is not None:
milestone.description = description
milestone.update()
return milestone
def process_request(self):
# pylint: disable=unused-variable
url, data, x = BloodhoundSearchModule(self.env).process_request(
self.req)
self.env.log.debug("Received url: %s data: %s", url, data)
if data.has_key("results"):
self.env.log.debug("results: %s", data["results"].__dict__)
return data
@contextlib.contextmanager
def product(self, prefix=''):
has_parent = hasattr(self.env, 'parent')
has_product = hasattr(self.env, 'product')
if has_parent:
old_parent = self.env.parent
if has_product:
old_product = self.env.product
self.env.parent = self.env
self.env.product = Mock(prefix=prefix)
yield
if has_parent:
self.env.parent = old_parent
else:
del self.env.parent
if has_product:
self.env.product = old_product
else:
del self.env.product