Beispiel #1
0
Datei: query.py Projekt: t2y/trac
    def test_csv_obfuscation(self):
        class NoEmailView(MockPerm):
            def has_permission(self,
                               action,
                               realm_or_resource=None,
                               id=False,
                               version=False):
                return action != 'EMAIL_VIEW'

            __contains__ = has_permission

        query = Mock(get_columns=lambda: ['owner', 'reporter', 'cc'],
                     execute=lambda r: [{
                         'id': 1,
                         'owner': '*****@*****.**',
                         'reporter': '*****@*****.**',
                         'cc': '[email protected], cc2'
                     }],
                     time_fields=['time', 'changetime'])
        req = Mock(href=self.env.href, perm=NoEmailView())
        content, mimetype = QueryModule(self.env).export_csv(req, query)
        self.assertEqual(
            u'\uFEFFowner,reporter,cc\r\n'
            u'joe@…,foo@…,"cc1@…, cc2"\r\n', content.decode('utf-8'))
        req = Mock(href=self.env.href, perm=MockPerm())
        content, mimetype = QueryModule(self.env).export_csv(req, query)
        self.assertEqual(
            u'\uFEFFowner,reporter,cc\r\n'
            u'[email protected],[email protected],"[email protected], cc2"\r\n',
            content.decode('utf-8'))
Beispiel #2
0
 def setUp(self):
     self.env = EnvironmentStub(default_data=True)
     self.env.path = tempfile.mkdtemp()
     self.req = Mock(base_path='/trac.cgi', chrome={}, args={}, session={},
                     abs_href=Href('/trac.cgi'), href=Href('/trac.cgi'),
                     locale='', perm=MockPerm(), authname='admin', tz=None)
     self.bmsys = BookmarkSystem(self.env)
Beispiel #3
0
    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
Beispiel #4
0
def _make_req(environ,
              start_response,
              args={},
              arg_list=(),
              authname='admin',
              form_token='A' * 40,
              chrome={
                  'links': {},
                  'scripts': [],
                  'theme': 'theme.html',
                  'logo': '',
                  'nav': ''
              },
              perm=MockPerm(),
              tz=utc,
              locale=None,
              **kwargs):
    req = Request(environ, start_response)
    req.args = args
    req.arg_list = arg_list
    req.authname = authname
    req.form_token = form_token
    req.chrome = chrome
    req.perm = perm
    req.session = FakeSession()
    req.tz = tz
    req.locale = locale
    for name, value in kwargs.iteritems():
        setattr(req, name, value)
    return req
Beispiel #5
0
def main():
    all_pages = sorted(
        name for name in resource_listdir('trac.wiki', 'default-pages')
        if not name.startswith('.'))
    args = parse_args(all_pages)
    if args.pages:
        pages = sorted(args.pages)
    else:
        pages = all_pages

    if args.download:
        download_default_pages(pages, args.prefix, args.strict)

    env = EnvironmentStub(disable=['trac.mimeview.pygments.*'])
    load_components(env)
    with env.db_transaction:
        for name in all_pages:
            wiki = WikiPage(env, name)
            wiki.text = resource_string('trac.wiki', 'default-pages/' +
                                        name).decode('utf-8')
            if wiki.text:
                wiki.save('trac', '')
            else:
                printout('%s: Skipped empty page' % name)

    req = Mock(href=Href('/'),
               abs_href=Href('http://localhost/'),
               perm=MockPerm())
    for name in pages:
        wiki = WikiPage(env, name)
        if not wiki.exists:
            continue
        context = web_context(req, wiki.resource)
        out = DummyIO()
        DefaultWikiChecker(env, context, name).format(wiki.text, out)
Beispiel #6
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()

    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)

    req = Mock(href=Href('/'),
               abs_href=Href('http://www.example.com/'),
               authname='anonymous',
               perm=MockPerm(),
               tz=utc,
               args={},
               locale=Locale.parse('en_US') if Locale else None)
    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
Beispiel #7
0
def main():
    options, args = parse_args()
    names = sorted(name
                   for name in resource_listdir('trac.wiki', 'default-pages')
                   if not name.startswith('.'))
    if args:
        args = sorted(set(names) & set(map(os.path.basename, args)))
    else:
        args = names

    if options.download:
        download_default_pages(args, options.prefix)

    env = EnvironmentStub()
    load_components(env)
    with env.db_transaction:
        for name in names:
            wiki = WikiPage(env, name)
            wiki.text = resource_string('trac.wiki', 'default-pages/' +
                                        name).decode('utf-8')
            if wiki.text:
                wiki.save('trac', '')
            else:
                printout('%s: Skipped empty page' % name)

    req = Mock(href=Href('/'),
               abs_href=Href('http://localhost/'),
               perm=MockPerm())
    for name in args:
        wiki = WikiPage(env, name)
        if not wiki.exists:
            continue
        context = web_context(req, wiki.resource)
        out = DummyIO()
        DefaultWikiChecker(env, context, name).format(wiki.text, out)
