| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | from collections import defaultdictimport mockfrom searx.engines import scanr_structuresfrom searx.testing import SearxTestCaseclass TestScanrStructuresEngine(SearxTestCase):    def test_request(self):        query = 'test_query'        dicto = defaultdict(dict)        dicto['pageno'] = 1        params = scanr_structures.request(query, dicto)        self.assertIn('url', params)        self.assertIn(query, params['data'])        self.assertIn('scanr.enseignementsup-recherche.gouv.fr', params['url'])    def test_response(self):        self.assertRaises(AttributeError, scanr_structures.response, None)        self.assertRaises(AttributeError, scanr_structures.response, [])        self.assertRaises(AttributeError, scanr_structures.response, '')        self.assertRaises(AttributeError, scanr_structures.response, '[]')        response = mock.Mock(text='{}')        self.assertEqual(scanr_structures.response(response), [])        response = mock.Mock(text='{"data": []}')        self.assertEqual(scanr_structures.response(response), [])        json = u"""        {          "request":            {              "query":"test_query",              "page":1,              "pageSize":20,              "sortOrder":"RELEVANCY",              "sortDirection":"ASC",              "searchField":"ALL",              "from":0            },          "total":2471,          "results":[            {              "id":"200711886U",              "label":"Laboratoire d'Informatique de Grenoble",              "kind":"RNSR",              "publicEntity":true,              "address":{"city":"Grenoble","departement":"38"},              "logo":"/static/logos/200711886U.png",              "acronym":"LIG",              "type":{"code":"UR","label":"Unit\xe9 de recherche"},              "level":2,              "institutions":[                {                  "id":"193819125",                  "label":"Grenoble INP",                  "acronym":"IPG",                  "code":"UMR 5217"                },                {                  "id":"130021397",                  "label":"Universit\xe9 de Grenoble Alpes",                  "acronym":"UGA",                  "code":"UMR 5217"                },                {                  "id":"180089013",                  "label":"Centre national de la recherche scientifique",                  "acronym":"CNRS",                  "code":"UMR 5217"                },                {                  "id":"180089047",                  "label":"Institut national de recherche en informatique et en automatique",                  "acronym":"Inria",                  "code":"UMR 5217"                }              ],              "highlights":[                {                  "type":"projects",                  "value":"linguicielles d\xe9velopp\xe9s jusqu'ici par le GETALP\ du <strong>LIG</strong> en tant que prototypes op\xe9rationnels.\\\r\\nDans le contexte"                },                {                  "type":"acronym",                  "value":"<strong>LIG</strong>"                },                {                  "type":"websiteContents",                  "value":"S\xe9lection\\nListe structures\\nD\xe9tail\\n\                    Accueil\\n200711886U : <strong>LIG</strong>\                    Laboratoire d'Informatique de Grenoble Unit\xe9 de recherche"},                {                  "type":"publications",                  "value":"de noms. Nous avons d'abord d\xe9velopp\xe9 LOOV \                    (pour <strong>Lig</strong> Overlaid OCR in Vid\xe9o), \                    un outil d'extraction des"                }              ]            },            {              "id":"199511665F",              "label":"Laboratoire Bordelais de Recherche en Informatique",              "kind":"RNSR",              "publicEntity":true,              "address":{"city":"Talence","departement":"33"},              "logo":"/static/logos/199511665F.png",              "acronym":"LaBRI",              "type":{"code":"UR","label":"Unit\xe9 de recherche"},              "level":2,              "institutions":[                {                  "id":"130006356",                  "label":"Institut polytechnique de Bordeaux",                  "acronym":"IPB",                  "code":"UMR 5800"                },                {                  "id":"130018351",                  "label":"Universit\xe9 de Bordeaux",                  "acronym":null,                  "code":"UMR 5800"                },                {                  "id":"180089013",                  "label":"Centre national de la recherche scientifique",                  "acronym":"CNRS",                  "code":"UMR 5800"                },                {                  "id":"180089047",                  "label":"Institut national de recherche en informatique et en automatique",                  "acronym":"Inria",                  "code":"UMR 5800"                }              ],              "highlights":[                {                  "type":"websiteContents",                  "value":"Samia Kerdjoudj\\n2016-07-05\\nDouble-exponential\ and <strong>triple</strong>-exponential bounds for\ choosability problems parameterized"                },                {                  "type":"publications",                  "value":"de cam\xe9ras install\xe9es dans les lieux publiques \ a <strong>tripl\xe9</strong> en 2009, passant de 20 000 \ \xe0 60 000. Malgr\xe9 le"                }              ]            }          ]        }        """        response = mock.Mock(text=json)        results = scanr_structures.response(response)        self.assertEqual(type(results), list)        self.assertEqual(len(results), 2)        self.assertEqual(results[0]['title'], u"Laboratoire d'Informatique de Grenoble")        self.assertEqual(results[0]['url'], 'https://scanr.enseignementsup-recherche.gouv.fr/structure/200711886U')        self.assertEqual(results[0]['content'],                         u"linguicielles d\xe9velopp\xe9s jusqu'ici par le GETALP "                         u"du LIG en tant que prototypes "                         u"op\xe9rationnels. Dans le contexte")        self.assertEqual(results[1]['img_src'],                         'https://scanr.enseignementsup-recherche.gouv.fr//static/logos/199511665F.png')        self.assertEqual(results[1]['content'],                         "Samia Kerdjoudj 2016-07-05 Double-exponential and"                         " triple-exponential bounds for "                         "choosability problems parameterized")        self.assertEqual(results[1]['url'], 'https://scanr.enseignementsup-recherche.gouv.fr/structure/199511665F')        self.assertEqual(results[1]['title'], u"Laboratoire Bordelais de Recherche en Informatique")
 |