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 public function testFilterUnknownSmallHash()
173 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'Iblaah'))
178 * Full-text search - no result found.
180 public function testFilterFullTextNoResult()
184 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'azertyuiop'))
189 * Full-text search - result from a link's URL
191 public function testFilterFullTextURL()
195 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars.userfriendly.org'))
200 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars org'))
205 * Full-text search - result from a link's title only
207 public function testFilterFullTextTitle()
209 // use miscellaneous cases
212 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'userfriendly -'))
216 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'UserFriendly -'))
220 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'uSeRFrIendlY -'))
223 // use miscellaneous case and offset
226 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'RFrIendL'))
231 * Full-text search - result from the link's description only
233 public function testFilterFullTextDescription()
237 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'publishing media'))
242 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'mercurial w3c'))
247 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '"free software"'))
252 * Full-text search - result from the link's tags only
254 public function testFilterFullTextTags()
258 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'gnu'))
264 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', false, true))
269 * Full-text search - result set from mixed sources
271 public function testFilterFullTextMixed()
275 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free software'))
280 * Full-text search - test exclusion with '-'.
282 public function testExcludeSearch()
286 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free -gnu'))
291 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '-revolution'))
296 * Full-text search - test AND, exact terms and exclusion combined, across fields.
298 public function testMultiSearch()
302 count(self
::$linkFilter->filter(
303 LinkFilter
::$FILTER_TEXT,
304 '"Free Software " stallman "read this" @website stuff'
310 count(self
::$linkFilter->filter(
311 LinkFilter
::$FILTER_TEXT,
312 '"free software " stallman "read this" -beard @website stuff'
318 * Full-text search - make sure that exact search won't work across fields.
320 public function testSearchExactTermMultiFieldsKo()
324 count(self
::$linkFilter->filter(
325 LinkFilter
::$FILTER_TEXT,
332 count(self
::$linkFilter->filter(
333 LinkFilter
::$FILTER_TEXT,
340 * Tag search with exclusion.
342 public function testTagFilterWithExclusion()
346 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'gnu -free'))
351 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, '-free'))
356 * Test crossed search (terms + tags).
358 public function testFilterCrossedSearch()
360 $terms = '"Free Software " stallman "read this" @website stuff';
364 count(self
::$linkFilter->filter(
365 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
371 count(self
::$linkFilter->filter(
372 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
378 count(self
::$linkFilter->filter(
379 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,
384 ReferenceLinkDB
::$NB_LINKS_TOTAL,
385 count(self
::$linkFilter->filter(
386 LinkFilter
::$FILTER_TAG | LinkFilter
::$FILTER_TEXT,