# -*- coding: iso-8859-1 -*-"""unit tests for database value generator:organization: Logilab:copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2.:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses"""importos.pathasospimportrefromlogilab.common.testlibimportTestCase,unittest_mainfromcubicweb.schemaimportSchema,EntitySchemafromcubicweb.devtools.fillimportValueGenerator,make_telfromcubicweb.devtoolsimportApptestConfigurationDATADIR=osp.join(osp.abspath(osp.dirname(__file__)),'data')ISODATE_SRE=re.compile('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})$')classMyValueGenerator(ValueGenerator):defgenerate_Bug_severity(self,index):returnu'dangerous'defgenerate_Any_description(self,index,format=None):returnu'yo'classValueGeneratorTC(TestCase):"""test case for ValueGenerator"""def_choice_func(self,etype,attrname):try:returngetattr(self,'_available_%s_%s'%(etype,attrname))(etype,attrname)exceptAttributeError:returnNonedef_available_Person_firstname(self,etype,attrname):return[f.strip()forfinfile(osp.join(DATADIR,'firstnames.txt'))]defsetUp(self):config=ApptestConfiguration('data')config.bootstrap_cubes()schema=config.load_schema()e_schema=schema.entity_schema('Person')self.person_valgen=ValueGenerator(e_schema,self._choice_func)e_schema=schema.entity_schema('Bug')self.bug_valgen=MyValueGenerator(e_schema)self.config=configdef_check_date(self,date):"""checks that 'date' is well-formed"""year=date.yearmonth=date.monthday=date.dayself.failUnless(dayinrange(1,29),'%s not in [0;28]'%day)self.failUnless(monthinrange(1,13),'%s not in [1;12]'%month)self.failUnless(yearinrange(2000,2005),'%s not in [2000;2004]'%year)deftest_string(self):"""test string generation"""surname=self.person_valgen._generate_value('surname',12)self.assertEquals(surname,u'�&surname12')deftest_domain_value(self):"""test value generation from a given domain value"""firstname=self.person_valgen._generate_value('firstname',12)possible_choices=self._choice_func('Person','firstname')self.failUnless(firstnameinpossible_choices,'%s not in %s'%(firstname,possible_choices))deftest_choice(self):"""test choice generation"""# Test for random indexforindexinrange(5):sx_value=self.person_valgen._generate_value('civility',index)self.failUnless(sx_valuein('Mr','Mrs','Ms'))deftest_integer(self):"""test integer generation"""# Test for random indexforindexinrange(5):cost_value=self.bug_valgen._generate_value('cost',index)self.failUnless(cost_valueinrange(index+1))deftest_date(self):"""test date generation"""# Test for random indexforindexinrange(5):date_value=self.person_valgen._generate_value('birthday',index)self._check_date(date_value)deftest_phone(self):"""tests make_tel utility"""self.assertEquals(make_tel(22030405),'22 03 04 05')deftest_customized_generation(self):self.assertEquals(self.bug_valgen._generate_value('severity',12),u'dangerous')self.assertEquals(self.bug_valgen._generate_value('description',12),u'yo')self.assertEquals(self.person_valgen._generate_value('description',12),u'yo')classConstraintInsertionTC(TestCase):deftest_writeme(self):self.skip('Test automatic insertion / Schema Constraints')if__name__=='__main__':unittest_main()