~ubuntu-branches/ubuntu/natty/moin/natty-updates

« back to all changes in this revision

Viewing changes to MoinMoin/request/_tests/test_request.py

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-06-22 21:17:13 UTC
  • mfrom: (0.9.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080622211713-fpo2zrq3s5dfecxg
Tags: 1.7.0-3
Simplify /etc/moin/wikilist format: "USER URL" (drop unneeded middle
CONFIG_DIR that was wrongly advertised as DATA_DIR).  Make
moin-mass-migrate handle both formats and warn about deprecation of
the old one.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
"""
 
3
    MoinMoin - MoinMoin.module_tested Tests
 
4
 
 
5
    @copyright: 2003-2004 by Juergen Hermann <jh@web.de>,
 
6
                2007 by MoinMoin:ThomasWaldmann
 
7
    @license: GNU GPL, see COPYING for details.
 
8
"""
 
9
 
 
10
import py
 
11
 
 
12
from MoinMoin import config, wikiutil
 
13
 
 
14
from MoinMoin.request import HeadersAlreadySentException
 
15
 
 
16
class TestNormalizePagename(object):
 
17
 
 
18
    def testPageInvalidChars(self):
 
19
        """ request: normalize pagename: remove invalid unicode chars
 
20
 
 
21
        Assume the default setting
 
22
        """
 
23
        test = u'\u0000\u202a\u202b\u202c\u202d\u202e'
 
24
        expected = u''
 
25
        result = self.request.normalizePagename(test)
 
26
        assert result == expected
 
27
 
 
28
    def testNormalizeSlashes(self):
 
29
        """ request: normalize pagename: normalize slashes """
 
30
        cases = (
 
31
            (u'/////', u''),
 
32
            (u'/a', u'a'),
 
33
            (u'a/', u'a'),
 
34
            (u'a/////b/////c', u'a/b/c'),
 
35
            (u'a b/////c d/////e f', u'a b/c d/e f'),
 
36
            )
 
37
        for test, expected in cases:
 
38
            result = self.request.normalizePagename(test)
 
39
            assert result == expected
 
40
 
 
41
    def testNormalizeWhitespace(self):
 
42
        """ request: normalize pagename: normalize whitespace """
 
43
        cases = (
 
44
            (u'         ', u''),
 
45
            (u'    a', u'a'),
 
46
            (u'a    ', u'a'),
 
47
            (u'a     b     c', u'a b c'),
 
48
            (u'a   b  /  c    d  /  e   f', u'a b/c d/e f'),
 
49
            # All 30 unicode spaces
 
50
            (config.chars_spaces, u''),
 
51
            )
 
52
        for test, expected in cases:
 
53
            result = self.request.normalizePagename(test)
 
54
            assert result == expected
 
55
 
 
56
    def testUnderscoreTestCase(self):
 
57
        """ request: normalize pagename: underscore convert to spaces and normalized
 
58
 
 
59
        Underscores should convert to spaces, then spaces should be
 
60
        normalized, order is important!
 
61
        """
 
62
        cases = (
 
63
            (u'         ', u''),
 
64
            (u'  a', u'a'),
 
65
            (u'a  ', u'a'),
 
66
            (u'a  b  c', u'a b c'),
 
67
            (u'a  b  /  c  d  /  e  f', u'a b/c d/e f'),
 
68
            )
 
69
        for test, expected in cases:
 
70
            result = self.request.normalizePagename(test)
 
71
            assert result == expected
 
72
 
 
73
 
 
74
class TestGroupPages(object):
 
75
 
 
76
    def setup_method(self, method):
 
77
        self.config = self.TestConfig(page_group_regex=r'.+Group')
 
78
 
 
79
    def teardown_method(self, method):
 
80
        del self.config
 
81
 
 
82
    def testNormalizeGroupName(self):
 
83
        """ request: normalize pagename: restrict groups to alpha numeric Unicode
 
84
 
 
85
        Spaces should normalize after invalid chars removed!
 
86
        """
 
87
        cases = (
 
88
            # current acl chars
 
89
            (u'Name,:Group', u'NameGroup'),
 
90
            # remove than normalize spaces
 
91
            (u'Name ! @ # $ % ^ & * ( ) + Group', u'Name Group'),
 
92
            )
 
93
        for test, expected in cases:
 
94
            # validate we are testing valid group names
 
95
            if wikiutil.isGroupPage(self.request, test):
 
96
                result = self.request.normalizePagename(test)
 
97
                assert result == expected
 
98
 
 
99
 
 
100
class TestHTTPDate(object):
 
101
 
 
102
    def testRFC1123Date(self):
 
103
        """ request: httpDate default rfc1123 """
 
104
        assert self.request.httpDate(0) == 'Thu, 01 Jan 1970 00:00:00 GMT'
 
105
 
 
106
    def testRFC850Date(self):
 
107
        """ request: httpDate rfc850 """
 
108
        assert self.request.httpDate(0, rfc='850') == 'Thursday, 01-Jan-70 00:00:00 GMT'
 
109
 
 
110
 
 
111
class TestHTTPHeaders(object):
 
112
    std_headers = ['Status: 200 OK', 'Content-type: text/html; charset=%s' % config.charset]
 
113
 
 
114
    def setup_method(self, method):
 
115
        self.request.sent_headers = None
 
116
 
 
117
    def testAutoAddStdHeaders(self):
 
118
        """ test if the usual headers get auto-added if not specified """
 
119
        headers_out = self.request.emit_http_headers(testing=True)
 
120
        assert headers_out == self.std_headers
 
121
 
 
122
    def testHeadersOnlyOnce(self):
 
123
        """ test if trying to call emit_http_headers multiple times raises an exception """
 
124
        self.request.emit_http_headers(testing=True)
 
125
        py.test.raises(HeadersAlreadySentException, self.request.emit_http_headers, [], {'testing': True})
 
126
 
 
127
    def testDuplicateHeadersIgnored(self):
 
128
        """ test if duplicate headers get ignored """
 
129
        headers_in = self.std_headers + ['Status: 500 Server Error']
 
130
        headers_expected = self.std_headers
 
131
        headers_out = self.request.emit_http_headers(headers_in, testing=True)
 
132
        assert headers_out == headers_expected
 
133
 
 
134
    def testListHeaders(self):
 
135
        """ test if header values get merged into a list for headers supporting it """
 
136
        headers_in = self.std_headers + ['Vary: aaa', 'vary: bbb']
 
137
        headers_expected = self.std_headers + ['Vary: aaa, bbb']
 
138
        headers_out = self.request.emit_http_headers(headers_in, testing=True)
 
139
        assert headers_out == headers_expected
 
140
 
 
141
coverage_modules = ['MoinMoin.request']
 
142