test/unittest_schema.py
changeset 9547 43aace16a953
parent 9280 bae0caa8477a
child 9640 26ea1c4387bf
equal deleted inserted replaced
9546:a0cf2993b6d3 9547:43aace16a953
     1 # copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     1 # copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 #
     3 #
     4 # This file is part of CubicWeb.
     4 # This file is part of CubicWeb.
     5 #
     5 #
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
   353 class WorkflowShemaTC(CubicWebTC):
   353 class WorkflowShemaTC(CubicWebTC):
   354     def test_trinfo_default_format(self):
   354     def test_trinfo_default_format(self):
   355         tr = self.request().user.cw_adapt_to('IWorkflowable').fire_transition('deactivate')
   355         tr = self.request().user.cw_adapt_to('IWorkflowable').fire_transition('deactivate')
   356         self.assertEqual(tr.comment_format, 'text/plain')
   356         self.assertEqual(tr.comment_format, 'text/plain')
   357 
   357 
       
   358 
       
   359 class CompositeSchemaTC(CubicWebTC):
       
   360     composites = {
       
   361         'BaseTransition': [('condition', 'BaseTransition', 'RQLExpression', 'subject'),
       
   362                            ('condition', 'Transition', 'RQLExpression', 'subject'),
       
   363                            ('condition', 'WorkflowTransition', 'RQLExpression', 'subject')],
       
   364         'CWAttribute': [('add_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   365                         ('add_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   366                         ('add_permission', 'CWRelation', 'RQLExpression', 'subject'),
       
   367                         ('constrained_by', 'CWAttribute', 'CWConstraint', 'subject'),
       
   368                         ('constrained_by', 'CWRelation', 'CWConstraint', 'subject'),
       
   369                         ('read_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   370                         ('read_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   371                         ('read_permission', 'CWRelation', 'RQLExpression', 'subject'),
       
   372                         ('update_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   373                         ('update_permission', 'CWEType', 'RQLExpression', 'subject')],
       
   374         'CWEType': [('add_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   375                     ('add_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   376                     ('add_permission', 'CWRelation', 'RQLExpression', 'subject'),
       
   377                     ('constraint_of', 'CWUniqueTogetherConstraint', 'CWEType', 'object'),
       
   378                     ('cw_schema', 'CWSourceSchemaConfig', 'CWEType', 'object'),
       
   379                     ('cw_schema', 'CWSourceSchemaConfig', 'CWRType', 'object'),
       
   380                     ('cw_schema', 'CWSourceSchemaConfig', 'CWRelation', 'object'),
       
   381                     ('delete_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   382                     ('delete_permission', 'CWRelation', 'RQLExpression', 'subject'),
       
   383                     ('from_entity', 'CWAttribute', 'CWEType', 'object'),
       
   384                     ('from_entity', 'CWRelation', 'CWEType', 'object'),
       
   385                     ('read_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   386                     ('read_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   387                     ('read_permission', 'CWRelation', 'RQLExpression', 'subject'),
       
   388                     ('to_entity', 'CWAttribute', 'CWEType', 'object'),
       
   389                     ('to_entity', 'CWRelation', 'CWEType', 'object'),
       
   390                     ('update_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   391                     ('update_permission', 'CWEType', 'RQLExpression', 'subject')],
       
   392         'CWRType': [('cw_schema', 'CWSourceSchemaConfig', 'CWEType', 'object'),
       
   393                     ('cw_schema', 'CWSourceSchemaConfig', 'CWRType', 'object'),
       
   394                     ('cw_schema', 'CWSourceSchemaConfig', 'CWRelation', 'object'),
       
   395                     ('relation_type', 'CWAttribute', 'CWRType', 'object'),
       
   396                     ('relation_type', 'CWRelation', 'CWRType', 'object')],
       
   397         'CWRelation': [('add_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   398                        ('add_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   399                        ('add_permission', 'CWRelation', 'RQLExpression', 'subject'),
       
   400                        ('constrained_by', 'CWAttribute', 'CWConstraint', 'subject'),
       
   401                        ('constrained_by', 'CWRelation', 'CWConstraint', 'subject'),
       
   402                        ('cw_schema', 'CWSourceSchemaConfig', 'CWEType', 'object'),
       
   403                        ('cw_schema', 'CWSourceSchemaConfig', 'CWRType', 'object'),
       
   404                        ('cw_schema', 'CWSourceSchemaConfig', 'CWRelation', 'object'),
       
   405                        ('delete_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   406                        ('delete_permission', 'CWRelation', 'RQLExpression', 'subject'),
       
   407                        ('read_permission', 'CWAttribute', 'RQLExpression', 'subject'),
       
   408                        ('read_permission', 'CWEType', 'RQLExpression', 'subject'),
       
   409                        ('read_permission', 'CWRelation', 'RQLExpression', 'subject')],
       
   410         'CWSource': [('cw_for_source', 'CWSourceSchemaConfig', 'CWSource', 'object'),
       
   411                      ('cw_host_config_of', 'CWSourceHostConfig', 'CWSource', 'object'),
       
   412                      ('cw_import_of', 'CWDataImport', 'CWSource', 'object'),
       
   413                      ('cw_source', 'Ami', 'CWSource', 'object'),
       
   414                      ('cw_source', 'BaseTransition', 'CWSource', 'object'),
       
   415                      ('cw_source', 'Bookmark', 'CWSource', 'object'),
       
   416                      ('cw_source', 'CWAttribute', 'CWSource', 'object'),
       
   417                      ('cw_source', 'CWCache', 'CWSource', 'object'),
       
   418                      ('cw_source', 'CWConstraint', 'CWSource', 'object'),
       
   419                      ('cw_source', 'CWConstraintType', 'CWSource', 'object'),
       
   420                      ('cw_source', 'CWDataImport', 'CWSource', 'object'),
       
   421                      ('cw_source', 'CWEType', 'CWSource', 'object'),
       
   422                      ('cw_source', 'CWGroup', 'CWSource', 'object'),
       
   423                      ('cw_source', 'CWPermission', 'CWSource', 'object'),
       
   424                      ('cw_source', 'CWProperty', 'CWSource', 'object'),
       
   425                      ('cw_source', 'CWRType', 'CWSource', 'object'),
       
   426                      ('cw_source', 'CWRelation', 'CWSource', 'object'),
       
   427                      ('cw_source', 'CWSource', 'CWSource', 'object'),
       
   428                      ('cw_source', 'CWSourceHostConfig', 'CWSource', 'object'),
       
   429                      ('cw_source', 'CWSourceSchemaConfig', 'CWSource', 'object'),
       
   430                      ('cw_source', 'CWUniqueTogetherConstraint', 'CWSource', 'object'),
       
   431                      ('cw_source', 'CWUser', 'CWSource', 'object'),
       
   432                      ('cw_source', 'Card', 'CWSource', 'object'),
       
   433                      ('cw_source', 'EmailAddress', 'CWSource', 'object'),
       
   434                      ('cw_source', 'ExternalUri', 'CWSource', 'object'),
       
   435                      ('cw_source', 'File', 'CWSource', 'object'),
       
   436                      ('cw_source', 'Note', 'CWSource', 'object'),
       
   437                      ('cw_source', 'Personne', 'CWSource', 'object'),
       
   438                      ('cw_source', 'Produit', 'CWSource', 'object'),
       
   439                      ('cw_source', 'RQLExpression', 'CWSource', 'object'),
       
   440                      ('cw_source', 'Service', 'CWSource', 'object'),
       
   441                      ('cw_source', 'Societe', 'CWSource', 'object'),
       
   442                      ('cw_source', 'State', 'CWSource', 'object'),
       
   443                      ('cw_source', 'StateFull', 'CWSource', 'object'),
       
   444                      ('cw_source', 'SubNote', 'CWSource', 'object'),
       
   445                      ('cw_source', 'SubWorkflowExitPoint', 'CWSource', 'object'),
       
   446                      ('cw_source', 'Tag', 'CWSource', 'object'),
       
   447                      ('cw_source', 'TrInfo', 'CWSource', 'object'),
       
   448                      ('cw_source', 'Transition', 'CWSource', 'object'),
       
   449                      ('cw_source', 'Usine', 'CWSource', 'object'),
       
   450                      ('cw_source', 'Workflow', 'CWSource', 'object'),
       
   451                      ('cw_source', 'WorkflowTransition', 'CWSource', 'object')],
       
   452         'CWUser': [('for_user', 'CWProperty', 'CWUser', 'object'),
       
   453                    ('use_email', 'CWUser', 'EmailAddress', 'subject'),
       
   454                    ('wf_info_for', 'TrInfo', 'CWUser', 'object'),
       
   455                    ('wf_info_for', 'TrInfo', 'StateFull', 'object')],
       
   456         'StateFull': [('wf_info_for', 'TrInfo', 'CWUser', 'object'),
       
   457                       ('wf_info_for', 'TrInfo', 'StateFull', 'object')],
       
   458         'Transition': [('condition', 'BaseTransition', 'RQLExpression', 'subject'),
       
   459                        ('condition', 'Transition', 'RQLExpression', 'subject'),
       
   460                        ('condition', 'WorkflowTransition', 'RQLExpression', 'subject')],
       
   461         'Workflow': [('state_of', 'State', 'Workflow', 'object'),
       
   462                      ('transition_of', 'BaseTransition', 'Workflow', 'object'),
       
   463                      ('transition_of', 'Transition', 'Workflow', 'object'),
       
   464                      ('transition_of', 'WorkflowTransition', 'Workflow', 'object')],
       
   465         'WorkflowTransition': [('condition', 'BaseTransition', 'RQLExpression', 'subject'),
       
   466                                ('condition', 'Transition', 'RQLExpression', 'subject'),
       
   467                                ('condition', 'WorkflowTransition', 'RQLExpression', 'subject'),
       
   468                                ('subworkflow_exit', 'WorkflowTransition', 'SubWorkflowExitPoint', 'subject')]
       
   469     }
       
   470 
       
   471     def test_composite_entities(self):
       
   472         schema = self.vreg.schema
       
   473         self.assertEqual(sorted(self.composites.keys()),
       
   474                          [eschema.type
       
   475                           for eschema in sorted(schema.entities())
       
   476                           if eschema.is_composite])
       
   477         for etype in self.composites:
       
   478             self.assertEqual(self.composites[etype],
       
   479                              sorted([(r.rtype.type, r.subject.type, r.object.type, role)
       
   480                                      for r, role in sorted(schema[etype].composite_rdef_roles)]))
       
   481 
   358 if __name__ == '__main__':
   482 if __name__ == '__main__':
   359     unittest_main()
   483     unittest_main()