# HG changeset patch # User Sylvain Thénault # Date 1268035423 -3600 # Node ID 7eba168407c33652c273c9a48ef29658e82bd11c # Parent cdd979ae1b5797a85f64ad0f9dfb6c436bf68d2e [schema hook] fulltext_container is a relation *type* property. Test and fix (+ more fti properties change testing) diff -r cdd979ae1b57 -r 7eba168407c3 hooks/syncschema.py --- a/hooks/syncschema.py Mon Mar 08 09:00:23 2010 +0100 +++ b/hooks/syncschema.py Mon Mar 08 09:03:43 2010 +0100 @@ -231,7 +231,15 @@ def precommit_event(self): session = self.session rschema = self.rschema - if rschema.final or not 'inlined' in self.values: + entity = self.entity + if 'fulltext_container' in entity.edited_attributes: + ftiupdates = session.transaction_data.setdefault( + 'fti_update_etypes', set()) + for subjtype, objtype in rschema.rdefs: + ftiupdates.add(subjtype) + ftiupdates.add(objtype) + UpdateFTIndexOp(session) + if rschema.final or not 'inlined' in entity.edited_attributes: return # nothing to do inlined = self.values['inlined'] entity = self.entity @@ -491,12 +499,6 @@ UpdateFTIndexOp(session) session.transaction_data.setdefault( 'fti_update_etypes', set()).add(etype) - elif 'fulltext_container' in self.values: - ftiupdates = session.transaction_data.setdefault( - 'fti_update_etypes', set()) - ftiupdates.add(etype) - ftiupdates.add(self.kobj[1]) - UpdateFTIndexOp(session) class SourceDbCWConstraintAdd(hook.Operation): diff -r cdd979ae1b57 -r 7eba168407c3 hooks/test/unittest_syncschema.py --- a/hooks/test/unittest_syncschema.py Mon Mar 08 09:00:23 2010 +0100 +++ b/hooks/test/unittest_syncschema.py Mon Mar 08 09:03:43 2010 +0100 @@ -271,20 +271,40 @@ self.execute('Any X WHERE X is_instance_of BaseTransition, X messageid "hop"') def test_change_fulltextindexed(self): - target = self.request().create_entity(u'EmailAddress', address=u'rick.roll@dance.com') + req = self.request() + target = req.create_entity(u'Email', messageid=u'1234', + subject=u'rick.roll@dance.com') + self.commit() + rset = req.execute('Any X WHERE X has_text "rick.roll"') + self.assertIn(target.eid, [item[0] for item in rset]) + assert req.execute('SET A fulltextindexed FALSE ' + 'WHERE E is CWEType, E name "Email", A is CWAttribute,' + 'A from_entity E, A relation_type R, R name "subject"') + self.commit() + rset = req.execute('Any X Where X has_text "rick.roll"') + self.failIf(rset) + assert req.execute('SET A fulltextindexed TRUE ' + 'WHERE A from_entity E, A relation_type R, ' + 'E name "Email", R name "subject"') + self.commit() + rset = req.execute('Any X WHERE X has_text "rick.roll"') + self.assertIn(target.eid, [item[0] for item in rset]) + + def test_change_fulltext_container(self): + req = self.request() + target = req.create_entity(u'EmailAddress', address=u'rick.roll@dance.com') + target.set_relations(reverse_use_email=req.user) + self.commit() + rset = req.execute('Any X WHERE X has_text "rick.roll"') + self.assertIn(req.user.eid, [item[0] for item in rset]) + assert self.execute('SET R fulltext_container NULL ' + 'WHERE R name "use_email"') self.commit() rset = self.execute('Any X Where X has_text "rick.roll"') self.assertIn(target.eid, [item[0] for item in rset]) + assert self.execute('SET R fulltext_container "subject" ' + 'WHERE R name "use_email"') + self.commit() + rset = req.execute('Any X WHERE X has_text "rick.roll"') + self.assertIn(req.user.eid, [item[0] for item in rset]) - assert self.execute('''SET A fulltextindexed False - WHERE E is CWEType, - E name "EmailAddress", - A is CWAttribute, - A from_entity E, - A relation_type R, - R name "address" - ''') - self.commit() - rset = self.execute('Any X Where X has_text "rick.roll"') - self.assertNotIn(target.eid, [item[0] for item in rset]) -