示例#1
0
文件: chrome.py 项目: timgraham/trac
 def test_default_links(self):
     req = Request(abs_href=Href('http://example.org/trac.cgi'),
                   href=Href('/trac.cgi'),
                   base_path='/trac.cgi',
                   path_info='',
                   add_redirect_listener=lambda listener: None)
     links = Chrome(self.env).prepare_request(req)['links']
     self.assertEqual('/trac.cgi/wiki', links['start'][0]['href'])
     self.assertEqual('/trac.cgi/search', links['search'][0]['href'])
     self.assertEqual('/trac.cgi/wiki/TracGuide', links['help'][0]['href'])
     self.assertEqual('/trac.cgi/chrome/common/css/trac.css',
                      links['stylesheet'][0]['href'])
示例#2
0
文件: report.py 项目: timgraham/trac
 def setUp(self):
     self.env = EnvironmentStub(default_data=True)
     self.req = Mock(base_path='',
                     chrome={},
                     args={},
                     session={},
                     abs_href=Href('/'),
                     href=Href('/'),
                     locale='',
                     perm=MockPerm(),
                     authname=None,
                     tz=None)
     self.report_module = ReportModule(self.env)
示例#3
0
    def setUp(self):
        self.env = EnvironmentStub(enable=[AutoWikify])
        self.req = Mock(
            authname='anonymous', perm=MockPerm(), tz=None, args={},
            href=Href('/'), abs_href=Href('http://www.example.com/'))
        self.autowikify = AutoWikify(self.env)

        for name in (u'autowikify', u'あいうName', u'Nameあいう',
                     u'かきくけこ'):
            page = WikiPage(self.env, name)
            page.text = name
            page.save('admin', '', '::1')
        self.context = Context.from_request(self.req, WikiPage(self.env, name))
示例#4
0
 def _default_base_href(user=None, prefix=None, envname=None):
     if envname not in (self.bh_install_project, None):
         raise LookupError('Unknown environment ' + repr(envname))
     # TODO: Does not generate /login ? Should it ?
     parts = urllib2.urlparse.urlsplit(self.url)
     if not user or user == 'anonymous':
         global_href = Href('%s://%s/' % (parts[0], parts[1]))
     else:
         global_href = Href('%s://%s:%s@%s/' %
                            (parts[0], user, user, parts[1]))
     # FIXME : Check that prefix is None is correct
     return global_href if (prefix is None or prefix == GLOBAL_ENV) \
                        else Href(global_href('products', prefix))
示例#5
0
 def get_env_href(self, user=None, prefix=None, envname=None):
     """Default implementation just returning href object for global
     environment and failing if product prefix is specified.
     """
     if envname not in (self.bh_install_project, None):
         raise LookupError('Unknown environment ' + repr(envname))
     if prefix is not None:
         self._fail_no_mp_setup()
     parts = urllib2.urlparse.urlsplit(self.url)
     if not user or user == 'anonymous':
         return Href('%s://%s/' % (parts[0], parts[1]))
     else:
         return Href('%s://%s:%s@%s/' % (parts[0], user, user, parts[1]))
示例#6
0
    def setUp(self):
        _BaseTestCase.setUp(self)
        self.req = Mock(path_info='/wiki/ListTaggedPage',
                        args={},
                        authname='user',
                        perm=MockPerm(),
                        href=Href('/'),
                        abs_href=Href('http://example.org/trac/'),
                        chrome={},
                        session={},
                        locale='',
                        tz='')

        self.tag_twm = TagWikiMacros(self.env)
