File: wiki.py

package info (click to toggle)
trac-xmlrpc 1.2.0%2Bsvn18657-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 296 kB
  • sloc: python: 3,024; javascript: 26; makefile: 3
file content (106 lines) | stat: -rw-r--r-- 4,418 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# -*- coding: utf-8 -*-
"""
License: BSD

(c) 2009      ::: www.CodeResort.com - BV Network AS (simon-code@bvnetwork.no)
"""

import pkg_resources
import time
import unittest

from ..util import xmlrpclib
from . import TracRpcTestCase, TracRpcTestSuite, makeSuite


class RpcWikiTestCase(TracRpcTestCase):

    image_in = pkg_resources.resource_string('trac', 'htdocs/feed.png')

    def setUp(self):
        TracRpcTestCase.setUp(self)
        self.anon = xmlrpclib.ServerProxy(self._testenv.url_anon)
        self.user = xmlrpclib.ServerProxy(self._testenv.url_user)
        self.admin = xmlrpclib.ServerProxy(self._testenv.url_admin)

    def tearDown(self):
        for proxy in (self.anon, self.user, self.admin):
            proxy('close')()
        TracRpcTestCase.tearDown(self)

    def test_attachments(self):
        # Create attachment
        self.admin.wiki.putAttachmentEx('TitleIndex', 'feed2.png', 'test image',
                                        xmlrpclib.Binary(self.image_in))
        self.assertEqual(self.image_in, self.admin.wiki.getAttachment(
                                                'TitleIndex/feed2.png').data)
        # Update attachment (adding new)
        self.admin.wiki.putAttachmentEx('TitleIndex', 'feed2.png',
                                        'test image',
                                        xmlrpclib.Binary(self.image_in), False)
        self.assertEqual(self.image_in, self.admin.wiki.getAttachment(
                                                'TitleIndex/feed2.2.png').data)
        # List attachments
        self.assertEqual(['TitleIndex/feed2.2.png', 'TitleIndex/feed2.png'],
                        sorted(self.admin.wiki.listAttachments('TitleIndex')))
        # Delete both attachments
        self.admin.wiki.deleteAttachment('TitleIndex/feed2.png')
        self.admin.wiki.deleteAttachment('TitleIndex/feed2.2.png')
        # List attachments again
        self.assertEqual([], self.admin.wiki.listAttachments('TitleIndex'))

    def test_getRecentChanges(self):
        self.admin.wiki.putPage('WikiOne', 'content one', {})
        time.sleep(1)
        self.admin.wiki.putPage('WikiTwo', 'content two', {})
        attrs2 = self.admin.wiki.getPageInfo('WikiTwo')
        changes = self.admin.wiki.getRecentChanges(attrs2['lastModified'])
        self.assertEqual(1, len(changes))
        self.assertEqual('WikiTwo', changes[0]['name'])
        self.assertEqual('admin', changes[0]['author'])
        self.assertEqual(1, changes[0]['version'])
        self.admin.wiki.deletePage('WikiOne')
        self.admin.wiki.deletePage('WikiTwo')

    def test_getPageHTMLWithImage(self):
        # Create the wiki page (absolute image reference)
        self.admin.wiki.putPage('ImageTest',
                        '[[Image(wiki:ImageTest:feed.png, nolink)]]\n', {})
        # Create attachment
        self.admin.wiki.putAttachmentEx('ImageTest', 'feed.png', 'test image',
                                        xmlrpclib.Binary(self.image_in))
        # Check rendering absolute
        markup_1 = self.admin.wiki.getPageHTML('ImageTest')
        self.assertIn((' src="%s/raw-attachment/wiki/ImageTest/feed.png"' %
                       self._testenv.url), markup_1)
        # Change to relative image reference and check again
        self.admin.wiki.putPage('ImageTest',
                                '[[Image(feed.png, nolink)]]\n', {})
        markup_2 = self.admin.wiki.getPageHTML('ImageTest')
        self.assertEqual(markup_2, markup_1)

    def test_getPageHTMLWithManipulator(self):
        self.admin.wiki.putPage('FooBar', 'foo bar', {})
        # Enable wiki manipulator
        source = r"""# -*- coding: utf-8 -*-
from trac.core import *
from trac.wiki.api import IWikiPageManipulator
class WikiManipulator(Component):
    implements(IWikiPageManipulator)
    def prepare_wiki_page(self, req, page, fields):
        fields['text'] = 'foo bar baz'
    def validate_wiki_page(req, page):
        return []
"""
        with self._plugin(source, 'Manipulator.py'):
            self.assertEqual('<html><body><p>\nfoo bar baz\n</p>\n'
                             '</body></html>',
                             self.admin.wiki.getPageHTML('FooBar'))

def test_suite():
    suite = TracRpcTestSuite()
    suite.addTest(makeSuite(RpcWikiTestCase))
    return suite

if __name__ == '__main__':
    unittest.main(defaultTest='test_suite')