blob: 44c3338af4d0c14e2af50f8ebff26579e4078ed0 [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"""Project dashboard for Apache(TM) Bloodhound
In this file you'll find part of the tests written to ensure that
dashboard web module works as expected.
Only the tests requiring minimal setup effort are included below.
This means that the environment used to run these tests contains the
barely minimal information included in an environment (i.e. only the
data specified by `trac.db_default.get_data`.).
Once the tests are started all built-in components (except
trac.versioncontrol.* ) as well as widget system and extensions
are loaded. Besides the following values are (auto-magically)
made available in the global namespace (i.e. provided that
the test name be written like `|widget_name: Descriptive message`):
- __tester__ An instance of `unittest.TestCase` representing the
test case for the statement under test. Useful
when specific assertions (e.g. `assertEquals`)
are needed.
- req A dummy request object setup for anonymous access.
- auth_req A dummy request object setup like if user `murphy` was
accessing the site.
- env the Trac environment used as a stub for testing purposes.
This object is an instance of
`bhdashboard.tests.EnvironmentStub`.
- ticket_data A set of tickets used for testing purposes.
"""
#------------------------------------------------------
# Test artifacts
#------------------------------------------------------
from bhdashboard.tests import trac_version, trac_tags
def test_suite():
from doctest import NORMALIZE_WHITESPACE, ELLIPSIS, REPORT_UDIFF
from dutest import MultiTestLoader
from unittest import defaultTestLoader
from bhdashboard.tests import DocTestTracLoader, ticket_data
magic_vars = dict(ticket_data=ticket_data)
if trac_version < (0, 13): # FIXME: Should it be (0, 12) ?
kwargs = {'enable': ['trac.[a-uw-z]*', 'tracrpc.*', 'bhdashboard.*']}
else:
kwargs = {
'enable': ['trac.*', 'tracrpc.*', 'bhdashboard.*'],
'disable': ['trac.versioncontrol.*']
}
l = MultiTestLoader(
[defaultTestLoader, \
DocTestTracLoader(extraglobs=magic_vars, \
default_data=True, \
optionflags=ELLIPSIS | REPORT_UDIFF | \
NORMALIZE_WHITESPACE, \
**kwargs) \
])
import sys
return l.loadTestsFromModule(sys.modules[__name__])
#------------------------------------------------------
# Helper functions
#------------------------------------------------------
from datetime import datetime, time, date
from itertools import izip
from pprint import pprint
from bhdashboard.tests import clear_perm_cache
def prepare_ticket_workflow(tcktrpc, ticket_data, auth_req):
r"""Set ticket status considering the actions defined in standard
ticket workflow. Needed for TracRpc>=1.0.6
"""
from time import sleep
TICKET_ACTIONS = {'accepted': 'accept', 'closed' : 'resolve',
'assigned': 'reassign'}
sleep(1)
for idx, (_, __, td) in enumerate(ticket_data) :
action = TICKET_ACTIONS.get(td.get('status'))
if action is not None :
aux_attrs = {'action' : action}
aux_attrs.update(td)
tcktrpc.update(auth_req, idx + 1, "", aux_attrs)
sleep(1)
for idx, (_, __, td) in enumerate(ticket_data) :
tcktrpc.update(auth_req, idx + 1, "", td)
from bhdashboard.web_ui import DashboardModule
__test__ = {
'Initialization: Report widgets' : r"""
""",
'Rendering templates' : r"""
>>> dbm = DashboardModule(env)
>>> from trac.mimeview.api import Context
>>> context = Context.from_request(auth_req)
#FIXME: This won't work. Missing schema
>>> pprint(dbm.expand_widget_data(context))
[{'content': <genshi.core.Stream object at ...>,
'title': <Element "a">}]
""",
}