[doc] add faq about reseting password for some user
importsysimportosfromos.pathimportdirname,join,abspathfromtempfileimportmktempfromlogilab.common.testlibimportTestCase,unittest_mainfromlogilab.common.changelogimportVersionfromcubicweb.devtoolsimportApptestConfigurationdefunabsolutize(path):parts=path.split(os.sep)fori,partinreversed(tuple(enumerate(parts))):ifpart.startswith('cubicweb')orpart=='cubes':return'/'.join(parts[i+1:])raiseException('duh? %s'%path)classCubicWebConfigurationTC(TestCase):defsetUp(self):self.config=ApptestConfiguration('data')self.config._cubes=('email','file')deftearDown(self):os.environ.pop('CW_CUBES_PATH',None)deftest_reorder_cubes(self):# jpl depends on email and file and comment# email depends on fileself.assertEquals(self.config.reorder_cubes(['file','email','jpl']),('jpl','email','file'))self.assertEquals(self.config.reorder_cubes(['email','file','jpl']),('jpl','email','file'))self.assertEquals(self.config.reorder_cubes(['email','jpl','file']),('jpl','email','file'))self.assertEquals(self.config.reorder_cubes(['file','jpl','email']),('jpl','email','file'))self.assertEquals(self.config.reorder_cubes(['jpl','file','email']),('jpl','email','file'))self.assertEquals(self.config.reorder_cubes(('jpl','email','file')),('jpl','email','file'))deftest_reorder_cubes_recommends(self):fromcubes.commentimport__pkginfo__ascomment_pkginfocomment_pkginfo.__recommend__=('file',)try:# email recommends comment# comment recommends fileself.assertEquals(self.config.reorder_cubes(('jpl','email','file','comment')),('jpl','email','comment','file'))self.assertEquals(self.config.reorder_cubes(('jpl','email','comment','file')),('jpl','email','comment','file'))self.assertEquals(self.config.reorder_cubes(('jpl','comment','email','file')),('jpl','email','comment','file'))self.assertEquals(self.config.reorder_cubes(('comment','jpl','email','file')),('jpl','email','comment','file'))finally:comment_pkginfo.__use__=()# def test_vc_config(self):# vcconf = self.config.vc_config()# self.assertIsInstance(vcconf['EEMAIL'], Version)# self.assertEquals(vcconf['EEMAIL'], (0, 3, 1))# self.assertEquals(vcconf['CW'], (2, 31, 2))# self.assertRaises(KeyError, vcconf.__getitem__, 'CW_VERSION')# self.assertRaises(KeyError, vcconf.__getitem__, 'CRM')deftest_expand_cubes(self):self.assertEquals(self.config.expand_cubes(('email','eblog')),['email','eblog','file'])deftest_vregistry_path(self):self.assertEquals([unabsolutize(p)forpinself.config.vregistry_path()],['entities','web/views','sobjects','file/entities.py','file/views','file/hooks.py','email/entities.py','email/views','email/hooks.py','test/data/entities.py'])deftest_cubes_path(self):# make sure we don't import the email cube, but the stdlib email packageimportemailself.assertNotEquals(dirname(email.__file__),self.config.CUBES_DIR)os.environ['CW_CUBES_PATH']=join(dirname(__file__),'data','cubes')self.assertEquals(self.config.cubes_search_path(),[abspath(join(dirname(__file__),'data','cubes')),self.config.CUBES_DIR])os.environ['CW_CUBES_PATH']='%s%s%s%s%s'%(join(dirname(__file__),'data','cubes'),os.pathsep,self.config.CUBES_DIR,os.pathsep,'unexistant')# filter out unexistant and duplicatesself.assertEquals(self.config.cubes_search_path(),[abspath(join(dirname(__file__),'data','cubes')),self.config.CUBES_DIR])self.failUnless('mycube'inself.config.available_cubes())# test cubes python pathself.config.adjust_sys_path()importcubesself.assertEquals(cubes.__path__,self.config.cubes_search_path())# this import should succeed once path is adjustedfromcubesimportmycubeself.assertEquals(mycube.__path__,[abspath(join(dirname(__file__),'data','cubes','mycube'))])# file cube should be overriden by the one found in data/cubessys.modules.pop('cubes.file',None)delcubes.filefromcubesimportfileself.assertEquals(file.__path__,[abspath(join(dirname(__file__),'data','cubes','file'))])if__name__=='__main__':unittest_main()