示例#7
0
    def test_nav_contributor_order(self):
        class TestNavigationContributor1(Component):
            implements(INavigationContributor)

            def get_active_navigation_item(self, req):
                return None

            def get_navigation_items(self, req):
                yield 'metanav', 'test1', 'Test 1'

        class TestNavigationContributor2(Component):
            implements(INavigationContributor)

            def get_active_navigation_item(self, req):
                return None

            def get_navigation_items(self, req):
                yield 'metanav', 'test2', 'Test 2'

        req = Request(abs_href=Href('http://example.org/trac.cgi'),
                      href=Href('/trac.cgi'),
                      base_path='/trac.cgi',
                      path_info='/',
                      add_redirect_listener=lambda listener: None)
        chrome = Chrome(self.env)

        # Test with both items set in the order option
        self.env.config.set('trac', 'metanav', 'test2, test1')
        items = chrome.prepare_request(req)['nav']['metanav']
        self.assertEqual('test2', items[0]['name'])
        self.assertEqual('test1', items[1]['name'])

        # Test with only test1 in the order options
        self.env.config.set('trac', 'metanav', 'test1')
        items = chrome.prepare_request(req)['nav']['metanav']
        self.assertEqual('test1', items[0]['name'])
        self.assertEqual('test2', items[1]['name'])

        # Test with only test2 in the order options
        self.env.config.set('trac', 'metanav', 'test2')
        items = chrome.prepare_request(req)['nav']['metanav']
        self.assertEqual('test2', items[0]['name'])
        self.assertEqual('test1', items[1]['name'])

        # Test with none in the order options (order corresponds to
        # registration order)
        self.env.config.set('trac', 'metanav', 'foo, bar')
        items = chrome.prepare_request(req)['nav']['metanav']
        self.assertEqual('test1', items[0]['name'])
        self.assertEqual('test2', items[1]['name'])
示例#8
0
 def setUp(self):
     """ Set up the testing environment. """
     self.env = EnvironmentStub(enable=[CodeExample])
     self.req = Mock(base_path='',
                     chrome={},
                     args={},
                     abs_href=Href('/'),
                     href=Href('/'),
                     session={},
                     perm=[],
                     authname=None,
                     tz=None,
                     locale='utf-8')
     self.context = Context.from_request(self.req)
示例#9
0
def wiki_setup(tc):
    tc.env = EnvironmentStub(default_data=True,
                             enable=['trac.*', 'tractags.*'])
    tc.env.path = tempfile.mkdtemp()
    tc.db_mgr = DatabaseManager(tc.env)
    tc.db = tc.env.get_db_cnx()

    cursor = tc.db.cursor()
    cursor.execute("DROP TABLE IF EXISTS tags")
    cursor.execute("DROP TABLE IF EXISTS tags_change")
    cursor.execute("DELETE FROM system WHERE name='tags_version'")
    cursor.execute("DELETE FROM permission WHERE action %s" % tc.db.like(),
                   ('TAGS_%', ))

    TagSetup(tc.env).upgrade_environment(tc.db)

    now = datetime.now(utc)
    wiki = WikiPage(tc.env)
    wiki.name = 'TestPage'
    wiki.text = '--'
    wiki.save('joe', 'TagsPluginTestPage', '::1', now)

    cursor = tc.db.cursor()
    # Populate table with initial test data.
    cursor.executemany(
        """
        INSERT INTO tags
               (tagspace, name, tag)
        VALUES (%s,%s,%s)
    """, [
            ('wiki', 'TestPage', '2ndtag'),
            ('wiki', 'TestPage', 'a.really?_\wild-thing'),
            ('wiki', 'TestPage', 'heavily-quoted'),
            ('wiki', 'TestPage', 'onetag'),
            ('wiki', 'TestPage', 'tagged'),
            ('wiki', 'TestPage', "single'quote"),
        ])

    req = Mock(href=Href('/'),
               abs_href=Href('http://www.example.com/'),
               authname='anonymous',
               perm=MockPerm(),
               tz=utc,
               args={},
               locale=locale_en)
    tc.env.href = req.href
    tc.env.abs_href = req.abs_href
    tc.context = Context.from_request(req)
    # Enable big diff output.
    tc.maxDiff = None