Beispiel #8
0
    def __init__(self,
                 title,
                 input,
                 correct,
                 file,
                 line,
                 setup=None,
                 teardown=None,
                 context=None):
        unittest.TestCase.__init__(self, 'test')
        self.title = title
        self.input = input
        self.correct = correct
        self.file = file
        self.line = line
        self._setup = setup
        self._teardown = teardown

        self.req = Mock(href=Href('/'),
                        abs_href=Href('http://www.example.com/'),
                        chrome={},
                        session={},
                        authname='anonymous',
                        perm=MockPerm(),
                        tz=utc,
                        args={},
                        locale=locale_en,
                        lc_time=locale_en)
        if context:
            if isinstance(context, tuple):
                context = web_context(self.req, *context)
        else:
            context = web_context(self.req, 'wiki', 'WikiStart')
        self.context = context
Beispiel #9
0
    def test_optional_email_registration(self):
        user = '******'
        passwd = 'test'

        def redirect_noop(href):
            """Log relevant information for checking registration result."""
            # print req.chrome['notices']
            return

        # A more complete mock of a request object is required for this test.
        req = Mock(authname='anonymous',
                   method='POST',
                   args={
                       'action': 'create',
                       'username': user,
                       'name': 'Tester',
                       'password': passwd,
                       'password_confirm': passwd
                   },
                   chrome=dict(notices=[], warnings=[]),
                   href=self.env.abs_href,
                   path_info='/register',
                   perm=MockPerm(),
                   redirect=redirect_noop)
        self.env.config.set('account-manager', 'verify_email', False)
        # Successfully register the user.
        # Note: This would have raised an AttributeError without graceful
        #   request checking for 'email'.
        self.rmod.process_request(req)
        # DEVEL: Check registration success more directly.
        self.assertEqual(req.chrome['warnings'], [])
        self.assertEqual([user], list(self.store.get_users()))
        self.assertTrue(self.store.check_password(user, passwd))
Beispiel #10
0
def main():
    names = sorted(name
                   for name in resource_listdir('trac.wiki', 'default-pages')
                   if not name.startswith('.'))

    env = EnvironmentStub()
    load_components(env)
    with env.db_transaction:
        for name in names:
            wiki = WikiPage(env, name)
            wiki.text = resource_string('trac.wiki', 'default-pages/' +
                                        name).decode('utf-8')
            if wiki.text:
                wiki.save('trac', '')
            else:
                printout('%s: Skipped empty page' % name)

    req = Mock(href=Href('/'),
               abs_href=Href('http://trac.edgewall.org/'),
               perm=MockPerm(),
               chrome={})
    for name in sys.argv[1:]:
        name = os.path.basename(name)
        wiki = WikiPage(env, name)
        if not wiki.exists:
            continue
        context = web_context(req, wiki.resource, absurls=True)
        rst = wiki2rest(env, context, wiki)
        sys.stdout.write(rst)
Beispiel #11
0
    def _create_request(self, authname='anonymous', **kwargs):
        kw = {
            'path_info': '/',
            'perm': MockPerm(),
            'args': _RequestArgs(),
            'href': self.env.href,
            'abs_href': self.env.abs_href,
            'tz': utc,
            'locale': None,
            'lc_time': locale_en,
            'session': DetachedSession(self.env, authname),
            'authname': authname,
            'chrome': {
                'notices': [],
                'warnings': []
            },
            'method': None,
            'get_header': lambda v: None,
            'is_xhr': False,
            'form_token': None
        }
        if 'args' in kwargs:
            kw['args'].update(kwargs.pop('args'))
        kw.update(kwargs)

        def redirect(url, permanent=False):
            raise RequestDone

        return Mock(add_redirect_listener=lambda x: [].append(x),
                    redirect=redirect,
                    **kw)
 def _create_request(self):
     languages = filter(None, [self.config.get('trac', 'default_language')])
     if languages:
         locale = _parse_locale(languages[0])
     else:
         locale = None
     tzname = self.config.get('trac', 'default_timezone')
     tz = get_timezone(tzname) or localtz
     environ = {'REQUEST_METHOD': 'POST', 'REMOTE_ADDR': '127.0.0.1',
                'SERVER_NAME': 'localhost', 'SERVER_PORT': '80',
                'wsgi.url_scheme': 'http',
                'trac.base_url': self.env.abs_href()}
     if languages:
         environ['HTTP_ACCEPT_LANGUAGE'] = ','.join(languages)
     req = Request(environ, lambda *args, **kwargs: None)
     req.arg_list = ()
     req.args = {}
     req.authname = 'anonymous'
     req.session = FakeSession({'dateinfo': 'absolute'})
     req.perm = MockPerm()
     req.href = req.abs_href
     req.locale = locale
     req.lc_time = locale
     req.tz = tz
     req.chrome = {'notices': [], 'warnings': []}
     return req
