@@ -0,0 +1,103 @@
1+# -*- coding: utf-8 -*-
2+from collections import defaultdict
3+import mock
4+from searx.engines import framalibre
5+from searx.testing import SearxTestCase
6+
7+
8+class TestFramalibreEngine(SearxTestCase):
9+
10+ def test_request(self):
11+ query = 'test_query'
12+ dicto = defaultdict(dict)
13+ dicto['pageno'] = 0
14+ params = framalibre.request(query, dicto)
15+ self.assertTrue('url' in params)
16+ self.assertTrue(query in params['url'])
17+ self.assertTrue('framalibre.org' in params['url'])
18+
19+ def test_response(self):
20+ self.assertRaises(AttributeError, framalibre.response, None)
21+ self.assertRaises(AttributeError, framalibre.response, [])
22+ self.assertRaises(AttributeError, framalibre.response, '')
23+ self.assertRaises(AttributeError, framalibre.response, '[]')
24+
25+ response = mock.Mock(text='{}')
26+ self.assertEqual(framalibre.response(response), [])
27+
28+ response = mock.Mock(text='{"data": []}')
29+ self.assertEqual(framalibre.response(response), [])
30+
31+ html = u"""
32+ <div class="nodes-list-row">
33+ <div id="node-431"
34+ class="node node-logiciel-annuaires node-promoted node-teaser node-teaser node-sheet clearfix nodes-list"
35+ about="/content/gogs" typeof="sioc:Item foaf:Document">
36+ <header class="media">
37+ <div class="media-left">
38+ <div class="field field-name-field-logo field-type-image field-label-hidden">
39+ <div class="field-items">
40+ <div class="field-item even">
41+ <a href="/content/gogs">
42+ <img class="media-object img-responsive" typeof="foaf:Image"
43+ src="https://framalibre.org/sites/default/files/styles/teaser_logo/public/leslogos/gogs-lg.png?itok=rrCxKKBy"
44+ width="70" height="70" alt="" />
45+ </a>
46+ </div>
47+ </div>
48+ </div>
49+ </div>
50+ <div class="media-body">
51+ <h3 class="node-title"><a href="/content/gogs">Gogs</a></h3>
52+ <span property="dc:title" content="Gogs" class="rdf-meta element-hidden"></span>
53+ <div class="field field-name-field-annuaires field-type-taxonomy-term-reference field-label-hidden">
54+ <div class="field-items">
55+ <div class="field-item even">
56+ <a href="/annuaires/cloudwebapps"
57+ typeof="skos:Concept" property="rdfs:label skos:prefLabel"
58+ datatype="" class="label label-primary">Cloud/webApps</a>
59+ </div>
60+ </div>
61+ </div>
62+ </div>
63+ </header>
64+ <div class="content">
65+ <div class="field field-name-field-votre-appr-ciation field-type-fivestar field-label-hidden">
66+ <div class="field-items">
67+ <div class="field-item even">
68+ </div>
69+ </div>
70+ </div>
71+ <div class="field field-name-body field-type-text-with-summary field-label-hidden">
72+ <div class="field-items">
73+ <div class="field-item even" property="content:encoded">
74+ <p>Gogs est une interface web basée sur git et une bonne alternative à GitHub.</p>
75+ </div>
76+ </div>
77+ </div>
78+ </div>
79+ <footer>
80+ <a href="/content/gogs" class="read-more btn btn-default btn-sm">Voir la notice</a>
81+ <div class="field field-name-field-lien-officiel field-type-link-field field-label-hidden">
82+ <div class="field-items">
83+ <div class="field-item even">
84+ <a href="https://gogs.io/" target="_blank" title="Voir le site officiel">
85+ <span class="glyphicon glyphicon-globe"></span>
86+ <span class="sr-only">Lien officiel</span>
87+ </a>
88+ </div>
89+ </div>
90+ </div>
91+ </footer>
92+ </div>
93+ </div>
94+ """
95+ response = mock.Mock(text=html)
96+ results = framalibre.response(response)
97+ self.assertEqual(type(results), list)
98+ self.assertEqual(len(results), 1)
99+ self.assertEqual(results[0]['title'], 'Gogs')
100+ self.assertEqual(results[0]['url'],
101+ 'https://framalibre.org/content/gogs')
102+ self.assertEqual(results[0]['content'],
103+ u"Gogs est une interface web basée sur git et une bonne alternative à GitHub.")