示例#10
0
 def test_nav_contributor(self):
     class TestNavigationContributor(Component):
         implements(INavigationContributor)
         def get_active_navigation_item(self, req):
             return None
         def get_navigation_items(self, req):
             yield 'metanav', 'test', 'Test'
     req = Request(abs_href=Href('http://example.org/trac.cgi'),
                   href=Href('/trac.cgi'), path_info='/', 
                   base_path='/trac.cgi',
                   add_redirect_listener=lambda listener: None)
     nav = Chrome(self.env).prepare_request(req)['nav']
     self.assertEqual({'name': 'test', 'label': 'Test', 'active': False},
                      nav['metanav'][0])
示例#11
0
    def __init__(self, default_data=False, enable=None):
        """Construct a new Environment stub object.

        :param default_data: If True, populate the database with some
                             defaults.
        :param enable: A list of component classes or name globs to
                       activate in the stub environment.
        """
        ComponentManager.__init__(self)
        Component.__init__(self)
        self.systeminfo = []

        import trac
        self.path = os.path.dirname(trac.__file__)
        if not os.path.isabs(self.path):
            self.path = os.path.join(os.getcwd(), self.path)

        # -- configuration
        self.config = Configuration(None)
        # We have to have a ticket-workflow config for ''lots'' of things to
        # work.  So insert the basic-workflow config here.  There may be a
        # better solution than this.
        load_workflow_config_snippet(self.config, 'basic-workflow.ini')
        self.config.set('logging', 'log_level', 'DEBUG')
        self.config.set('logging', 'log_type', 'stderr')
        if enable is not None:
            self.config.set('components', 'trac.*', 'disabled')
        for name_or_class in enable or ():
            config_key = self._component_name(name_or_class)
            self.config.set('components', config_key, 'enabled')

        # -- logging
        from trac.log import logger_handler_factory
        self.log, self._log_handler = logger_handler_factory('test')

        # -- database
        self.dburi = get_dburi()
        if self.dburi.startswith('sqlite'):
            self.config.set('trac', 'database', 'sqlite::memory:')
            self.db = InMemoryDatabase()

        if default_data:
            self.reset_db(default_data)

        from trac.web.href import Href
        self.href = Href('/trac.cgi')
        self.abs_href = Href('http://example.org/trac.cgi')

        self.known_users = []
        translation.activate(Locale and Locale('en', 'US'))
示例#12
0
    def _prepare_env(self):
        all_test_components = [
            formatter.HelloWorldMacro, formatter.DivHelloWorldMacro,
            formatter.TableHelloWorldMacro, formatter.DivCodeMacro,
            formatter.DivCodeElementMacro, formatter.DivCodeStreamMacro,
            formatter.NoneMacro, formatter.WikiProcessorSampleMacro,
            formatter.SampleResolver
        ]
        self.global_env = self._setup_test_env(
            enable=['trac.*', 'multiproduct.*'] + all_test_components)

        self._upgrade_mp(self.global_env)
        self._load_product_from_data(self.global_env, self.default_product)
        prefix = self.default_product
        if self.mpctx:
            prefix = self.mpctx.get('setup_product', prefix)
            if prefix and prefix != self.default_product:
                self._load_product_from_data(self.global_env, prefix)
        if prefix:
            self.env = ProductEnvironment(self.global_env, prefix
                                          or self.default_product)
        else:
            self.env = self.global_env

        self.env.path = ''
        config = self.env.config
        # -- intertrac support
        config.set('intertrac', 'trac.title', "Trac's Trac")
        config.set('intertrac', 'trac.url', "http://trac.edgewall.org")
        config.set('intertrac', 't', 'trac')
        config.set('intertrac', 'th.title', "Trac Hacks")
        config.set('intertrac', 'th.url', "http://trac-hacks.org")
        config.set('intertrac', 'th.compat', 'false')
        # -- safe schemes
        config.set(
            'wiki', 'safe_schemes', 'file,ftp,http,https,svn,svn+ssh,'
            'rfc-2396.compatible,rfc-2396+under_score')

        req = Mock(href=Href('/'),
                   abs_href=Href('http://www.example.com/'),
                   authname='anonymous',
                   perm=MockPerm(),
                   tz=utc,
                   args={},
                   locale=locale_en,
                   lc_time=locale_en)

        self.env.href = req.href
        self.env.abs_href = req.abs_href