Beispiel #13
0
 def _test_import(self, env, filename, sheet = 1):
     req = Request({'SERVER_PORT': 0, 'SERVER_NAME': 'any', 'wsgi.url_scheme': 'any', 'wsgi.input': 'any', 'REQUEST_METHOD': 'GET' }, lambda x, y: _printme)
     try:
        from trac.test import MockPerm
        req.perm = MockPerm()
     except ImportError:
        pass
     req.authname = 'testuser'
     #req.hdf = HDFWrapper([]) # replace by this if you want to generate HTML: req.hdf = HDFWrapper(loadpaths=chrome.get_all_templates_dirs())
     db = env.get_db_cnx()
     cursor = db.cursor()
     _exec(cursor, "SELECT * FROM enum ORDER BY type, value, name")
     enums_before = cursor.fetchall()
     _exec(cursor, "SELECT * FROM component ORDER BY name")
     components_before = cursor.fetchall()
     #print enums_before
     # when testing, always use the same time so that the results are comparable
     #print "importing " + filename + " with tickettime " + str(ImporterTestCase.TICKET_TIME)
     template, data, content_type = \
         ImportModule(env)._do_import(filename, sheet, req, filename,
                                      ImporterTestCase.TICKET_TIME, encoding='cp1252')
     #sys.stdout = tempstdout
     #req.display(template, content_type or 'text/html')
     #open('/tmp/out.html', 'w').write(req.hdf.render(template, None))
     _exec(cursor, "SELECT * FROM ticket ORDER BY id")
     tickets = cursor.fetchall()
     _exec(cursor, "SELECT * FROM ticket_custom ORDER BY ticket, name")
     tickets_custom = cursor.fetchall()
     _exec(cursor, "SELECT * FROM ticket_change")
     tickets_change = cursor.fetchall()
     _exec(cursor, "SELECT * FROM enum ORDER BY type, value, name")
     enums = [f for f in set(cursor.fetchall()) - set(enums_before)]
     _exec(cursor, "SELECT * FROM component ORDER BY name")
     components = [f for f in set(cursor.fetchall()) - set(components_before)]
     return self._pformat([ tickets, tickets_custom, tickets_change, enums, components ])
Beispiel #14
0
    def _format_html(self, event):
        ticket = event.target
        short_changes = {}
        long_changes = {}
        chrome = Chrome(self.env)
        for field, old_value in event.changes.items():
            new_value = ticket[field]
            if (new_value and '\n' in new_value) or \
                    (old_value and '\n' in old_value):
                long_changes[field.capitalize()] = HTML(
                    "<pre>\n%s\n</pre>" % ('\n'.join(
                        diff_cleanup(
                            difflib.unified_diff(
                                wrap(old_value, cols=60).split('\n'),
                                wrap(new_value, cols=60).split('\n'),
                                lineterm='',
                                n=3)))))

            else:
                short_changes[field.capitalize()] = (old_value, new_value)

        try:
            req = Mock(href=Href(self.env.abs_href()),
                       abs_href=self.env.abs_href(),
                       authname=event.author,
                       perm=MockPerm(),
                       chrome=dict(warnings=[], notices=[]),
                       args={})
            context = Context.from_request(req, event.realm, event.target.id)
            formatter = HtmlFormatter(self.env, context, event.comment)
            temp = formatter.generate(True)
        except Exception, e:
            self.log.error(exception_to_unicode(e, traceback=True))
            temp = 'Comment in plain text: %s' % event.comment
Beispiel #15
0
 def ticket_created(self, ticket):
     """Called when a ticket is created."""
     # Add any tags unconditionally.
     self.set_resource_tags(Mock(perm=MockPerm()), ticket, None)
     if self.use_cache:
         # Invalidate resource cache.
         del self._tagged_resources
