177 ' CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, ' |
177 ' CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, ' |
178 ' CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, CWUser, Card, ' |
178 ' CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, CWUser, Card, ' |
179 ' Comment, Division, Email, EmailPart, EmailThread, ExternalUri, File, Folder, ' |
179 ' Comment, Division, Email, EmailPart, EmailThread, ExternalUri, File, Folder, ' |
180 ' Frozable, Note, Old, Personne, RQLExpression, Societe, State, SubDivision, ' |
180 ' Frozable, Note, Old, Personne, RQLExpression, Societe, State, SubDivision, ' |
181 ' SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
181 ' SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
182 self.assertListEqual(sorted(solutions), |
182 self.assertCountEqual(solutions, |
183 sorted([{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
183 [{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
184 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
184 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
185 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
185 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
186 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
186 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
187 {'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'}, |
187 {'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'}, |
188 {'X': 'CWCache', 'ETN': 'String', 'ET': 'CWEType'}, |
188 {'X': 'CWCache', 'ETN': 'String', 'ET': 'CWEType'}, |
189 {'X': 'CWComputedRType', 'ETN': 'String', 'ET': 'CWEType'}, |
189 {'X': 'CWComputedRType', 'ETN': 'String', 'ET': 'CWEType'}, |
190 {'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
190 {'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
191 {'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'}, |
191 {'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'}, |
192 {'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'}, |
192 {'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'}, |
193 {'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'}, |
193 {'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'}, |
194 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
194 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
195 {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'}, |
195 {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'}, |
196 {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'}, |
196 {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'}, |
197 {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'}, |
197 {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'}, |
198 {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'}, |
198 {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'}, |
199 {'X': 'CWSource', 'ETN': 'String', 'ET': 'CWEType'}, |
199 {'X': 'CWSource', 'ETN': 'String', 'ET': 'CWEType'}, |
200 {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
200 {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
201 {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'}, |
201 {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'}, |
202 {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'}, |
202 {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'}, |
203 {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'}, |
203 {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'}, |
204 {'X': 'EmailThread', 'ETN': 'String', 'ET': 'CWEType'}, |
204 {'X': 'EmailThread', 'ETN': 'String', 'ET': 'CWEType'}, |
205 {'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'}, |
205 {'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'}, |
206 {'X': 'File', 'ETN': 'String', 'ET': 'CWEType'}, |
206 {'X': 'File', 'ETN': 'String', 'ET': 'CWEType'}, |
207 {'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'}, |
207 {'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'}, |
208 {'X': 'Frozable', 'ETN': 'String', 'ET': 'CWEType'}, |
208 {'X': 'Frozable', 'ETN': 'String', 'ET': 'CWEType'}, |
209 {'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'}, |
209 {'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'}, |
210 {'X': 'Old', 'ETN': 'String', 'ET': 'CWEType'}, |
210 {'X': 'Old', 'ETN': 'String', 'ET': 'CWEType'}, |
211 {'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'}, |
211 {'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'}, |
212 {'X': 'RQLExpression', 'ETN': 'String', 'ET': 'CWEType'}, |
212 {'X': 'RQLExpression', 'ETN': 'String', 'ET': 'CWEType'}, |
213 {'X': 'Societe', 'ETN': 'String', 'ET': 'CWEType'}, |
213 {'X': 'Societe', 'ETN': 'String', 'ET': 'CWEType'}, |
214 {'X': 'State', 'ETN': 'String', 'ET': 'CWEType'}, |
214 {'X': 'State', 'ETN': 'String', 'ET': 'CWEType'}, |
215 {'X': 'SubDivision', 'ETN': 'String', 'ET': 'CWEType'}, |
215 {'X': 'SubDivision', 'ETN': 'String', 'ET': 'CWEType'}, |
216 {'X': 'SubWorkflowExitPoint', 'ETN': 'String', 'ET': 'CWEType'}, |
216 {'X': 'SubWorkflowExitPoint', 'ETN': 'String', 'ET': 'CWEType'}, |
217 {'X': 'Tag', 'ETN': 'String', 'ET': 'CWEType'}, |
217 {'X': 'Tag', 'ETN': 'String', 'ET': 'CWEType'}, |
218 {'X': 'Transition', 'ETN': 'String', 'ET': 'CWEType'}, |
218 {'X': 'Transition', 'ETN': 'String', 'ET': 'CWEType'}, |
219 {'X': 'TrInfo', 'ETN': 'String', 'ET': 'CWEType'}, |
219 {'X': 'TrInfo', 'ETN': 'String', 'ET': 'CWEType'}, |
220 {'X': 'Workflow', 'ETN': 'String', 'ET': 'CWEType'}, |
220 {'X': 'Workflow', 'ETN': 'String', 'ET': 'CWEType'}, |
221 {'X': 'WorkflowTransition', 'ETN': 'String', 'ET': 'CWEType'}])) |
221 {'X': 'WorkflowTransition', 'ETN': 'String', 'ET': 'CWEType'}]) |
222 rql, solutions = partrqls[2] |
222 rql, solutions = partrqls[2] |
223 self.assertEqual(rql, |
223 self.assertEqual(rql, |
224 'Any ETN,X WHERE X is ET, ET name ETN, EXISTS(%(D)s use_email X), ' |
224 'Any ETN,X WHERE X is ET, ET name ETN, EXISTS(%(D)s use_email X), ' |
225 'ET is CWEType, X is EmailAddress') |
225 'ET is CWEType, X is EmailAddress') |
226 self.assertEqual(solutions, [{'X': 'EmailAddress', 'ET': 'CWEType', 'ETN': 'String'}]) |
226 self.assertEqual(solutions, [{'X': 'EmailAddress', 'ET': 'CWEType', 'ETN': 'String'}]) |