示例#13
0
 def test_quoted_id_with_var(self):
     req = Mock(base_path='', chrome={}, args={}, session={},
                abs_href=Href('/'), href=Href('/'), locale='',
                perm=MockPerm(), authname=None, tz=None)
     db = self.env.get_read_db()
     name = """%s"`'%%%?"""
     sql = 'SELECT 1 AS %s, $USER AS user' % db.quote(name)
     rv = self.report_module.execute_paginated_report(req, 1, sql,
                                                      {'USER': '******'})
     self.assertEqual(5, len(rv), repr(rv))
     cols, results, num_items, missing_args, limit_offset = rv
     self.assertEqual([name, 'user'], cols)
     self.assertEqual([(1, 'joe')], results)
     self.assertEqual([], missing_args)
     self.assertEqual(None, limit_offset)
示例#14
0
 def test_empty_content(self):
     req = Mock(path_info='/wiki/ListTaggedPage',
                args={},
                authname='user',
                perm=PermissionCache(self.env, 'user'),
                href=Href('/'),
                abs_href='http://example.org/trac/',
                chrome={},
                session={},
                locale='',
                tz='')
     context = Mock(env=self.env, href=Href('/'), req=req)
     formatter = Mock(context=context, req=req)
     self.assertTrue('No resources found' in str(
         self.tag_twm.expand_macro(formatter, 'ListTagged', '')))
示例#15
0
    def test_navigation_item_customization(self):
        class TestNavigationContributor1(Component):
            implements(INavigationContributor)

            def get_active_navigation_item(self, req):
                return None

            def get_navigation_items(self, req):
                yield 'mainnav', 'test1', 'Test 1'

        class TestNavigationContributor2(Component):
            implements(INavigationContributor)

            def get_active_navigation_item(self, req):
                return None

            def get_navigation_items(self, req):
                yield 'mainnav', 'test2', 'Test 2'

        class TestNavigationContributor3(Component):
            implements(INavigationContributor)

            def get_active_navigation_item(self, req):
                return None

            def get_navigation_items(self, req):
                yield 'mainnav', 'test3', 'Test 3'

        req = Request(abs_href=Href('http://example.org/trac.cgi'),
                      href=Href('/trac.cgi'),
                      base_path='/trac.cgi',
                      path_info='/',
                      add_redirect_listener=lambda listener: None)
        self.env.config.set('mainnav', 'test2.href', 'testtwo')
        self.env.config.set('mainnav', 'test3.label', 'Test Three')
        self.env.config.set('mainnav', 'test3.href', 'testthree')

        chrome = Chrome(self.env)
        items = chrome.prepare_request(req)['nav']['mainnav']

        item = self._get_navigation_item(items, 'test1')
        self.assertEqual('Test 1', item['label'])
        item = self._get_navigation_item(items, 'test2')
        self.assertEqual(str(tag.a('Test 2', href='testtwo')),
                         str(item['label']))
        item = self._get_navigation_item(items, 'test3')
        self.assertEqual(str(tag.a('Test Three', href='testthree')),
                         str(item['label']))
示例#16
0
    def test_add_jquery_ui_timezone_list_has_z(self):
        chrome = Chrome(self.env)

        req = Request(href=Href('/trac.cgi'), lc_time='iso8601')
        chrome.add_jquery_ui(req)
        self.assertIn({
            'value': 'Z',
            'label': '+00:00'
        }, req.chrome['script_data']['jquery_ui']['timezone_list'])

        req = Request(href=Href('/trac.cgi'), lc_time=locale_en)
        chrome.add_jquery_ui(req)
        self.assertIn({
            'value': 'Z',
            'label': '+00:00'
        }, req.chrome['script_data']['jquery_ui']['timezone_list'])
