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 * @var ReferenceLinkDB instance
18 protected static $refDB;
21 * Instanciate linkFilter with ReferenceLinkDB data.
23 public static function setUpBeforeClass()
25 self
::$refDB = new ReferenceLinkDB();
26 self
::$linkFilter = new LinkFilter(self
::$refDB->getLinks());
32 public function testFilter()
35 self
::$refDB->countLinks(),
36 count(self
::$linkFilter->filter('', ''))
40 self
::$refDB->countLinks(),
41 count(self
::$linkFilter->filter('', '', 'all'))
45 self
::$refDB->countLinks(),
46 count(self
::$linkFilter->filter('', '', 'randomstr'))
51 self
::$refDB->countPrivateLinks(),
52 count(self
::$linkFilter->filter('', '', false, 'private'))
57 self
::$refDB->countPublicLinks(),
58 count(self
::$linkFilter->filter('', '', false, 'public'))
62 ReferenceLinkDB
::$NB_LINKS_TOTAL,
63 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, ''))
67 ReferenceLinkDB
::$NB_LINKS_TOTAL,
68 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, ''))
73 * Filter links using a tag
75 public function testFilterOneTag()
79 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false))
84 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false, 'all'))
89 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false, 'default-blabla'))
95 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false, 'private'))
101 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false, 'public'))
106 * Filter links using a tag - case-sensitive
108 public function testFilterCaseSensitiveTag()
112 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'mercurial', true))
117 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'Mercurial', true))
122 * Filter links using a tag combination
124 public function testFilterMultipleTags()
128 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'dev cartoon', false))
133 * Filter links using a non-existent tag
135 public function testFilterUnknownTag()
139 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'null', false))
144 * Return links for a given day
146 public function testFilterDay()
150 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20121206'))
155 * 404 - day not found
157 public function testFilterUnknownDay()
161 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '19700101'))
166 * Use an invalid date format
167 * @expectedException Exception
168 * @expectedExceptionMessageRegExp /Invalid date format/
170 public function testFilterInvalidDayWithChars()
172 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, 'Rainy day, dream away');
176 * Use an invalid date format
177 * @expectedException Exception
178 * @expectedExceptionMessageRegExp /Invalid date format/
180 public function testFilterInvalidDayDigits()
182 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20');
186 * Retrieve a link entry with its hash
188 public function testFilterSmallHash()
190 $links = self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'IuWvgA');
204 * No link for this hash
206 * @expectedException LinkNotFoundException
208 public function testFilterUnknownSmallHash()
210 self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'Iblaah');
214 * Full-text search - no result found.
216 public function testFilterFullTextNoResult()
220 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'azertyuiop'))
225 * Full-text search - result from a link's URL
227 public function testFilterFullTextURL()
231 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars.userfriendly.org'))
236 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars org'))
241 * Full-text search - result from a link's title only
243 public function testFilterFullTextTitle()
245 // use miscellaneous cases
248 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'userfriendly -'))
252 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'UserFriendly -'))
256 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'uSeRFrIendlY -'))
259 // use miscellaneous case and offset
262 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'RFrIendL'))
267 * Full-text search - result from the link's description only
269 public function testFilterFullTextDescription()
273 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'publishing media'))
278 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'mercurial w3c'))
283 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '"free software"'))
288 * Full-text search - result from the link's tags only
290 public function testFilterFullTextTags()
294 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web'))
299 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', 'all'))
304 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', 'bla'))
310 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', false, 'private'))
316 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', false, 'public'))
321 * Full-text search - result set from mixed sources
323 public function testFilterFullTextMixed()
327 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free software'))
332 * Full-text search - test exclusion with '-'.
334 public function testExcludeSearch()
338 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free -gnu'))
343 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '-revolution'))
348 * Full-text search - test AND, exact terms and exclusion combined, across fields.
350 public function testMultiSearch()
354 count(self
::$linkFilter->filter(
355 LinkFilter
::$FILTER_TEXT,
356 '"Free Software " stallman "read this" @website stuff'
362 count(self
::$linkFilter->filter(
363 LinkFilter
::$FILTER_TEXT,
364 '"free software " stallman "read this" -beard @website stuff'
370 * Full-text search - make sure that exact search won't work across fields.
372 public function testSearchExactTermMultiFieldsKo()
376 count(self
::$linkFilter->filter(
377 LinkFilter
::$FILTER_TEXT,
384 count(self
::$linkFilter->filter(
385 LinkFilter
::$FILTER_TEXT,
392 * Tag search with exclusion.
394 public function testTagFilterWithExclusion()
398 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'gnu -free'))
403 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, '-free'))
408 * Test crossed search (terms + tags).
410 public function testFilterCrossedSearch()
412 $terms = '"Free Software " stallman "read this" @website stuff';
416 count(self
::$linkFilter->filter(
417 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
423 count(self
::$linkFilter->filter(
424 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
430 count(self
::$linkFilter->filter(
431 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
436 ReferenceLinkDB
::$NB_LINKS_TOTAL,
437 count(self
::$linkFilter->filter(
438 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
445 * Filter links by #hashtag.
447 public function testFilterByHashtag()
449 $hashtag = 'hashtag';
452 count(self
::$linkFilter->filter(
453 LinkFilter
::$FILTER_TAG,
458 $hashtag = 'private';
461 count(self
::$linkFilter->filter(
462 LinkFilter
::$FILTER_TAG,