--- a/server/test/unittest_msplanner.py Tue Aug 18 09:25:44 2009 +0200
+++ b/server/test/unittest_msplanner.py Fri Aug 21 16:26:20 2009 +0200
@@ -43,18 +43,19 @@
def syntax_tree_search(self, *args, **kwargs):
return []
-X_ALL_SOLS = sorted([{'X': 'Affaire'}, {'X': 'Basket'}, {'X': 'Bookmark'},
+X_ALL_SOLS = sorted([{'X': 'Affaire'}, {'X': 'BaseTransition'}, {'X': 'Basket'},
+ {'X': 'Bookmark'}, {'X': 'CWAttribute'}, {'X': 'CWCache'},
+ {'X': 'CWConstraint'}, {'X': 'CWConstraintType'}, {'X': 'CWEType'},
+ {'X': 'CWGroup'}, {'X': 'CWPermission'}, {'X': 'CWProperty'},
+ {'X': 'CWRType'}, {'X': 'CWRelation'}, {'X': 'CWUser'},
{'X': 'Card'}, {'X': 'Comment'}, {'X': 'Division'},
- {'X': 'CWCache'}, {'X': 'CWConstraint'}, {'X': 'CWConstraintType'},
- {'X': 'CWEType'}, {'X': 'CWAttribute'}, {'X': 'CWGroup'},
- {'X': 'CWRelation'}, {'X': 'CWPermission'}, {'X': 'CWProperty'},
- {'X': 'CWRType'}, {'X': 'CWUser'}, {'X': 'Email'},
- {'X': 'EmailAddress'}, {'X': 'EmailPart'}, {'X': 'EmailThread'},
- {'X': 'ExternalUri'},
- {'X': 'File'}, {'X': 'Folder'}, {'X': 'Image'},
- {'X': 'Note'}, {'X': 'Personne'}, {'X': 'RQLExpression'},
- {'X': 'Societe'}, {'X': 'State'}, {'X': 'SubDivision'},
- {'X': 'Tag'}, {'X': 'TrInfo'}, {'X': 'Transition'}])
+ {'X': 'Email'}, {'X': 'EmailAddress'}, {'X': 'EmailPart'},
+ {'X': 'EmailThread'}, {'X': 'ExternalUri'}, {'X': 'File'},
+ {'X': 'Folder'}, {'X': 'Image'}, {'X': 'Note'},
+ {'X': 'Personne'}, {'X': 'RQLExpression'}, {'X': 'Societe'},
+ {'X': 'State'}, {'X': 'SubDivision'}, {'X': 'SubWorkflowExitPoint'},
+ {'X': 'Tag'}, {'X': 'TrInfo'}, {'X': 'Transition'},
+ {'X': 'Workflow'}, {'X': 'WorkflowTransition'}])
# keep cnx so it's not garbage collected and the associated session is closed
@@ -770,12 +771,13 @@
[{'X': 'Basket'}]),
('Any X WHERE X has_text "bla", EXISTS(X owned_by 5), X is CWUser',
[{'X': 'CWUser'}]),
- ('Any X WHERE X has_text "bla", X is IN(Card, Comment, Division, Email, EmailThread, File, Folder, Image, Note, Personne, Societe, State, SubDivision, Tag, Transition)',
- [{'X': 'Card'}, {'X': 'Comment'}, {'X': 'Division'},
- {'X': 'Email'}, {'X': 'EmailThread'}, {'X': 'File'},
- {'X': 'Folder'}, {'X': 'Image'}, {'X': 'Note'},
- {'X': 'Personne'}, {'X': 'Societe'}, {'X': 'State'},
- {'X': 'SubDivision'}, {'X': 'Tag'}, {'X': 'Transition'}]),],
+ ('Any X WHERE X has_text "bla", X is IN(BaseTransition, Card, Comment, Division, Email, EmailThread, File, Folder, Image, Note, Personne, Societe, State, SubDivision, Tag, Transition, Workflow, WorkflowTransition)',
+ [{'X': 'BaseTransition'}, {'X': 'Card'}, {'X': 'Comment'},
+ {'X': 'Division'}, {'X': 'Email'}, {'X': 'EmailThread'},
+ {'X': 'File'}, {'X': 'Folder'}, {'X': 'Image'},
+ {'X': 'Note'}, {'X': 'Personne'}, {'X': 'Societe'},
+ {'X': 'State'}, {'X': 'SubDivision'}, {'X': 'Tag'},
+ {'X': 'Transition'}, {'X': 'Workflow'}, {'X': 'WorkflowTransition'}]),],
None, None, [self.system], {}, []),
])
])
@@ -793,25 +795,27 @@
[self.system], {'E': 'table1.C0'}, {'X': 'table0.C0'}, []),
('FetchStep',
[('Any X WHERE X has_text "bla", EXISTS(X owned_by 5), X is Basket',
- [{'X': 'Basket'}]),
- ('Any X WHERE X has_text "bla", EXISTS(X owned_by 5), X is CWUser',
- [{'X': 'CWUser'}]),
- ('Any X WHERE X has_text "bla", X is IN(Card, Comment, Division, Email, EmailThread, File, Folder, Image, Note, Personne, Societe, State, SubDivision, Tag, Transition)',
- [{'X': 'Card'}, {'X': 'Comment'}, {'X': 'Division'},
- {'X': 'Email'}, {'X': 'EmailThread'}, {'X': 'File'},
- {'X': 'Folder'}, {'X': 'Image'}, {'X': 'Note'},
- {'X': 'Personne'}, {'X': 'Societe'}, {'X': 'State'},
- {'X': 'SubDivision'}, {'X': 'Tag'}, {'X': 'Transition'}]),],
+ [{'X': 'Basket'}]),
+ ('Any X WHERE X has_text "bla", EXISTS(X owned_by 5), X is CWUser',
+ [{'X': 'CWUser'}]),
+ ('Any X WHERE X has_text "bla", X is IN(BaseTransition, Card, Comment, Division, Email, EmailThread, File, Folder, Image, Note, Personne, Societe, State, SubDivision, Tag, Transition, Workflow, WorkflowTransition)',
+ [{'X': 'BaseTransition'}, {'X': 'Card'}, {'X': 'Comment'},
+ {'X': 'Division'}, {'X': 'Email'}, {'X': 'EmailThread'},
+ {'X': 'File'}, {'X': 'Folder'}, {'X': 'Image'},
+ {'X': 'Note'}, {'X': 'Personne'}, {'X': 'Societe'},
+ {'X': 'State'}, {'X': 'SubDivision'}, {'X': 'Tag'},
+ {'X': 'Transition'}, {'X': 'Workflow'}, {'X': 'WorkflowTransition'}])],
[self.system], {}, {'X': 'table0.C0'}, []),
]),
('OneFetchStep',
[('Any X LIMIT 10 OFFSET 10',
- [{'X': 'Affaire'}, {'X': 'Basket'}, {'X': 'Card'},
- {'X': 'Comment'}, {'X': 'Division'}, {'X': 'CWUser'},
- {'X': 'Email'}, {'X': 'EmailThread'}, {'X': 'File'},
- {'X': 'Folder'}, {'X': 'Image'}, {'X': 'Note'},
- {'X': 'Personne'}, {'X': 'Societe'}, {'X': 'State'},
- {'X': 'SubDivision'}, {'X': 'Tag'}, {'X': 'Transition'}])],
+ [{'X': 'Affaire'}, {'X': 'BaseTransition'}, {'X': 'Basket'},
+ {'X': 'CWUser'}, {'X': 'Card'}, {'X': 'Comment'},
+ {'X': 'Division'}, {'X': 'Email'}, {'X': 'EmailThread'},
+ {'X': 'File'}, {'X': 'Folder'}, {'X': 'Image'},
+ {'X': 'Note'}, {'X': 'Personne'}, {'X': 'Societe'},
+ {'X': 'State'}, {'X': 'SubDivision'}, {'X': 'Tag'},
+ {'X': 'Transition'}, {'X': 'Workflow'}, {'X': 'WorkflowTransition'}])],
10, 10, [self.system], {'X': 'table0.C0'}, [])
])
@@ -874,16 +878,23 @@
[{'X': 'Card'}, {'X': 'Note'}, {'X': 'State'}])],
[self.cards, self.system], {}, {'X': 'table0.C0'}, []),
('FetchStep',
- [('Any X WHERE X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, Tag, TrInfo, Transition)',
- sorted([{'X': 'Bookmark'}, {'X': 'Comment'}, {'X': 'Division'},
- {'X': 'CWCache'}, {'X': 'CWConstraint'}, {'X': 'CWConstraintType'},
- {'X': 'CWEType'}, {'X': 'CWAttribute'}, {'X': 'CWGroup'},
- {'X': 'CWRelation'}, {'X': 'CWPermission'}, {'X': 'CWProperty'},
- {'X': 'CWRType'}, {'X': 'Email'}, {'X': 'EmailAddress'},
- {'X': 'EmailPart'}, {'X': 'EmailThread'}, {'X': 'ExternalUri'}, {'X': 'File'},
- {'X': 'Folder'}, {'X': 'Image'}, {'X': 'Personne'},
- {'X': 'RQLExpression'}, {'X': 'Societe'}, {'X': 'SubDivision'},
- {'X': 'Tag'}, {'X': 'TrInfo'}, {'X': 'Transition'}]))],
+ [('Any X WHERE X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)',
+ [{'X': 'BaseTransition'}, {'X': 'Bookmark'},
+ {'X': 'CWAttribute'}, {'X': 'CWCache'},
+ {'X': 'CWConstraint'}, {'X': 'CWConstraintType'},
+ {'X': 'CWEType'}, {'X': 'CWGroup'},
+ {'X': 'CWPermission'}, {'X': 'CWProperty'},
+ {'X': 'CWRType'}, {'X': 'CWRelation'},
+ {'X': 'Comment'}, {'X': 'Division'},
+ {'X': 'Email'}, {'X': 'EmailAddress'},
+ {'X': 'EmailPart'}, {'X': 'EmailThread'},
+ {'X': 'ExternalUri'}, {'X': 'File'},
+ {'X': 'Folder'}, {'X': 'Image'},
+ {'X': 'Personne'}, {'X': 'RQLExpression'},
+ {'X': 'Societe'}, {'X': 'SubDivision'},
+ {'X': 'SubWorkflowExitPoint'}, {'X': 'Tag'},
+ {'X': 'TrInfo'}, {'X': 'Transition'},
+ {'X': 'Workflow'}, {'X': 'WorkflowTransition'}])],
[self.system], {}, {'X': 'table0.C0'}, []),
]),
('FetchStep', [('Any X WHERE EXISTS(X owned_by 5), X is CWUser', [{'X': 'CWUser'}])],
@@ -899,6 +910,11 @@
def test_security_complex_aggregat2(self):
# use a guest user
self.session = self._user_session()[1]
+ X_ET_ALL_SOLS = []
+ for s in X_ALL_SOLS:
+ ets = {'ET': 'CWEType'}
+ ets.update(s)
+ X_ET_ALL_SOLS.append(ets)
self._test('Any ET, COUNT(X) GROUPBY ET ORDERBY ET WHERE X is ET',
[('FetchStep', [('Any X WHERE X is IN(Card, Note, State)',
[{'X': 'Card'}, {'X': 'Note'}, {'X': 'State'}])],
@@ -923,23 +939,24 @@
[self.system], {'X': 'table3.C0'}, {'ET': 'table0.C0', 'X': 'table0.C1'}, []),
# extra UnionFetchStep could be avoided but has no cost, so don't care
('UnionFetchStep',
- [('FetchStep', [('Any ET,X WHERE X is ET, ET is CWEType, X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, Tag, TrInfo, Transition)',
- [{'X': 'Bookmark', 'ET': 'CWEType'}, {'X': 'Comment', 'ET': 'CWEType'},
- {'X': 'Division', 'ET': 'CWEType'}, {'X': 'CWCache', 'ET': 'CWEType'},
- {'X': 'CWConstraint', 'ET': 'CWEType'}, {'X': 'CWConstraintType', 'ET': 'CWEType'},
- {'X': 'CWEType', 'ET': 'CWEType'}, {'X': 'CWAttribute', 'ET': 'CWEType'},
- {'X': 'CWGroup', 'ET': 'CWEType'}, {'X': 'CWRelation', 'ET': 'CWEType'},
- {'X': 'CWPermission', 'ET': 'CWEType'}, {'X': 'CWProperty', 'ET': 'CWEType'},
- {'X': 'CWRType', 'ET': 'CWEType'}, {'X': 'Email', 'ET': 'CWEType'},
+ [('FetchStep', [('Any ET,X WHERE X is ET, ET is CWEType, X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Personne, RQLExpression, Societe, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)',
+ [{'X': 'BaseTransition', 'ET': 'CWEType'},
+ {'X': 'Bookmark', 'ET': 'CWEType'}, {'X': 'CWAttribute', 'ET': 'CWEType'},
+ {'X': 'CWCache', 'ET': 'CWEType'}, {'X': 'CWConstraint', 'ET': 'CWEType'},
+ {'X': 'CWConstraintType', 'ET': 'CWEType'}, {'X': 'CWEType', 'ET': 'CWEType'},
+ {'X': 'CWGroup', 'ET': 'CWEType'}, {'X': 'CWPermission', 'ET': 'CWEType'},
+ {'X': 'CWProperty', 'ET': 'CWEType'}, {'X': 'CWRType', 'ET': 'CWEType'},
+ {'X': 'CWRelation', 'ET': 'CWEType'}, {'X': 'Comment', 'ET': 'CWEType'},
+ {'X': 'Division', 'ET': 'CWEType'}, {'X': 'Email', 'ET': 'CWEType'},
{'X': 'EmailAddress', 'ET': 'CWEType'}, {'X': 'EmailPart', 'ET': 'CWEType'},
- {'X': 'EmailThread', 'ET': 'CWEType'},
- {'ET': 'CWEType', 'X': 'ExternalUri'},
- {'X': 'File', 'ET': 'CWEType'},
- {'X': 'Folder', 'ET': 'CWEType'}, {'X': 'Image', 'ET': 'CWEType'},
- {'X': 'Personne', 'ET': 'CWEType'}, {'X': 'RQLExpression', 'ET': 'CWEType'},
- {'X': 'Societe', 'ET': 'CWEType'}, {'X': 'SubDivision', 'ET': 'CWEType'},
+ {'X': 'EmailThread', 'ET': 'CWEType'}, {'X': 'ExternalUri', 'ET': 'CWEType'},
+ {'X': 'File', 'ET': 'CWEType'}, {'X': 'Folder', 'ET': 'CWEType'},
+ {'X': 'Image', 'ET': 'CWEType'}, {'X': 'Personne', 'ET': 'CWEType'},
+ {'X': 'RQLExpression', 'ET': 'CWEType'}, {'X': 'Societe', 'ET': 'CWEType'},
+ {'X': 'SubDivision', 'ET': 'CWEType'}, {'X': 'SubWorkflowExitPoint', 'ET': 'CWEType'},
{'X': 'Tag', 'ET': 'CWEType'}, {'X': 'TrInfo', 'ET': 'CWEType'},
- {'X': 'Transition', 'ET': 'CWEType'}])],
+ {'X': 'Transition', 'ET': 'CWEType'}, {'X': 'Workflow', 'ET': 'CWEType'},
+ {'X': 'WorkflowTransition', 'ET': 'CWEType'}])],
[self.system], {}, {'ET': 'table0.C0', 'X': 'table0.C1'}, []),
('FetchStep',
[('Any ET,X WHERE X is ET, ET is CWEType, X is IN(Card, Note, State)',
@@ -950,26 +967,7 @@
]),
]),
('OneFetchStep',
- [('Any ET,COUNT(X) GROUPBY ET ORDERBY ET',
- sorted([{'ET': 'CWEType', 'X': 'Affaire'}, {'ET': 'CWEType', 'X': 'Basket'},
- {'ET': 'CWEType', 'X': 'Bookmark'}, {'ET': 'CWEType', 'X': 'Card'},
- {'ET': 'CWEType', 'X': 'Comment'}, {'ET': 'CWEType', 'X': 'Division'},
- {'ET': 'CWEType', 'X': 'CWCache'}, {'ET': 'CWEType', 'X': 'CWConstraint'},
- {'ET': 'CWEType', 'X': 'CWConstraintType'}, {'ET': 'CWEType', 'X': 'CWEType'},
- {'ET': 'CWEType', 'X': 'CWAttribute'}, {'ET': 'CWEType', 'X': 'CWGroup'},
- {'ET': 'CWEType', 'X': 'CWRelation'}, {'ET': 'CWEType', 'X': 'CWPermission'},
- {'ET': 'CWEType', 'X': 'CWProperty'}, {'ET': 'CWEType', 'X': 'CWRType'},
- {'ET': 'CWEType', 'X': 'CWUser'}, {'ET': 'CWEType', 'X': 'Email'},
- {'ET': 'CWEType', 'X': 'EmailAddress'}, {'ET': 'CWEType', 'X': 'EmailPart'},
- {'ET': 'CWEType', 'X': 'EmailThread'},
- {'ET': 'CWEType', 'X': 'ExternalUri'},
- {'ET': 'CWEType', 'X': 'File'},
- {'ET': 'CWEType', 'X': 'Folder'}, {'ET': 'CWEType', 'X': 'Image'},
- {'ET': 'CWEType', 'X': 'Note'}, {'ET': 'CWEType', 'X': 'Personne'},
- {'ET': 'CWEType', 'X': 'RQLExpression'}, {'ET': 'CWEType', 'X': 'Societe'},
- {'ET': 'CWEType', 'X': 'State'}, {'ET': 'CWEType', 'X': 'SubDivision'},
- {'ET': 'CWEType', 'X': 'Tag'}, {'ET': 'CWEType', 'X': 'TrInfo'},
- {'ET': 'CWEType', 'X': 'Transition'}]))],
+ [('Any ET,COUNT(X) GROUPBY ET ORDERBY ET', X_ET_ALL_SOLS)],
None, None, [self.system], {'ET': 'table0.C0', 'X': 'table0.C1'}, [])
])
@@ -1707,6 +1705,7 @@
])
def test_nonregr2(self):
+ self.session.user.fire_transition('deactivate')
treid = self.session.user.latest_trinfo().eid
self._test('Any X ORDERBY D DESC WHERE E eid %(x)s, E wf_info_for X, X modification_date D',
[('FetchStep', [('Any X,D WHERE X modification_date D, X is Note',