示例#17
0
文件: admin.py 项目: hefloryd/bitten
    def test_process_edit_platform(self):
        BuildConfig(self.env,
                    name='foo',
                    label='Foo',
                    path='branches/foo',
                    active=True).insert()
        platform = TargetPlatform(self.env, config='foo', name='any')
        platform.insert()

        req = Mock(method='GET',
                   chrome={},
                   href=Href('/'),
                   perm=PermissionCache(self.env, 'joe'),
                   args={})

        provider = BuildConfigurationsAdminPageProvider(self.env)
        template_name, data = provider.render_admin_panel(
            req, 'bitten', 'configs', 'foo/%d' % platform.id)

        self.assertEqual('bitten_admin_configs.html', template_name)
        assert 'platform' in data
        platform = data['platform']
        self.assertEqual(
            {
                'id': 1,
                'exists': True,
                'name': 'any',
                'rules': [('', '')],
            }, platform)
示例#18
0
class TracForgeLoginModule(LoginModule):
    """Replacement for LoginModule to slave to another environment."""

    master_path = Option('tracforge', 'master_path', doc='Path to master Trac')

    master_env = property(lambda self: _open_environment(self.master_path))
    master_href = property(lambda self: Href(self.master_env.base_url))

    # INavigationContributor methods
    def get_active_navigation_item(self, req):
        return 'login'

    def get_navigation_items(self, req):
        if req.authname and req.authname != 'anonymous':
            yield ('metanav', 'login', 'logged in as %s' % req.authname)
            yield ('metanav', 'logout',
                   html.A('Logout', href=self.master_href.logout()))
        else:
            yield ('metanav', 'login',
                   html.A('Login', href=self.master_href.login()))

    # IRequestHandler methods
    def process_request(self, req):
        if req.path_info.startswith('/login'):
            if req.authname and req.authname != 'anonymous':
                # Already logged in, reconstruct last path
                req.redirect(req.href())
            else:
                # Safe, send to master
                req.redirect(self.master_href.login())
        raise TracError

    # Internal methods
    def _get_name_for_cookie(self, req, cookie):
        return LoginModule(self.master_env)._get_name_for_cookie(req, cookie)
示例#19
0
文件: admin.py 项目: hefloryd/bitten
    def test_process_add_config_cancel(self):
        redirected_to = []

        def redirect(url):
            redirected_to.append(url)
            raise RequestDone

        req = Mock(method='POST',
                   perm=PermissionCache(self.env, 'joe'),
                   abs_href=Href('http://example.org/'),
                   redirect=redirect,
                   args={
                       'cancel': '',
                       'name': 'bar',
                       'label': 'Bar'
                   })

        provider = BuildConfigurationsAdminPageProvider(self.env)
        try:
            provider.render_admin_panel(req, 'bitten', 'configs', '')
            self.fail('Expected RequestDone')

        except RequestDone:
            self.assertEqual('http://example.org/admin/bitten/configs',
                             redirected_to[0])
            configs = list(BuildConfig.select(self.env, include_inactive=True))
            self.assertEqual(0, len(configs))
示例#20
0
    def test_add_optional_select(self):
        # http://trac-hacks.org/ticket/1834
        _redirect_url = ''

        def redirect(url):
            _redirect_url = url
            raise RequestDone

        req = Mock(perm=PermissionCache(self.env, 'admin'),
                   authname='admin',
                   chrome={},
                   href=Href('/'),
                   redirect=redirect,
                   method='POST',
                   args={
                       'add': True,
                       'name': "test",
                       'type': "select",
                       'label': "testing",
                       'options': "\r\none\r\ntwo"
                   })
        try:
            self.plugin.render_admin_panel(req, 'ticket', 'customfields', None)
        except RequestDone, e:
            self.assertEquals(
                sorted(list(self.env.config.options('ticket-custom'))),
                [(u'test', u'select'), (u'test.label', u'testing'),
                 (u'test.options', u'|one|two'), (u'test.order', u'1'),
                 (u'test.value', u'')])
