@@ -2,6 +2,7 @@ from collections import defaultdict
3from searx.engines import bing_news
3from searx.engines import bing_news
4from searx.testing import SearxTestCase
4from searx.testing import SearxTestCase
7class TestBingNewsEngine(SearxTestCase):
8class TestBingNewsEngine(SearxTestCase):
@@ -16,14 +17,10 @@ class TestBingNewsEngine(SearxTestCase):
16 self.assertIn(query, params['url'])
17 self.assertIn(query, params['url'])
17 self.assertIn('bing.com', params['url'])
18 self.assertIn('bing.com', params['url'])
18 self.assertIn('fr', params['url'])
19 self.assertIn('fr', params['url'])
19− self.assertIn('_FP', params['cookies'])
20− self.assertIn('en', params['cookies']['_FP'])
22 dicto['language'] = 'all'
21 dicto['language'] = 'all'
23 params = bing_news.request(query, dicto)
22 params = bing_news.request(query, dicto)
24 self.assertIn('en', params['url'])
23 self.assertIn('en', params['url'])
25− self.assertIn('_FP', params['cookies'])
26− self.assertIn('en', params['cookies']['_FP'])
28 def test_response(self):
25 def test_response(self):
29 self.assertRaises(AttributeError, bing_news.response, None)
26 self.assertRaises(AttributeError, bing_news.response, None)
@@ -37,200 +34,105 @@ class TestBingNewsEngine(SearxTestCase):
37 response = mock.Mock(content='<html></html>')
34 response = mock.Mock(content='<html></html>')
38 self.assertEqual(bing_news.response(response), [])
35 self.assertEqual(bing_news.response(response), [])
40− html = """
37+ html = """<?xml version="1.0" encoding="utf-8" ?>
41− <div class="sn_r">
38+<rss version="2.0" xmlns:News="https://www.bing.com:443/news/search?q=python&setmkt=en-US&first=1&format=RSS">
42− <div class="newstitle">
39+ <channel>
43− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
40+ <title>python - Bing News</title>
44− Title
41+ <link>https://www.bing.com:443/news/search?q=python&setmkt=en-US&first=1&format=RSS</link>
45− </a>
42+ <description>Search results</description>
47− <div class="sn_img">
44+ <url>http://10.53.64.9/rsslogo.gif</url>
48− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
45+ <title>test</title>
49− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
46+ <link>https://www.bing.com:443/news/search?q=test&setmkt=en-US&first=1&format=RSS</link>
51− </div>
48+ <copyright>Copyright</copyright>
52− <div class="sn_txt">
49+ <item>
53− <div class="sn_oi">
50+ <title>Title</title>
54− <span class="sn_snip">Article Content</span>
51+ <link>https://www.bing.com/news/apiclick.aspx?ref=FexRss&aid=&tid=c237eccc50bd4758b106a5e3c94fce09&url=http%3a%2f%2furl.of.article%2f&c=xxxxxxxxx&mkt=en-us</link>
55− <div class="sn_ST">
52+ <description>Article Content</description>
56− <cite class="sn_src">metronews.fr</cite>
53+ <pubDate>Tue, 02 Jun 2015 13:37:00 GMT</pubDate>
57− · 
54+ <News:Source>Infoworld</News:Source>
58− <span class="sn_tm">44 minutes ago</span>
55+ <News:Image>http://a1.bing4.com/th?id=ON.13371337133713371337133713371337&pid=News</News:Image>
59− </div>
56+ <News:ImageSize>w={0}&h={1}&c=7</News:ImageSize>
60− </div>
57+ <News:ImageKeepOriginalRatio></News:ImageKeepOriginalRatio>
61− </div>
58+ <News:ImageMaxWidth>620</News:ImageMaxWidth>
62− </div>
59+ <News:ImageMaxHeight>413</News:ImageMaxHeight>
62+ <title>Another Title</title>
63+ <link>https://www.bing.com/news/apiclick.aspx?ref=FexRss&aid=&tid=c237eccc50bd4758b106a5e3c94fce09&url=http%3a%2f%2fanother.url.of.article%2f&c=xxxxxxxxx&mkt=en-us</link>
64+ <description>Another Article Content</description>
65+ <pubDate>Tue, 02 Jun 2015 13:37:00 GMT</pubDate>
64 response = mock.Mock(content=html)
69 response = mock.Mock(content=html)
65 results = bing_news.response(response)
70 results = bing_news.response(response)
66 self.assertEqual(type(results), list)
71 self.assertEqual(type(results), list)
67− self.assertEqual(len(results), 1)
72+ self.assertEqual(len(results), 2)
68 self.assertEqual(results[0]['title'], 'Title')
73 self.assertEqual(results[0]['title'], 'Title')
69 self.assertEqual(results[0]['url'], 'http://url.of.article/')
74 self.assertEqual(results[0]['url'], 'http://url.of.article/')
70 self.assertEqual(results[0]['content'], 'Article Content')
75 self.assertEqual(results[0]['content'], 'Article Content')
76+ self.assertEqual(results[0]['thumbnail'], 'https://www.bing.com/th?id=ON.13371337133713371337133713371337')
77+ self.assertEqual(results[1]['title'], 'Another Title')
78+ self.assertEqual(results[1]['url'], 'http://another.url.of.article/')
79+ self.assertEqual(results[1]['content'], 'Another Article Content')
80+ self.assertNotIn('thumbnail', results[1])
72− html = """
82+ html = """<?xml version="1.0" encoding="utf-8" ?>
73− <div class="sn_r">
83+<rss version="2.0" xmlns:News="https://www.bing.com:443/news/search?q=python&setmkt=en-US&first=1&format=RSS">
74− <div class="newstitle">
84+ <channel>
75− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
85+ <title>python - Bing News</title>
76− Title
86+ <link>https://www.bing.com:443/news/search?q=python&setmkt=en-US&first=1&format=RSS</link>
77− </a>
87+ <description>Search results</description>
79− <div class="sn_img">
89+ <url>http://10.53.64.9/rsslogo.gif</url>
80− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
90+ <title>test</title>
81− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
91+ <link>https://www.bing.com:443/news/search?q=test&setmkt=en-US&first=1&format=RSS</link>
83− </div>
93+ <copyright>Copyright</copyright>
84− <div class="sn_txt">
94+ <item>
85− <div class="sn_oi">
95+ <title>Title</title>
86− <span class="sn_snip">Article Content</span>
96+ <link>http://another.url.of.article/</link>
88− <cite class="sn_src">metronews.fr</cite>
90− <span class="sn_tm">44 minutes ago</span>
96− <div class="newstitle">
97− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
101− <div class="sn_img">
102− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
103− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
106− <div class="sn_txt">
108− <span class="sn_snip">Article Content</span>
110− <cite class="sn_src">metronews.fr</cite>
112− <span class="sn_tm">3 hours, 44 minutes ago</span>
118− <div class="newstitle">
119− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
123− <div class="sn_img">
124− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
125− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
128− <div class="sn_txt">
130− <span class="sn_snip">Article Content</span>
132− <cite class="sn_src">metronews.fr</cite>
134− <span class="sn_tm">44 hours ago</span>
140− <div class="newstitle">
141− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
145− <div class="sn_img">
146− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
147− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
150− <div class="sn_txt">
152− <span class="sn_snip">Article Content</span>
154− <cite class="sn_src">metronews.fr</cite>
156− <span class="sn_tm">2 days ago</span>
162− <div class="newstitle">
163− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
167− <div class="sn_img">
168− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
169− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
172− <div class="sn_txt">
174− <span class="sn_snip">Article Content</span>
176− <cite class="sn_src">metronews.fr</cite>
178− <span class="sn_tm">27/01/2015</span>
184− <div class="newstitle">
185− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
189− <div class="sn_img">
190− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
191− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
194− <div class="sn_txt">
196− <span class="sn_snip">Article Content</span>
97+ <description>Article Content</description>
197− <div class="sn_ST">
98+ <pubDate>garbage</pubDate>
198− <cite class="sn_src">metronews.fr</cite>
99+ <News:Source>Infoworld</News:Source>
199− · 
100+ <News:Image>http://another.bing.com/image</News:Image>
200− <span class="sn_tm">Il y a 3 heures</span>
101+ <News:ImageSize>w={0}&h={1}&c=7</News:ImageSize>
201− </div>
102+ <News:ImageKeepOriginalRatio></News:ImageKeepOriginalRatio>
202− </div>
103+ <News:ImageMaxWidth>620</News:ImageMaxWidth>
203− </div>
104+ <News:ImageMaxHeight>413</News:ImageMaxHeight>
206 response = mock.Mock(content=html)
108 response = mock.Mock(content=html)
207 results = bing_news.response(response)
109 results = bing_news.response(response)
208 self.assertEqual(type(results), list)
110 self.assertEqual(type(results), list)
209− self.assertEqual(len(results), 6)
111+ self.assertEqual(len(results), 1)
112+ self.assertEqual(results[0]['title'], 'Title')
113+ self.assertEqual(results[0]['url'], 'http://another.url.of.article/')
114+ self.assertEqual(results[0]['content'], 'Article Content')
115+ self.assertEqual(results[0]['thumbnail'], 'http://another.bing.com/image')
117+ html = """<?xml version="1.0" encoding="utf-8" ?>
118+<rss version="2.0" xmlns:News="https://www.bing.com:443/news/search?q=python&setmkt=en-US&first=1&format=RSS">
120+ <title>python - Bing News</title>
121+ <link>https://www.bing.com:443/news/search?q=python&setmkt=en-US&first=1&format=RSS</link>
122+ <description>Search results</description>
124+ <url>http://10.53.64.9/rsslogo.gif</url>
126+ <link>https://www.bing.com:443/news/search?q=test&setmkt=en-US&first=1&format=RSS</link>
212− <div class="newstitle">
213− <a href="http://url.of.article/" target="_blank" h="ID=news,5022.1">
217− <div class="sn_img">
218− <a href="http://url.of.article2/" target="_blank" h="ID=news,5024.1">
219− <img class="rms_img" height="80" id="emb1" src="/image.src" title="Title" width="80" />
222− <div class="sn_txt">
224− <span class="sn_snip">Article Content</span>
226− <cite class="sn_src">metronews.fr</cite>
228− <span class="sn_tm">44 minutes ago</span>
233 response = mock.Mock(content=html)
131 response = mock.Mock(content=html)
234 results = bing_news.response(response)
132 results = bing_news.response(response)
235 self.assertEqual(type(results), list)
133 self.assertEqual(type(results), list)
236 self.assertEqual(len(results), 0)
134 self.assertEqual(len(results), 0)
136+ html = """<?xml version="1.0" encoding="utf-8" ?>gabarge"""
137+ response = mock.Mock(content=html)
138+ self.assertRaises(lxml.etree.XMLSyntaxError, bing_news.response, response)