104 self.assertEquals(e.name(), u'bouah lôt') |
104 self.assertEquals(e.name(), u'bouah lôt') |
105 |
105 |
106 def test_allowed_massmail_keys(self): |
106 def test_allowed_massmail_keys(self): |
107 e = self.execute('CWUser U WHERE U login "member"').get_entity(0, 0) |
107 e = self.execute('CWUser U WHERE U login "member"').get_entity(0, 0) |
108 # Bytes/Password attributes should be omited |
108 # Bytes/Password attributes should be omited |
109 self.assertEquals(e.allowed_massmail_keys(), |
109 self.assertEquals(e.cw_adapt_to('IEmailable').allowed_massmail_keys(), |
110 set(('surname', 'firstname', 'login', 'last_login_time', |
110 set(('surname', 'firstname', 'login', 'last_login_time', |
111 'creation_date', 'modification_date', 'cwuri', 'eid')) |
111 'creation_date', 'modification_date', 'cwuri', 'eid')) |
112 ) |
112 ) |
113 |
113 |
114 |
114 |
115 class InterfaceTC(CubicWebTC): |
115 class InterfaceTC(CubicWebTC): |
116 |
116 |
117 def test_nonregr_subclasses_and_mixins_interfaces(self): |
117 def test_nonregr_subclasses_and_mixins_interfaces(self): |
|
118 from cubicweb.entities.wfobjs import WorkflowableMixIn |
|
119 WorkflowableMixIn.__implements__ = (ICalendarable,) |
118 CWUser = self.vreg['etypes'].etype_class('CWUser') |
120 CWUser = self.vreg['etypes'].etype_class('CWUser') |
119 self.failUnless(implements(CWUser, IWorkflowable)) |
|
120 class MyUser(CWUser): |
121 class MyUser(CWUser): |
121 __implements__ = (IMileStone,) |
122 __implements__ = (IMileStone,) |
122 self.vreg._loadedmods[__name__] = {} |
123 self.vreg._loadedmods[__name__] = {} |
123 self.vreg.register(MyUser) |
124 self.vreg.register(MyUser) |
124 self.vreg['etypes'].initialization_completed() |
125 self.vreg['etypes'].initialization_completed() |
125 MyUser_ = self.vreg['etypes'].etype_class('CWUser') |
126 MyUser_ = self.vreg['etypes'].etype_class('CWUser') |
126 # a copy is done systematically |
127 # a copy is done systematically |
127 self.failUnless(issubclass(MyUser_, MyUser)) |
128 self.failUnless(issubclass(MyUser_, MyUser)) |
128 self.failUnless(implements(MyUser_, IMileStone)) |
129 self.failUnless(implements(MyUser_, IMileStone)) |
129 self.failUnless(implements(MyUser_, IWorkflowable)) |
130 self.failUnless(implements(MyUser_, ICalendarable)) |
130 # original class should not have beed modified, only the copy |
131 # original class should not have beed modified, only the copy |
131 self.failUnless(implements(MyUser, IMileStone)) |
132 self.failUnless(implements(MyUser, IMileStone)) |
132 self.failIf(implements(MyUser, IWorkflowable)) |
133 self.failIf(implements(MyUser, ICalendarable)) |
133 |
134 |
134 |
135 |
135 class SpecializedEntityClassesTC(CubicWebTC): |
136 class SpecializedEntityClassesTC(CubicWebTC): |
136 |
137 |
137 def select_eclass(self, etype): |
138 def select_eclass(self, etype): |