示例#21
0
    def test_apply_optional_select(self):
        # Reuse the added custom field that test verified to work
        self.test_add_optional_select()
        self.assertEquals('select',
                          self.env.config.get('ticket-custom', 'test'))
        # Now check that details are maintained across order change
        # that reads fields, deletes them, and creates them again
        # http://trac-hacks.org/ticket/1834#comment:5
        _redirect_url = ''

        def redirect(url):
            _redirect_url = url
            raise RequestDone

        req = Mock(perm=PermissionCache(self.env, 'admin'),
                   authname='admin',
                   chrome={},
                   href=Href('/'),
                   redirect=redirect,
                   method='POST',
                   args={
                       'apply': True,
                       'order_test': '2'
                   })
        try:
            self.plugin.render_admin_panel(req, 'ticket', 'customfields', None)
        except RequestDone, e:
            self.assertEquals(
                sorted(list(self.env.config.options('ticket-custom'))),
                [(u'test', u'select'), (u'test.label', u'testing'),
                 (u'test.options', u'|one|two'), (u'test.order', u'2'),
                 (u'test.value', u'')])
示例#22
0
    def test_order_with_mismatched_keys(self):
        # http://trac-hacks.org/ticket/11540
        self.api.create_custom_field({
            'name': u'one',
            'format': 'plain',
            'value': '',
            'label': u'One',
            'type': u'text',
            'order': 1
        })

        def redirect(url):
            raise RequestDone

        req = Mock(perm=PermissionCache(self.env, 'admin'),
                   authname='admin',
                   chrome={},
                   href=Href('/'),
                   redirect=redirect,
                   method='POST',
                   args={
                       'apply': True,
                       'order_two': '1'
                   })
        try:
            self.plugin.render_admin_panel(req, 'ticket', 'customfields', None)
        except RequestDone, e:
            pass
示例#23
0
    def test_create(self):
        _redirect_url = ''

        def redirect(url):
            _redirect_url = url
            raise RequestDone

        req = Mock(perm=PermissionCache(self.env, 'admin'),
                   authname='admin',
                   chrome={},
                   href=Href('/'),
                   redirect=redirect,
                   method='POST',
                   args={
                       'add': True,
                       'name': "test",
                       'type': "textarea",
                       'label': "testing",
                       'format': "wiki",
                       'row': '9',
                       'columns': '42'
                   })
        try:
            self.plugin.render_admin_panel(req, 'ticket', 'customfields', None)
        except RequestDone, e:
            self.assertEquals(
                sorted(list(self.env.config.options('ticket-custom'))),
                [(u'test', u'textarea'), (u'test.cols', u'60'),
                 (u'test.format', u'wiki'), (u'test.label', u'testing'),
                 (u'test.options', u''), (u'test.order', u'1'),
                 (u'test.rows', u'5'), (u'test.value', u'')])
示例#24
0
 def test_anonymous_access(self):
     req = Mock(incookie=Cookie(),
                href=Href('/trac.cgi'),
                remote_addr='127.0.0.1',
                remote_user=None,
                base_path='/trac.cgi')
     self.assertIsNone(self.module.authenticate(req))
示例#25
0
    def test_edit_optional_select(self):
        self.test_add_optional_select()
        self.assertEquals('select',
                          self.env.config.get('ticket-custom', 'test'))
        _redirect_url = ''

        def redirect(url):
            _redirect_url = url
            raise RequestDone

        req = Mock(perm=PermissionCache(self.env, 'admin'),
                   authname='admin',
                   chrome={},
                   href=Href('/'),
                   redirect=redirect,
                   method='POST',
                   args={
                       'save': True,
                       'name': u'test',
                       'label': u'testing',
                       'type': u'select',
                       'value': u'',
                       'options': u'\r\none\r\ntwo'
                   })
        try:
            self.plugin.render_admin_panel(req, 'ticket', 'customfields',
                                           'test')
        except RequestDone, e:
            self.assertEquals(
                sorted(list(self.env.config.options('ticket-custom'))),
                [(u'test', u'select'), (u'test.label', u'testing'),
                 (u'test.options', u'|one|two'), (u'test.order', u'2'),
                 (u'test.value', u'')])
