3 require_once 'application/LinkFilter.php';
6 * Class LinkFilterTest.
8 class LinkFilterTest
extends PHPUnit_Framework_TestCase
11 * @var LinkFilter instance.
13 protected static $linkFilter;
16 * Instanciate linkFilter with ReferenceLinkDB data.
18 public static function setUpBeforeClass()
20 $refDB = new ReferenceLinkDB();
21 self
::$linkFilter = new LinkFilter($refDB->getLinks());
27 public function testFilter()
30 ReferenceLinkDB
::$NB_LINKS_TOTAL,
31 count(self
::$linkFilter->filter('', ''))
37 count(self
::$linkFilter->filter('', '', false, true))
41 ReferenceLinkDB
::$NB_LINKS_TOTAL,
42 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, ''))
46 ReferenceLinkDB
::$NB_LINKS_TOTAL,
47 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, ''))
52 * Filter links using a tag
54 public function testFilterOneTag()
58 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false))
64 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false, true))
69 * Filter links using a tag - case-sensitive
71 public function testFilterCaseSensitiveTag()
75 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'mercurial', true))
80 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'Mercurial', true))
85 * Filter links using a tag combination
87 public function testFilterMultipleTags()
91 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'dev cartoon', false))
96 * Filter links using a non-existent tag
98 public function testFilterUnknownTag()
102 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'null', false))
107 * Return links for a given day
109 public function testFilterDay()
113 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20121206'))
118 * 404 - day not found
120 public function testFilterUnknownDay()
124 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '19700101'))
129 * Use an invalid date format
130 * @expectedException Exception
131 * @expectedExceptionMessageRegExp /Invalid date format/
133 public function testFilterInvalidDayWithChars()
135 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, 'Rainy day, dream away');
139 * Use an invalid date format
140 * @expectedException Exception
141 * @expectedExceptionMessageRegExp /Invalid date format/
143 public function testFilterInvalidDayDigits()
145 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20');
149 * Retrieve a link entry with its hash
151 public function testFilterSmallHash()
153 $links = self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'IuWvgA');
162 $links['20130614_184135']['title']
167 * No link for this hash
169 * @expectedException LinkNotFoundException
171 public function testFilterUnknownSmallHash()
173 self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'Iblaah');
177 * Full-text search - no result found.
179 public function testFilterFullTextNoResult()
183 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'azertyuiop'))
188 * Full-text search - result from a link's URL
190 public function testFilterFullTextURL()
194 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars.userfriendly.org'))
199 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars org'))
204 * Full-text search - result from a link's title only
206 public function testFilterFullTextTitle()
208 // use miscellaneous cases
211 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'userfriendly -'))
215 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'UserFriendly -'))
219 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'uSeRFrIendlY -'))
222 // use miscellaneous case and offset
225 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'RFrIendL'))
230 * Full-text search - result from the link's description only
232 public function testFilterFullTextDescription()
236 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'publishing media'))
241 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'mercurial w3c'))
246 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '"free software"'))
251 * Full-text search - result from the link's tags only
253 public function testFilterFullTextTags()
257 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'gnu'))
263 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', false, true))
268 * Full-text search - result set from mixed sources
270 public function testFilterFullTextMixed()
274 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free software'))
279 * Full-text search - test exclusion with '-'.
281 public function testExcludeSearch()
285 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free -gnu'))
290 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '-revolution'))
295 * Full-text search - test AND, exact terms and exclusion combined, across fields.
297 public function testMultiSearch()
301 count(self
::$linkFilter->filter(
302 LinkFilter
::$FILTER_TEXT,
303 '"Free Software " stallman "read this" @website stuff'
309 count(self
::$linkFilter->filter(
310 LinkFilter
::$FILTER_TEXT,
311 '"free software " stallman "read this" -beard @website stuff'
317 * Full-text search - make sure that exact search won't work across fields.
319 public function testSearchExactTermMultiFieldsKo()
323 count(self
::$linkFilter->filter(
324 LinkFilter
::$FILTER_TEXT,
331 count(self
::$linkFilter->filter(
332 LinkFilter
::$FILTER_TEXT,
339 * Tag search with exclusion.
341 public function testTagFilterWithExclusion()
345 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'gnu -free'))
350 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, '-free'))
355 * Test crossed search (terms + tags).
357 public function testFilterCrossedSearch()
359 $terms = '"Free Software " stallman "read this" @website stuff';
363 count(self
::$linkFilter->filter(
364 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
370 count(self
::$linkFilter->filter(
371 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
377 count(self
::$linkFilter->filter(
378 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
383 ReferenceLinkDB
::$NB_LINKS_TOTAL,
384 count(self
::$linkFilter->filter(
385 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,