3 require_once 'application/LinkFilter.php';
6 * Class LinkFilterTest.
8 class LinkFilterTest
extends PHPUnit_Framework_TestCase
11 * @var LinkFilter instance.
13 protected static $linkFilter;
15 protected static $NB_LINKS_REFDB = 7;
18 * Instanciate linkFilter with ReferenceLinkDB data.
20 public static function setUpBeforeClass()
22 $refDB = new ReferenceLinkDB();
23 self
::$linkFilter = new LinkFilter($refDB->getLinks());
29 public function testFilter()
32 self
::$NB_LINKS_REFDB,
33 count(self
::$linkFilter->filter('', ''))
39 count(self
::$linkFilter->filter('', '', false, true))
43 self
::$NB_LINKS_REFDB,
44 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, ''))
48 self
::$NB_LINKS_REFDB,
49 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, ''))
54 * Filter links using a tag
56 public function testFilterOneTag()
60 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false))
66 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false, true))
71 * Filter links using a tag - case-sensitive
73 public function testFilterCaseSensitiveTag()
77 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'mercurial', true))
82 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'Mercurial', true))
87 * Filter links using a tag combination
89 public function testFilterMultipleTags()
93 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'dev cartoon', false))
98 * Filter links using a non-existent tag
100 public function testFilterUnknownTag()
104 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'null', false))
109 * Return links for a given day
111 public function testFilterDay()
115 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20121206'))
120 * 404 - day not found
122 public function testFilterUnknownDay()
126 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '19700101'))
131 * Use an invalid date format
132 * @expectedException Exception
133 * @expectedExceptionMessageRegExp /Invalid date format/
135 public function testFilterInvalidDayWithChars()
137 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, 'Rainy day, dream away');
141 * Use an invalid date format
142 * @expectedException Exception
143 * @expectedExceptionMessageRegExp /Invalid date format/
145 public function testFilterInvalidDayDigits()
147 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20');
151 * Retrieve a link entry with its hash
153 public function testFilterSmallHash()
155 $links = self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'IuWvgA');
164 $links['20130614_184135']['title']
169 * No link for this hash
171 public function testFilterUnknownSmallHash()
175 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'Iblaah'))
180 * Full-text search - no result found.
182 public function testFilterFullTextNoResult()
186 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'azertyuiop'))
191 * Full-text search - result from a link's URL
193 public function testFilterFullTextURL()
197 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars.userfriendly.org'))
202 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars org'))
207 * Full-text search - result from a link's title only
209 public function testFilterFullTextTitle()
211 // use miscellaneous cases
214 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'userfriendly -'))
218 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'UserFriendly -'))
222 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'uSeRFrIendlY -'))
225 // use miscellaneous case and offset
228 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'RFrIendL'))
233 * Full-text search - result from the link's description only
235 public function testFilterFullTextDescription()
239 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'publishing media'))
244 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'mercurial w3c'))
249 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '"free software"'))
254 * Full-text search - result from the link's tags only
256 public function testFilterFullTextTags()
260 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'gnu'))
266 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', false, true))
271 * Full-text search - result set from mixed sources
273 public function testFilterFullTextMixed()
277 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free software'))
282 * Full-text search - test exclusion with '-'.
284 public function testExcludeSearch()
288 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free -gnu'))
293 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '-revolution'))
298 * Full-text search - test AND, exact terms and exclusion combined, across fields.
300 public function testMultiSearch()
304 count(self
::$linkFilter->filter(
305 LinkFilter
::$FILTER_TEXT,
306 '"Free Software " stallman "read this" @website stuff'
312 count(self
::$linkFilter->filter(
313 LinkFilter
::$FILTER_TEXT,
314 '"free software " stallman "read this" -beard @website stuff'
320 * Full-text search - make sure that exact search won't work across fields.
322 public function testSearchExactTermMultiFieldsKo()
326 count(self
::$linkFilter->filter(
327 LinkFilter
::$FILTER_TEXT,
334 count(self
::$linkFilter->filter(
335 LinkFilter
::$FILTER_TEXT,
342 * Tag search with exclusion.
344 public function testTagFilterWithExclusion()
348 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'gnu -free'))
353 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, '-free'))
358 * Test crossed search (terms + tags).
360 public function testFilterCrossedSearch()
362 $terms = '"Free Software " stallman "read this" @website stuff';
366 count(self
::$linkFilter->filter(
367 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
373 count(self
::$linkFilter->filter(
374 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
380 count(self
::$linkFilter->filter(
381 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
386 self
::$NB_LINKS_REFDB,
387 count(self
::$linkFilter->filter(
388 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,