2 """XXX rename, split, reorganize this |
2 """XXX rename, split, reorganize this |
3 """ |
3 """ |
4 from __future__ import with_statement |
4 from __future__ import with_statement |
5 |
5 |
6 from logilab.common.testlib import unittest_main |
6 from logilab.common.testlib import unittest_main |
|
7 |
7 from cubicweb.devtools.apptest import EnvBasedTC |
8 from cubicweb.devtools.apptest import EnvBasedTC |
8 |
|
9 |
|
10 from cubicweb import CW_SOFTWARE_ROOT as BASE, Binary |
9 from cubicweb import CW_SOFTWARE_ROOT as BASE, Binary |
11 from cubicweb.selectors import match_user_groups, implements, rql_condition, traced_selection |
10 from cubicweb.selectors import (match_user_groups, implements, |
12 |
11 specified_etype_implements, rql_condition, |
13 from cubicweb.web._exceptions import NoSelectableObject |
12 traced_selection) |
|
13 from cubicweb.web import NoSelectableObject |
14 from cubicweb.web.action import Action |
14 from cubicweb.web.action import Action |
15 from cubicweb.web.views import (baseviews, tableview, baseforms, calendar, |
15 from cubicweb.web.views import (baseviews, tableview, baseforms, calendar, |
16 management, embedding, actions, startup, |
16 management, embedding, actions, startup, |
17 euser, schemaentities, xbel, vcard, owl, |
17 euser, schemaentities, xbel, vcard, owl, |
18 treeview, idownloadable, wdoc, debug, eproperties) |
18 treeview, idownloadable, wdoc, debug, eproperties) |
59 print 'no more', [v for v in expected if not v in content.keys()] |
59 print 'no more', [v for v in expected if not v in content.keys()] |
60 print 'missing', [v for v in content.keys() if not v in expected] |
60 print 'missing', [v for v in content.keys() if not v in expected] |
61 raise |
61 raise |
62 |
62 |
63 |
63 |
64 def test_possible_views(self): |
64 def test_possible_views_none_rset(self): |
65 # no entity |
|
66 req = self.request() |
65 req = self.request() |
67 self.assertListEqual(self.pviews(req, None), |
66 self.assertListEqual(self.pviews(req, None), |
68 [('changelog', wdoc.ChangeLogView), |
67 [('changelog', wdoc.ChangeLogView), |
69 ('debug', debug.DebugView), |
68 ('debug', debug.DebugView), |
70 ('epropertiesform', eproperties.EPropertiesForm), |
69 ('epropertiesform', eproperties.EPropertiesForm), |
72 ('info', management.ProcessInformationView), |
71 ('info', management.ProcessInformationView), |
73 ('manage', startup.ManageView), |
72 ('manage', startup.ManageView), |
74 ('owl', owl.OWLView), |
73 ('owl', owl.OWLView), |
75 ('schema', startup.SchemaView), |
74 ('schema', startup.SchemaView), |
76 ('systemepropertiesform', eproperties.SystemEPropertiesForm)]) |
75 ('systemepropertiesform', eproperties.SystemEPropertiesForm)]) |
77 # no entity but etype |
76 |
|
77 def test_possible_views_noresult(self): |
78 rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999') |
78 rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999') |
79 self.assertListEqual(self.pviews(req, rset), |
79 self.assertListEqual(self.pviews(req, rset), |
80 []) |
80 []) |
81 # one entity |
81 |
|
82 def test_possible_views_one_egroup(self): |
82 rset, req = self.env.get_rset_and_req('EGroup X WHERE X name "managers"') |
83 rset, req = self.env.get_rset_and_req('EGroup X WHERE X name "managers"') |
83 self.assertListEqual(self.pviews(req, rset), |
84 self.assertListEqual(self.pviews(req, rset), |
84 [('csvexport', baseviews.CSVRsetView), |
85 [('csvexport', baseviews.CSVRsetView), |
85 ('ecsvexport', baseviews.CSVEntityView), |
86 ('ecsvexport', baseviews.CSVEntityView), |
86 ('editable-table', tableview.EditableTableView), |
87 ('editable-table', tableview.EditableTableView), |
97 ('text', baseviews.TextView), |
98 ('text', baseviews.TextView), |
98 ('treeview', treeview.TreeView), |
99 ('treeview', treeview.TreeView), |
99 ('xbel', xbel.XbelView), |
100 ('xbel', xbel.XbelView), |
100 ('xml', baseviews.XmlView), |
101 ('xml', baseviews.XmlView), |
101 ]) |
102 ]) |
102 # list of entities of the same type |
103 |
|
104 def test_possible_views_multiple_egroups(self): |
103 rset, req = self.env.get_rset_and_req('EGroup X') |
105 rset, req = self.env.get_rset_and_req('EGroup X') |
104 self.assertListEqual(self.pviews(req, rset), |
106 self.assertListEqual(self.pviews(req, rset), |
105 [('csvexport', baseviews.CSVRsetView), |
107 [('csvexport', baseviews.CSVRsetView), |
106 ('ecsvexport', baseviews.CSVEntityView), |
108 ('ecsvexport', baseviews.CSVEntityView), |
107 ('editable-table', tableview.EditableTableView), |
109 ('editable-table', tableview.EditableTableView), |
118 ('text', baseviews.TextView), |
120 ('text', baseviews.TextView), |
119 ('treeview', treeview.TreeView), |
121 ('treeview', treeview.TreeView), |
120 ('xbel', xbel.XbelView), |
122 ('xbel', xbel.XbelView), |
121 ('xml', baseviews.XmlView), |
123 ('xml', baseviews.XmlView), |
122 ]) |
124 ]) |
123 # list of entities of different types |
125 |
|
126 def test_possible_views_multiple_different_types(self): |
124 rset, req = self.env.get_rset_and_req('Any X') |
127 rset, req = self.env.get_rset_and_req('Any X') |
125 self.assertListEqual(self.pviews(req, rset), |
128 self.assertListEqual(self.pviews(req, rset), |
126 [('csvexport', baseviews.CSVRsetView), |
129 [('csvexport', baseviews.CSVRsetView), |
127 ('ecsvexport', baseviews.CSVEntityView), |
130 ('ecsvexport', baseviews.CSVEntityView), |
128 ('editable-table', tableview.EditableTableView), |
131 ('editable-table', tableview.EditableTableView), |
139 ('text', baseviews.TextView), |
142 ('text', baseviews.TextView), |
140 ('treeview', treeview.TreeView), |
143 ('treeview', treeview.TreeView), |
141 ('xbel', xbel.XbelView), |
144 ('xbel', xbel.XbelView), |
142 ('xml', baseviews.XmlView), |
145 ('xml', baseviews.XmlView), |
143 ]) |
146 ]) |
144 # whatever |
147 |
|
148 def test_possible_views_any_rset(self): |
145 rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
149 rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
146 self.assertListEqual(self.pviews(req, rset), |
150 self.assertListEqual(self.pviews(req, rset), |
147 [('csvexport', baseviews.CSVRsetView), |
151 [('csvexport', baseviews.CSVRsetView), |
148 ('editable-table', tableview.EditableTableView), |
152 ('editable-table', tableview.EditableTableView), |
149 ('rsetxml', baseviews.XMLRsetView), |
153 ('rsetxml', baseviews.XMLRsetView), |
150 ('table', tableview.TableView), |
154 ('table', tableview.TableView), |
151 ]) |
155 ]) |
152 # list of euser entities |
156 |
|
157 def test_possible_views_multiple_eusers(self): |
153 rset, req = self.env.get_rset_and_req('EUser X') |
158 rset, req = self.env.get_rset_and_req('EUser X') |
154 self.assertListEqual(self.pviews(req, rset), |
159 self.assertListEqual(self.pviews(req, rset), |
155 [('csvexport', baseviews.CSVRsetView), |
160 [('csvexport', baseviews.CSVRsetView), |
156 ('ecsvexport', baseviews.CSVEntityView), |
161 ('ecsvexport', baseviews.CSVEntityView), |
157 ('editable-table', tableview.EditableTableView), |
162 ('editable-table', tableview.EditableTableView), |
176 def test_possible_actions_none_rset(self): |
181 def test_possible_actions_none_rset(self): |
177 req = self.request() |
182 req = self.request() |
178 self.assertDictEqual(self.pactions(req, None), |
183 self.assertDictEqual(self.pactions(req, None), |
179 {'useractions': USERACTIONS, |
184 {'useractions': USERACTIONS, |
180 'siteactions': SITEACTIONS, |
185 'siteactions': SITEACTIONS, |
|
186 |
181 }) |
187 }) |
182 def test_possible_actions_no_entity(self): |
188 def test_possible_actions_no_entity(self): |
183 rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999') |
189 rset, req = self.env.get_rset_and_req('Any X WHERE X eid 999999') |
184 self.assertDictEqual(self.pactions(req, rset), |
190 self.assertDictEqual(self.pactions(req, rset), |
185 {'useractions': USERACTIONS, |
191 {'useractions': USERACTIONS, |
186 'siteactions': SITEACTIONS, |
192 'siteactions': SITEACTIONS, |
187 }) |
193 }) |
|
194 |
188 def test_possible_actions_same_type_entities(self): |
195 def test_possible_actions_same_type_entities(self): |
189 rset, req = self.env.get_rset_and_req('EGroup X') |
196 rset, req = self.env.get_rset_and_req('EGroup X') |
190 self.assertDictEqual(self.pactions(req, rset), |
197 self.assertDictEqual(self.pactions(req, rset), |
191 {'useractions': USERACTIONS, |
198 {'useractions': USERACTIONS, |
192 'siteactions': SITEACTIONS, |
199 'siteactions': SITEACTIONS, |
193 'mainactions': [('muledit', actions.MultipleEditAction)], |
200 'mainactions': [('muledit', actions.MultipleEditAction)], |
194 'moreactions': [('delete', actions.DeleteAction), |
201 'moreactions': [('delete', actions.DeleteAction), |
195 ('addentity', actions.AddNewAction)], |
202 ('addentity', actions.AddNewAction)], |
196 }) |
203 }) |
|
204 |
197 def test_possible_actions_different_types_entities(self): |
205 def test_possible_actions_different_types_entities(self): |
198 rset, req = self.env.get_rset_and_req('Any X') |
206 rset, req = self.env.get_rset_and_req('Any X') |
199 self.assertDictEqual(self.pactions(req, rset), |
207 self.assertDictEqual(self.pactions(req, rset), |
200 {'useractions': USERACTIONS, |
208 {'useractions': USERACTIONS, |
201 'siteactions': SITEACTIONS, |
209 'siteactions': SITEACTIONS, |
202 'moreactions': [('delete', actions.DeleteAction)], |
210 'moreactions': [('delete', actions.DeleteAction)], |
203 }) |
211 }) |
|
212 |
204 def test_possible_actions_final_entities(self): |
213 def test_possible_actions_final_entities(self): |
205 rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
214 rset, req = self.env.get_rset_and_req('Any N, X WHERE X in_group Y, Y name N') |
206 self.assertDictEqual(self.pactions(req, rset), |
215 self.assertDictEqual(self.pactions(req, rset), |
207 {'useractions': USERACTIONS, |
216 {'useractions': USERACTIONS, |
208 'siteactions': SITEACTIONS}) |
217 'siteactions': SITEACTIONS}) |
213 {'useractions': USERACTIONS, |
222 {'useractions': USERACTIONS, |
214 'siteactions': SITEACTIONS, |
223 'siteactions': SITEACTIONS, |
215 'mainactions': [('edit', actions.ModifyAction), |
224 'mainactions': [('edit', actions.ModifyAction), |
216 ('workflow', schemaentities.ViewWorkflowAction),], |
225 ('workflow', schemaentities.ViewWorkflowAction),], |
217 'moreactions': [('delete', actions.DeleteAction), |
226 'moreactions': [('delete', actions.DeleteAction), |
218 ('copy', actions.CopyAction)], |
227 ('copy', actions.CopyAction), |
|
228 ('managepermission', actions.ManagePermissionsAction)], |
219 }) |
229 }) |
220 |
230 |
221 |
231 |
222 def test_select_creation_form(self): |
232 def test_select_creation_form(self): |
223 rset = None |
233 rset = None |
227 self.assertIsInstance(self.vreg.select_view('creation', req, rset), |
237 self.assertIsInstance(self.vreg.select_view('creation', req, rset), |
228 baseforms.CreationForm) |
238 baseforms.CreationForm) |
229 del req.form['etype'] |
239 del req.form['etype'] |
230 # custom creation form |
240 # custom creation form |
231 class EUserCreationForm(baseforms.CreationForm): |
241 class EUserCreationForm(baseforms.CreationForm): |
232 __select__ = implements('EUSer') |
242 __select__ = specified_etype_implements('EUser') |
233 self.vreg.register_vobject_class(EUserCreationForm) |
243 self.vreg.register_vobject_class(EUserCreationForm) |
234 req.form['etype'] = 'EUser' |
244 req.form['etype'] = 'EUser' |
235 self.assertIsInstance(self.vreg.select_view('creation', req, rset), |
245 self.assertIsInstance(self.vreg.select_view('creation', req, rset), |
236 EUserCreationForm) |
246 EUserCreationForm) |
237 |
247 |