31 |
31 |
32 class URLPublisherTC(CubicWebTC): |
32 class URLPublisherTC(CubicWebTC): |
33 """test suite for QSPreProcessor""" |
33 """test suite for QSPreProcessor""" |
34 |
34 |
35 def setup_database(self): |
35 def setup_database(self): |
36 req = self.request() |
36 with self.admin_access.repo_cnx() as cnx: |
37 self.create_user(req, u'ÿsaÿe') |
37 self.create_user(cnx, u'ÿsaÿe') |
38 b = req.create_entity('BlogEntry', title=u'hell\'o', content=u'blabla') |
38 b = cnx.create_entity('BlogEntry', title=u'hell\'o', content=u'blabla') |
39 c = req.create_entity('Tag', name=u'yo') # take care: Tag's name normalized to lower case |
39 # take care: Tag's name normalized to lower case |
40 self.execute('SET C tags B WHERE C eid %(c)s, B eid %(b)s', {'c':c.eid, 'b':b.eid}) |
40 c = cnx.create_entity('Tag', name=u'yo') |
|
41 cnx.execute('SET C tags B WHERE C eid %(c)s, B eid %(b)s', |
|
42 {'c':c.eid, 'b':b.eid}) |
|
43 cnx.commit() |
41 |
44 |
42 def process(self, url): |
45 def process(self, req, url): |
43 req = self.req = self.request() |
|
44 return self.app.url_resolver.process(req, url) |
46 return self.app.url_resolver.process(req, url) |
45 |
47 |
46 def test_raw_path(self): |
48 def test_raw_path(self): |
47 """tests raw path resolution'""" |
49 """tests raw path resolution'""" |
48 self.assertEqual(self.process('view'), ('view', None)) |
50 with self.admin_access.web_request() as req: |
49 self.assertEqual(self.process('edit'), ('edit', None)) |
51 self.assertEqual(self.process(req, 'view'), ('view', None)) |
50 self.assertRaises(NotFound, self.process, 'whatever') |
52 self.assertEqual(self.process(req, 'edit'), ('edit', None)) |
|
53 self.assertRaises(NotFound, self.process, req, 'whatever') |
51 |
54 |
52 def test_eid_path(self): |
55 def test_eid_path(self): |
53 """tests eid path resolution""" |
56 """tests eid path resolution""" |
54 self.assertIsInstance(self.process('123')[1], ResultSet) |
57 with self.admin_access.web_request() as req: |
55 self.assertEqual(len(self.process('123')[1]), 1) |
58 self.assertIsInstance(self.process(req, '123')[1], ResultSet) |
56 self.assertRaises(NotFound, self.process, '123/345') |
59 self.assertEqual(len(self.process(req, '123')[1]), 1) |
57 self.assertRaises(NotFound, self.process, 'not_eid') |
60 self.assertRaises(NotFound, self.process, req, '123/345') |
|
61 self.assertRaises(NotFound, self.process, req, 'not_eid') |
58 |
62 |
59 def test_rest_path_etype(self): |
63 def test_rest_path_etype(self): |
60 """tests the rest path resolution""" |
64 """tests the rest path resolution""" |
61 ctrl, rset = self.process('CWEType') |
65 with self.admin_access.web_request() as req: |
62 self.assertEqual(ctrl, 'view') |
66 ctrl, rset = self.process(req, 'CWEType') |
63 self.assertEqual(rset.description[0][0], 'CWEType') |
67 self.assertEqual(ctrl, 'view') |
64 self.assertEqual(rset.printable_rql(), |
68 self.assertEqual(rset.description[0][0], 'CWEType') |
65 "Any X,AA,AB ORDERBY AA WHERE X is_instance_of CWEType, X name AA, X modification_date AB") |
69 self.assertEqual("Any X,AA,AB ORDERBY AA WHERE X is_instance_of CWEType, " |
|
70 "X name AA, X modification_date AB", |
|
71 rset.printable_rql()) |
66 |
72 |
67 def test_rest_path_by_attr(self): |
73 def test_rest_path_by_attr(self): |
68 ctrl, rset = self.process('CWUser/login/admin') |
74 with self.admin_access.web_request() as req: |
69 self.assertEqual(ctrl, 'view') |
75 ctrl, rset = self.process(req, 'CWUser/login/admin') |
70 self.assertEqual(len(rset), 1) |
76 self.assertEqual(ctrl, 'view') |
71 self.assertEqual(rset.description[0][0], 'CWUser') |
77 self.assertEqual(len(rset), 1) |
72 self.assertEqual(rset.printable_rql(), 'Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, X login AA, X firstname AB, X surname AC, X modification_date AD, X login "admin"') |
78 self.assertEqual(rset.description[0][0], 'CWUser') |
|
79 self.assertEqual('Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, ' |
|
80 'X login AA, X firstname AB, X surname AC, ' |
|
81 'X modification_date AD, X login "admin"', |
|
82 rset.printable_rql()) |
73 |
83 |
74 def test_rest_path_unique_attr(self): |
84 def test_rest_path_unique_attr(self): |
75 ctrl, rset = self.process('cwuser/admin') |
85 with self.admin_access.web_request() as req: |
76 self.assertEqual(ctrl, 'view') |
86 ctrl, rset = self.process(req, 'cwuser/admin') |
77 self.assertEqual(len(rset), 1) |
87 self.assertEqual(ctrl, 'view') |
78 self.assertEqual(rset.description[0][0], 'CWUser') |
88 self.assertEqual(len(rset), 1) |
79 self.assertEqual(rset.printable_rql(), 'Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, X login AA, X firstname AB, X surname AC, X modification_date AD, X login "admin"') |
89 self.assertEqual(rset.description[0][0], 'CWUser') |
|
90 self.assertEqual('Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, ' |
|
91 'X login AA, X firstname AB, X surname AC, ' |
|
92 'X modification_date AD, X login "admin"', |
|
93 rset.printable_rql()) |
80 |
94 |
81 def test_rest_path_eid(self): |
95 def test_rest_path_eid(self): |
82 ctrl, rset = self.process('cwuser/eid/%s' % self.user().eid) |
96 with self.admin_access.web_request() as req: |
83 self.assertEqual(ctrl, 'view') |
97 ctrl, rset = self.process(req, 'cwuser/eid/%s' % self.user(req).eid) |
84 self.assertEqual(len(rset), 1) |
98 self.assertEqual(ctrl, 'view') |
85 self.assertEqual(rset.description[0][0], 'CWUser') |
99 self.assertEqual(len(rset), 1) |
86 self.assertEqual(rset.printable_rql(), 'Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, X login AA, X firstname AB, X surname AC, X modification_date AD, X eid %s' % rset[0][0]) |
100 self.assertEqual(rset.description[0][0], 'CWUser') |
|
101 self.assertEqual('Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, ' |
|
102 'X login AA, X firstname AB, X surname AC, ' |
|
103 'X modification_date AD, X eid %s' % rset[0][0], |
|
104 rset.printable_rql()) |
87 |
105 |
88 def test_rest_path_non_ascii_paths(self): |
106 def test_rest_path_non_ascii_paths(self): |
89 ctrl, rset = self.process('CWUser/login/%C3%BFsa%C3%BFe') |
107 with self.admin_access.web_request() as req: |
90 self.assertEqual(ctrl, 'view') |
108 ctrl, rset = self.process(req, 'CWUser/login/%C3%BFsa%C3%BFe') |
91 self.assertEqual(len(rset), 1) |
109 self.assertEqual(ctrl, 'view') |
92 self.assertEqual(rset.description[0][0], 'CWUser') |
110 self.assertEqual(len(rset), 1) |
93 self.assertEqual(rset.printable_rql(), u'Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, X login AA, X firstname AB, X surname AC, X modification_date AD, X login "\xffsa\xffe"') |
111 self.assertEqual(rset.description[0][0], 'CWUser') |
|
112 self.assertEqual(u'Any X,AA,AB,AC,AD WHERE X is_instance_of CWUser, ' |
|
113 u'X login AA, X firstname AB, X surname AC, ' |
|
114 u'X modification_date AD, X login "\xffsa\xffe"', |
|
115 rset.printable_rql()) |
94 |
116 |
95 def test_rest_path_quoted_paths(self): |
117 def test_rest_path_quoted_paths(self): |
96 ctrl, rset = self.process('BlogEntry/title/hell%27o') |
118 with self.admin_access.web_request() as req: |
97 self.assertEqual(ctrl, 'view') |
119 ctrl, rset = self.process(req, 'BlogEntry/title/hell%27o') |
98 self.assertEqual(len(rset), 1) |
120 self.assertEqual(ctrl, 'view') |
99 self.assertEqual(rset.description[0][0], 'BlogEntry') |
121 self.assertEqual(len(rset), 1) |
100 self.assertEqual(rset.printable_rql(), u'Any X,AA,AB,AC WHERE X is_instance_of BlogEntry, X creation_date AA, X title AB, X modification_date AC, X title "hell\'o"') |
122 self.assertEqual(rset.description[0][0], 'BlogEntry') |
|
123 self.assertEqual(u'Any X,AA,AB,AC WHERE X is_instance_of BlogEntry, ' |
|
124 'X creation_date AA, X title AB, X modification_date AC, ' |
|
125 'X title "hell\'o"', |
|
126 rset.printable_rql()) |
101 |
127 |
102 def test_rest_path_errors(self): |
128 def test_rest_path_errors(self): |
103 self.assertRaises(NotFound, self.process, 'CWUser/eid/30000') |
129 with self.admin_access.web_request() as req: |
104 self.assertRaises(NotFound, self.process, 'Workcases') |
130 self.assertRaises(NotFound, self.process, req, 'CWUser/eid/30000') |
105 self.assertRaises(NotFound, self.process, 'CWUser/inexistant_attribute/joe') |
131 self.assertRaises(NotFound, self.process, req, 'Workcases') |
|
132 self.assertRaises(NotFound, self.process, req, 'CWUser/inexistant_attribute/joe') |
106 |
133 |
107 def test_action_path(self): |
134 def test_action_path(self): |
108 """tests the action path resolution""" |
135 """tests the action path resolution""" |
109 self.assertRaises(Redirect, self.process, '1/edit') |
136 with self.admin_access.web_request() as req: |
110 self.assertRaises(Redirect, self.process, 'Tag/name/yo/edit') |
137 self.assertRaises(Redirect, self.process, req, '1/edit') |
111 self.assertRaises(Redirect, self.process, 'Tag/yo/edit') |
138 self.assertRaises(Redirect, self.process, req, 'Tag/name/yo/edit') |
112 self.assertRaises(NotFound, self.process, 'view/edit') |
139 self.assertRaises(Redirect, self.process, req, 'Tag/yo/edit') |
113 self.assertRaises(NotFound, self.process, '1/non_action') |
140 self.assertRaises(NotFound, self.process, req, 'view/edit') |
114 self.assertRaises(NotFound, self.process, 'CWUser/login/admin/non_action') |
141 self.assertRaises(NotFound, self.process, req, '1/non_action') |
|
142 self.assertRaises(NotFound, self.process, req, 'CWUser/login/admin/non_action') |
115 |
143 |
116 |
144 |
117 def test_regexp_path(self): |
145 def test_regexp_path(self): |
118 """tests the regexp path resolution""" |
146 """tests the regexp path resolution""" |
119 ctrl, rset = self.process('add/Task') |
147 with self.admin_access.web_request() as req: |
120 self.assertEqual(ctrl, 'view') |
148 ctrl, rset = self.process(req, 'add/Task') |
121 self.assertEqual(rset, None) |
149 self.assertEqual(ctrl, 'view') |
122 self.assertEqual(self.req.form, {'etype' : "Task", 'vid' : "creation"}) |
150 self.assertEqual(rset, None) |
123 self.assertRaises(NotFound, self.process, 'add/foo/bar') |
151 self.assertEqual(req.form, {'etype' : "Task", 'vid' : "creation"}) |
124 |
152 self.assertRaises(NotFound, self.process, req, 'add/foo/bar') |
125 |
153 |
126 def test_nonascii_path(self): |
154 def test_nonascii_path(self): |
127 oldrules = SimpleReqRewriter.rules |
155 oldrules = SimpleReqRewriter.rules |
128 SimpleReqRewriter.rules = [(re.compile('/\w+', re.U), dict(vid='foo')),] |
156 SimpleReqRewriter.rules = [(re.compile('/\w+', re.U), dict(vid='foo')),] |
129 try: |
157 with self.admin_access.web_request() as req: |
130 path = str(FakeRequest().url_quote(u'été')) |
158 try: |
131 ctrl, rset = self.process(path) |
159 path = str(FakeRequest().url_quote(u'été')) |
132 self.assertEqual(rset, None) |
160 ctrl, rset = self.process(req, path) |
133 self.assertEqual(self.req.form, {'vid' : "foo"}) |
161 self.assertEqual(rset, None) |
134 finally: |
162 self.assertEqual(req.form, {'vid' : "foo"}) |
135 SimpleReqRewriter.rules = oldrules |
163 finally: |
|
164 SimpleReqRewriter.rules = oldrules |
136 |
165 |
137 |
166 |
138 if __name__ == '__main__': |
167 if __name__ == '__main__': |
139 unittest_main() |
168 unittest_main() |