web/test/unittest_magicsearch.py
branchstable
changeset 8743 27a83746aebd
parent 8510 e2913c9880a0
child 9651 c739ebc18b79
equal deleted inserted replaced
8742:bd374bd906f3 8743:27a83746aebd
   228                           self.proc.process_query, u'rql: CWUser E WHERE E noattr "Smith"')
   228                           self.proc.process_query, u'rql: CWUser E WHERE E noattr "Smith"')
   229         rset = self.proc.process_query(u'text: utilisateur Smith')
   229         rset = self.proc.process_query(u'text: utilisateur Smith')
   230         self.assertEqual(rset.rql, 'Any X ORDERBY FTIRANK(X) DESC WHERE X has_text %(text)s')
   230         self.assertEqual(rset.rql, 'Any X ORDERBY FTIRANK(X) DESC WHERE X has_text %(text)s')
   231         self.assertEqual(rset.args, {'text': u'utilisateur Smith'})
   231         self.assertEqual(rset.args, {'text': u'utilisateur Smith'})
   232 
   232 
       
   233 
       
   234 class RQLSuggestionsBuilderTC(CubicWebTC):
       
   235     def suggestions(self, rql):
       
   236         req = self.request()
       
   237         rbs = self.vreg['components'].select('rql.suggestions', req)
       
   238         return rbs.build_suggestions(rql)
       
   239 
       
   240     def test_no_restrictions_rql(self):
       
   241         self.assertListEqual([], self.suggestions(''))
       
   242         self.assertListEqual([], self.suggestions('An'))
       
   243         self.assertListEqual([], self.suggestions('Any X'))
       
   244         self.assertListEqual([], self.suggestions('Any X, Y'))
       
   245 
       
   246     def test_invalid_rql(self):
       
   247         self.assertListEqual([], self.suggestions('blabla'))
       
   248         self.assertListEqual([], self.suggestions('Any X WHERE foo, bar'))
       
   249 
       
   250     def test_is_rql(self):
       
   251         self.assertListEqual(['Any X WHERE X is %s' % eschema
       
   252                               for eschema in sorted(self.vreg.schema.entities())
       
   253                               if not eschema.final],
       
   254                              self.suggestions('Any X WHERE X is'))
       
   255 
       
   256         self.assertListEqual(['Any X WHERE X is Personne', 'Any X WHERE X is Project'],
       
   257                              self.suggestions('Any X WHERE X is P'))
       
   258 
       
   259         self.assertListEqual(['Any X WHERE X is Personne, Y is Personne',
       
   260                               'Any X WHERE X is Personne, Y is Project'],
       
   261                              self.suggestions('Any X WHERE X is Personne, Y is P'))
       
   262 
       
   263 
       
   264     def test_relations_rql(self):
       
   265         self.assertListEqual(['Any X WHERE X is Personne, X ass A',
       
   266                               'Any X WHERE X is Personne, X datenaiss A',
       
   267                               'Any X WHERE X is Personne, X description A',
       
   268                               'Any X WHERE X is Personne, X fax A',
       
   269                               'Any X WHERE X is Personne, X nom A',
       
   270                               'Any X WHERE X is Personne, X prenom A',
       
   271                               'Any X WHERE X is Personne, X promo A',
       
   272                               'Any X WHERE X is Personne, X salary A',
       
   273                               'Any X WHERE X is Personne, X sexe A',
       
   274                               'Any X WHERE X is Personne, X tel A',
       
   275                               'Any X WHERE X is Personne, X test A',
       
   276                               'Any X WHERE X is Personne, X titre A',
       
   277                               'Any X WHERE X is Personne, X travaille A',
       
   278                               'Any X WHERE X is Personne, X web A',
       
   279                               ],
       
   280                              self.suggestions('Any X WHERE X is Personne, X '))
       
   281         self.assertListEqual(['Any X WHERE X is Personne, X tel A',
       
   282                               'Any X WHERE X is Personne, X test A',
       
   283                               'Any X WHERE X is Personne, X titre A',
       
   284                               'Any X WHERE X is Personne, X travaille A',
       
   285                               ],
       
   286                              self.suggestions('Any X WHERE X is Personne, X t'))
       
   287         # try completion on selected
       
   288         self.assertListEqual(['Any X WHERE X is Personne, Y is Societe, X tel A',
       
   289                               'Any X WHERE X is Personne, Y is Societe, X test A',
       
   290                               'Any X WHERE X is Personne, Y is Societe, X titre A',
       
   291                               'Any X WHERE X is Personne, Y is Societe, X travaille Y',
       
   292                               ],
       
   293                              self.suggestions('Any X WHERE X is Personne, Y is Societe, X t'))
       
   294         # invalid relation should not break
       
   295         self.assertListEqual([],
       
   296                              self.suggestions('Any X WHERE X is Personne, X asdasd'))
       
   297 
       
   298     def test_attribute_vocabulary_rql(self):
       
   299         self.assertListEqual(['Any X WHERE X is Personne, X promo "bon"',
       
   300                               'Any X WHERE X is Personne, X promo "pasbon"',
       
   301                               ],
       
   302                              self.suggestions('Any X WHERE X is Personne, X promo "'))
       
   303         self.assertListEqual(['Any X WHERE X is Personne, X promo "pasbon"',
       
   304                               ],
       
   305                              self.suggestions('Any X WHERE X is Personne, X promo "p'))
       
   306         # "bon" should be considered complete, hence no suggestion
       
   307         self.assertListEqual([],
       
   308                              self.suggestions('Any X WHERE X is Personne, X promo "bon"'))
       
   309         # no valid vocabulary starts with "po"
       
   310         self.assertListEqual([],
       
   311                              self.suggestions('Any X WHERE X is Personne, X promo "po'))
       
   312 
       
   313     def test_attribute_value_rql(self):
       
   314         # suggestions should contain any possible value for
       
   315         # a given attribute (limited to 10)
       
   316         req = self.request()
       
   317         for i in xrange(15):
       
   318             req.create_entity('Personne', nom=u'n%s' % i, prenom=u'p%s' % i)
       
   319         self.assertListEqual(['Any X WHERE X is Personne, X nom "n0"',
       
   320                               'Any X WHERE X is Personne, X nom "n1"',
       
   321                               'Any X WHERE X is Personne, X nom "n10"',
       
   322                               'Any X WHERE X is Personne, X nom "n11"',
       
   323                               'Any X WHERE X is Personne, X nom "n12"',
       
   324                               'Any X WHERE X is Personne, X nom "n13"',
       
   325                               'Any X WHERE X is Personne, X nom "n14"',
       
   326                               'Any X WHERE X is Personne, X nom "n2"',
       
   327                               'Any X WHERE X is Personne, X nom "n3"',
       
   328                               'Any X WHERE X is Personne, X nom "n4"',
       
   329                               'Any X WHERE X is Personne, X nom "n5"',
       
   330                               'Any X WHERE X is Personne, X nom "n6"',
       
   331                               'Any X WHERE X is Personne, X nom "n7"',
       
   332                               'Any X WHERE X is Personne, X nom "n8"',
       
   333                               'Any X WHERE X is Personne, X nom "n9"',
       
   334                               ],
       
   335                              self.suggestions('Any X WHERE X is Personne, X nom "'))
       
   336         self.assertListEqual(['Any X WHERE X is Personne, X nom "n1"',
       
   337                               'Any X WHERE X is Personne, X nom "n10"',
       
   338                               'Any X WHERE X is Personne, X nom "n11"',
       
   339                               'Any X WHERE X is Personne, X nom "n12"',
       
   340                               'Any X WHERE X is Personne, X nom "n13"',
       
   341                               'Any X WHERE X is Personne, X nom "n14"',
       
   342                               ],
       
   343                              self.suggestions('Any X WHERE X is Personne, X nom "n1'))
       
   344 
       
   345 
   233 if __name__ == '__main__':
   346 if __name__ == '__main__':
   234     unittest_main()
   347     unittest_main()