[c-c list] add an optional argument to the list command (closes #2709703)
This optional argument allows to restrict listing to only
a given type of items (cubes, instances, configurations).
# -*- coding: utf-8 -*-# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr## This file is part of CubicWeb.## CubicWeb is free software: you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation, either version 2.1 of the License, or (at your option)# any later version.## CubicWeb is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License along# with CubicWeb. If not, see <http://www.gnu.org/licenses/>."""unit tests for cubicweb.entities.base module"""fromlogilab.common.testlibimportunittest_mainfromlogilab.common.decoratorsimportclear_cachefromlogilab.common.interfaceimportimplementsfromcubicweb.devtools.testlibimportCubicWebTCfromcubicwebimportValidationErrorfromcubicweb.interfacesimportIMileStone,ICalendarablefromcubicweb.entitiesimportAnyEntityclassBaseEntityTC(CubicWebTC):defsetup_database(self):req=self.request()self.member=self.create_user(req,'member')classMetadataTC(BaseEntityTC):deftest_creator(self):self.login(u'member')entity=self.request().create_entity('Bookmark',title=u"hello",path=u'project/cubicweb')self.commit()self.assertEqual(entity.creator.eid,self.member.eid)self.assertEqual(entity.dc_creator(),u'member')deftest_type(self):self.assertEqual(self.member.dc_type(),'CWUser')deftest_entity_meta_attributes(self):# XXX move to yamsself.assertEqual(self.schema['CWUser'].meta_attributes(),{})self.assertEqual(dict((str(k),v)fork,vinself.schema['State'].meta_attributes().iteritems()),{'description_format':('format','description')})deftest_fti_rql_method(self):eclass=self.vreg['etypes'].etype_class('EmailAddress')self.assertEqual(['Any X, ALIAS, ADDRESS WHERE X is EmailAddress, ''X alias ALIAS, X address ADDRESS'],eclass.cw_fti_index_rql_queries(self.request()))classEmailAddressTC(BaseEntityTC):deftest_canonical_form(self):email1=self.execute('INSERT EmailAddress X: X address "maarten.ter.huurne@philips.com"').get_entity(0,0)email2=self.execute('INSERT EmailAddress X: X address "maarten@philips.com"').get_entity(0,0)email3=self.execute('INSERT EmailAddress X: X address "toto@logilab.fr"').get_entity(0,0)email1.cw_set(prefered_form=email2)self.assertEqual(email1.prefered.eid,email2.eid)self.assertEqual(email2.prefered.eid,email2.eid)self.assertEqual(email3.prefered.eid,email3.eid)deftest_mangling(self):email=self.execute('INSERT EmailAddress X: X address "maarten.ter.huurne@philips.com"').get_entity(0,0)self.assertEqual(email.display_address(),'maarten.ter.huurne@philips.com')self.assertEqual(email.printable_value('address'),'maarten.ter.huurne@philips.com')self.vreg.config.global_set_option('mangle-emails',True)self.assertEqual(email.display_address(),'maarten.ter.huurne at philips dot com')self.assertEqual(email.printable_value('address'),'maarten.ter.huurne at philips dot com')email=self.execute('INSERT EmailAddress X: X address "syt"').get_entity(0,0)self.assertEqual(email.display_address(),'syt')self.assertEqual(email.printable_value('address'),'syt')classCWUserTC(BaseEntityTC):deftest_complete(self):e=self.execute('CWUser X WHERE X login "admin"').get_entity(0,0)e.complete()deftest_matching_groups(self):e=self.execute('CWUser X WHERE X login "admin"').get_entity(0,0)self.assertTrue(e.matching_groups('managers'))self.assertFalse(e.matching_groups('xyz'))self.assertTrue(e.matching_groups(('xyz','managers')))self.assertFalse(e.matching_groups(('xyz','abcd')))deftest_dc_title_and_name(self):e=self.execute('CWUser U WHERE U login "member"').get_entity(0,0)self.assertEqual(e.dc_title(),'member')self.assertEqual(e.name(),'member')e.cw_set(firstname=u'bouah')self.assertEqual(e.dc_title(),'member')self.assertEqual(e.name(),u'bouah')e.cw_set(surname=u'lôt')self.assertEqual(e.dc_title(),'member')self.assertEqual(e.name(),u'bouah lôt')deftest_allowed_massmail_keys(self):e=self.execute('CWUser U WHERE U login "member"').get_entity(0,0)# Bytes/Password attributes should be omitedself.assertEqual(e.cw_adapt_to('IEmailable').allowed_massmail_keys(),set(('surname','firstname','login','last_login_time','creation_date','modification_date','cwuri','eid')))deftest_cw_instantiate_object_relation(self):""" a weird non regression test """e=self.execute('CWUser U WHERE U login "member"').get_entity(0,0)self.request().create_entity('CWGroup',name=u'logilab',reverse_in_group=e)classInterfaceTC(CubicWebTC):deftest_nonregr_subclasses_and_mixins_interfaces(self):fromcubicweb.entities.wfobjsimportWorkflowableMixInWorkflowableMixIn.__implements__=(ICalendarable,)CWUser=self.vreg['etypes'].etype_class('CWUser')classMyUser(CWUser):__implements__=(IMileStone,)self.vreg._loadedmods[__name__]={}self.vreg.register(MyUser)self.vreg['etypes'].initialization_completed()MyUser_=self.vreg['etypes'].etype_class('CWUser')# a copy is done systematicallyself.assertTrue(issubclass(MyUser_,MyUser))self.assertTrue(implements(MyUser_,IMileStone))self.assertTrue(implements(MyUser_,ICalendarable))# original class should not have beed modified, only the copyself.assertTrue(implements(MyUser,IMileStone))self.assertFalse(implements(MyUser,ICalendarable))classSpecializedEntityClassesTC(CubicWebTC):defselect_eclass(self,etype):# clear selector cacheclear_cache(self.vreg['etypes'],'etype_class')returnself.vreg['etypes'].etype_class(etype)deftest_etype_class_selection_and_specialization(self):# no specific class for Subdivisions, the default one should be selectedeclass=self.select_eclass('SubDivision')self.assertTrue(eclass.__autogenerated__)#self.assertEqual(eclass.__bases__, (AnyEntity,))# build class from most generic to most specific and make# sure the most specific is always selectedself.vreg._loadedmods[__name__]={}foretypein('Company','Division','SubDivision'):classFoo(AnyEntity):__regid__=etypeself.vreg.register(Foo)eclass=self.select_eclass('SubDivision')self.assertTrue(eclass.__autogenerated__)self.assertFalse(eclassisFoo)ifetype=='SubDivision':self.assertEqual(eclass.__bases__,(Foo,))else:self.assertEqual(eclass.__bases__[0].__bases__,(Foo,))# check Division eclass is still selected for plain Division entitieseclass=self.select_eclass('Division')self.assertEqual(eclass.__regid__,'Division')if__name__=='__main__':unittest_main()