Beispiel #16
0
    def create_trac_ctx(self, website_url, author_name, timezone_str, uri):
        req = Mock(href=Href(uri),
                   abs_href=Href(website_url),
                   authname=author_name,
                   perm=MockPerm(),
                   tz=timezone_str,
                   args={})
        context = Context.from_request(req, 'wiki', 'WikiStart')

        env = EnvironmentStub(enable=['trac.*']) # + additional components
        # -- macros support
        env.path = ''
        # -- intertrac support
        env.config.set('intertrac', 'trac.title', 'Trac\'s Trac')
        env.config.set('intertrac', 'trac.url',
                       website_url)
        env.config.set('intertrac', 't', 'trac')
        env.config.set('intertrac', 'th.title', 'Trac Hacks')
        env.config.set('intertrac', 'th.url',
                       'http://trac-hacks.org')
        env.config.set('intertrac', 'th.compat', 'false')
        # -- safe schemes
        env.config.set('wiki', 'safe_schemes',
                       'file,ftp,http,https,svn,svn+ssh,git,'
                       'rfc-2396.compatible,rfc-2396+under_score')

        env.href = req.href
        env.abs_href = req.abs_href
        return (env, context)
Beispiel #17
0
    def __init__(self,
                 title,
                 input,
                 correct,
                 file,
                 line,
                 setup=None,
                 teardown=None,
                 context=None):
        unittest.TestCase.__init__(self, 'test')
        self.title = title
        self.input = input
        self.correct = correct
        self.file = file
        self.line = line
        self._setup = setup
        self._teardown = teardown

        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)
        if context:
            if isinstance(context, tuple):
                context = web_context(req, *context)
        else:
            context = web_context(req, 'wiki', 'WikiStart')
        self.context = context

        all_test_components = [
            HelloWorldMacro, DivHelloWorldMacro, TableHelloWorldMacro,
            DivCodeMacro, DivCodeElementMacro, DivCodeStreamMacro, NoneMacro,
            WikiProcessorSampleMacro, SampleResolver
        ]
        self.env = EnvironmentStub(enable=['trac.*'] + all_test_components)
        # -- macros support
        self.env.path = ''
        # -- intertrac support
        self.env.config.set('intertrac', 'trac.title', "Trac's Trac")
        self.env.config.set('intertrac', 'trac.url',
                            "http://trac.edgewall.org")
        self.env.config.set('intertrac', 't', 'trac')
        self.env.config.set('intertrac', 'th.title', "Trac Hacks")
        self.env.config.set('intertrac', 'th.url', "http://trac-hacks.org")
        self.env.config.set('intertrac', 'th.compat', 'false')
        # -- safe schemes
        self.env.config.set(
            'wiki', 'safe_schemes', 'file,ftp,http,https,svn,svn+ssh,'
            'rfc-2396.compatible,rfc-2396+under_score')

        # TODO: remove the following lines in order to discover
        #       all the places were we should use the req.href
        #       instead of env.href
        self.env.href = req.href
        self.env.abs_href = req.abs_href
Beispiel #18
0
 def ticket_changed(self, ticket, comment, author, old_values):
     """Called when a ticket is modified."""
     # Sync only on change of ticket fields, that are exposed as tags.
     if any(f in self.fields for f in old_values.keys()):
         self.set_resource_tags(Mock(perm=MockPerm()), ticket, None)
         if self.use_cache:
             # Invalidate resource cache.
             del self._tagged_resources
Beispiel #19
0
class Request(object):
    locale = None
    perm = MockPerm()
    args = {}
    def __init__(self, **kwargs):
        self.chrome = {}
        for k, v in kwargs.items():
            setattr(self, k, v)
Beispiel #20
0
def format_to_html(req, env, text):
    req = Mock(href=Href('/'),
               abs_href=Href('http://www.example.com/'),
               authname='anonymous',
               perm=MockPerm(),
               args={})
    context = Context.from_request(req)
    return trac.wiki.formatter.format_to_html(env, context, text)
Beispiel #21
0
 def setUp(self):
     self.req = Mock(
         perm=MockPerm(),
         chrome={'logo': {}},
         href=Href("/main"),
         base_path=BASE_PATH,
         args=arg_list_to_args([]),
     )
Beispiel #22
0
 def ticket_created(self, ticket):
     """Called when a ticket is created."""
     # Add any tags unconditionally.
     self.set_resource_tags(
         Mock(authname=ticket['reporter'], perm=MockPerm()), ticket, None,
         ticket['time'])
     if self.use_cache:
         # Invalidate resource cache.
         del self._tagged_resources
Beispiel #23
0
 def wiki_page_renamed(self, page, old_name):
     """Called when a page has been renamed (since Trac 0.12)."""
     self.log.debug("Moving wiki page tags from %s to %s",
                    old_name, page.name)
     tag_sys = TagSystem(self.env)
     # XXX Ugh. Hopefully this will be sufficient to fool any endpoints.
     from trac.test import Mock, MockPerm
     req = Mock(authname='anonymous', perm=MockPerm())
     tag_sys.reparent_tags(req, Resource('wiki', page.name), old_name)