示例#26
0
 def test_login_no_username(self):
     req = Mock(incookie=Cookie(),
                href=Href('/trac.cgi'),
                remote_addr='127.0.0.1',
                remote_user=None,
                base_path='/trac.cgi')
     self.assertRaises(TracError, self.module._do_login, req)
示例#27
0
    def test_login_ignore_case(self):
        """
        Test that login is succesful when the usernames differ in case, but case
        is ignored.
        """
        self.env.config.set('trac', 'ignore_auth_case', 'yes')

        outcookie = Cookie()
        req = Mock(cgi_location='/trac',
                   href=Href('/trac.cgi'),
                   incookie=Cookie(),
                   outcookie=outcookie,
                   remote_addr='127.0.0.1',
                   remote_user='******',
                   authname='anonymous',
                   base_path='/trac.cgi')
        self.module._do_login(req)

        self.assertIn('trac_auth', outcookie, '"trac_auth" Cookie not set')
        auth_cookie = outcookie['trac_auth'].value
        self.assertEqual(
            [('john', '127.0.0.1')],
            self.env.db_query(
                "SELECT name, ipnr FROM auth_cookie WHERE cookie=%s",
                (auth_cookie, )))
示例#28
0
文件: admin.py 项目: hefloryd/bitten
    def test_process_update_config_invalid_recipe(self):
        BuildConfig(self.env,
                    name='foo',
                    label='Foo',
                    path='branches/foo',
                    active=True).insert()

        req = Mock(method='POST',
                   perm=PermissionCache(self.env, 'joe'),
                   authname='joe',
                   chrome={'warnings': []},
                   href=Href('/'),
                   args={
                       'save': '',
                       'name': 'foo',
                       'recipe': '<build><step /></build>'
                   })

        provider = BuildConfigurationsAdminPageProvider(self.env)
        provider.render_admin_panel(req, 'bitten', 'configs', 'foo')

        self.failUnless(req.chrome['warnings'], "No warnings?")
        self.assertEquals(
            req.chrome['warnings'],
            ['Invalid Recipe: Steps must have an "id" attribute.'])
示例#29
0
文件: admin.py 项目: hefloryd/bitten
    def test_process_new_platform_no_name(self):
        BuildConfig(self.env,
                    name='foo',
                    label='Foo',
                    path='branches/foo',
                    active=True).insert()

        data = {}
        req = Mock(method='POST',
                   chrome={},
                   hdf=data,
                   href=Href('/'),
                   perm=PermissionCache(self.env, 'joe'),
                   args={
                       'new': '',
                       'platform_name': ''
                   })

        provider = BuildConfigurationsAdminPageProvider(self.env)
        try:
            provider.render_admin_panel(req, 'bitten', 'configs', 'foo')
            self.fail("No TracError?")
        except Exception, e:
            self.assertEquals(e.message, 'Missing required field "name"')
            self.assertEquals(e.title, 'Missing field')
示例#30
0
文件: admin.py 项目: hefloryd/bitten
    def test_process_remove_platforms_no_selection(self):
        BuildConfig(self.env,
                    name='foo',
                    label='Foo',
                    path='branches/foo',
                    active=True).insert()
        platform = TargetPlatform(self.env, config='foo', name='any')
        platform.insert()

        redirected_to = []

        def redirect(url):
            redirected_to.append(url)
            raise RequestDone

        req = Mock(method='POST',
                   perm=PermissionCache(self.env, 'joe'),
                   abs_href=Href('http://example.org/'),
                   redirect=redirect,
                   authname='joe',
                   args={'remove': ''})

        provider = BuildConfigurationsAdminPageProvider(self.env)
        try:
            provider.render_admin_panel(req, 'bitten', 'configs', 'foo')
            self.fail('Expected TracError')

        except TracError, e:
            self.assertEqual('No platform selected', e.message)