Beispiel #24
0
 def setUp(self):
     self.env = EnvironmentStub(default_data=True)
     self.env.config.set('ticket-custom', 'hours_remaining', 'text')
     self.env.config.set('estimation-tools', 'estimation_field',
                         'hours_remaining')
     self.req = Mock(href=Href('/'),
                     abs_href=Href('http://www.example.com/'),
                     perm=MockPerm(),
                     authname='anonymous')
Beispiel #25
0
 def _create_req(self, **kwargs):
     data = dict(args={},
                 perm=MockPerm(),
                 href=Href('/'),
                 chrome={},
                 authname='trac',
                 tz=utc,
                 get_header=lambda name: None)
     data.update(kwargs)
     return Mock(**data)
Beispiel #26
0
 def test_csv_escape(self):
     query = Mock(get_columns=lambda: ['col1'],
                  execute=lambda r: [{'id': 1,
                                      'col1': 'value, needs escaped'}],
                  time_fields=['time', 'changetime'])
     content, mimetype = QueryModule(self.env).export_csv(
                             Mock(href=self.env.href, perm=MockPerm()),
                             query)
     self.assertEqual('\xef\xbb\xbfcol1\r\n"value, needs escaped"\r\n',
                      content)
Beispiel #27
0
def Main(opts):
    """ Cross your fingers and pray """
    env = Environment(opts.envpath)
    from tractags.api import TagSystem

    tlist = opts.tags or split_tags(
        env.config.get('blog', 'default_tag', 'blog'))
    tags = TagSystem(env)
    req = Mock(perm=MockPerm())
    blog = tags.query(req, ' '.join(tlist + ['realm:wiki']))

    cnx = env.get_db_cnx()
    for resource, page_tags in list(blog):
        try:
            page = WikiPage(env, version=1, name=resource.id)
            _, publish_time, author, _, _ = page.get_history().next()
            if opts.deleteonly:
                page.delete()
                continue
            categories = ' '.join([t for t in page_tags if t not in tlist])
            page = WikiPage(env, name=resource.id)
            for version, version_time, version_author, version_comment, \
                _ in page.get_history():
                # Currently the basename of the post url is used due to
                # http://trac-hacks.org/ticket/2956
                #name = resource.id.replace('/', '_')
                name = resource.id
                # extract title from text:
                fulltext = page.text
                match = _title_split_match(fulltext)
                if match:
                    title = match.group(1)
                    fulltext = match.group(2)
                else:
                    title = name
                body = fulltext
                print "Adding post %s, v%s: %s" % (name, version, title)
                insert_blog_post(cnx, name, version, title, body, publish_time,
                                 version_time, version_comment, version_author,
                                 author, categories)
                reparent_blog_attachments(env, resource.id, name)
                continue
            cnx.commit()
            if opts.delete:
                page.delete()
                continue
        except:
            env.log.debug("Error loading wiki page %s" % resource.id,
                          exc_info=True)
            print "Failed to add post %s, v%s: %s" % (name, version, title)
            cnx.rollback()
            cnx.close()
            return 1
    cnx.close()
    return 0
Beispiel #28
0
 def test_run_html_formatter(self):
     wiki_content = "!WikiSyntax"
     page = self.create_wiki("Dummy wiki", wiki_content)
     from trac.mimeview.api import RenderingContext
     context = RenderingContext(
         page.resource,
         href=Href('/'),
         perm=MockPerm(),
     )
     context.req = None  # 1.0 FIXME .req shouldn't be required by formatter
     format_to_html(self.env, context, wiki_content)
Beispiel #29
0
 def setUp(self):
     self.env = EnvironmentStub()
     self.req = Mock(href=self.env.href, perm=MockPerm())
     self.mmodule = MilestoneModule(self.env)
     self.terms = ['MilestoneAlpha', 'MilestoneBeta', 'MilestoneGamma']
     for term in self.terms + [' '.join(self.terms)]:
         m = Milestone(self.env)
         m.name = term
         m.due = datetime.now(utc)
         m.description = random_sentence()
         m.insert()
Beispiel #30
0
 def setUp(self):
     self.env = EnvironmentStub()
     self.req = Mock(href=Href('/'),
                     abs_href=Href('http://example.org/'),
                     authname='anonymous',
                     tz=utc,
                     locale=locale_en,
                     lc_time=locale_en,
                     chrome={},
                     perm=MockPerm(),
                     session={})