123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- <?php
- require_once 'application/LinkFilter.php';
- /**
- * Class LinkFilterTest.
- */
- class LinkFilterTest extends PHPUnit_Framework_TestCase
- {
- /**
- * @var LinkFilter instance.
- */
- protected static $linkFilter;
- /**
- * Instanciate linkFilter with ReferenceLinkDB data.
- */
- public static function setUpBeforeClass()
- {
- $refDB = new ReferenceLinkDB();
- self::$linkFilter = new LinkFilter($refDB->getLinks());
- }
- /**
- * Blank filter.
- */
- public function testFilter()
- {
- $this->assertEquals(
- ReferenceLinkDB::$NB_LINKS_TOTAL,
- count(self::$linkFilter->filter('', ''))
- );
- // Private only.
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter('', '', false, true))
- );
- $this->assertEquals(
- ReferenceLinkDB::$NB_LINKS_TOTAL,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, ''))
- );
- $this->assertEquals(
- ReferenceLinkDB::$NB_LINKS_TOTAL,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, ''))
- );
- }
- /**
- * Filter links using a tag
- */
- public function testFilterOneTag()
- {
- $this->assertEquals(
- 4,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false))
- );
- // Private only.
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, true))
- );
- }
- /**
- * Filter links using a tag - case-sensitive
- */
- public function testFilterCaseSensitiveTag()
- {
- $this->assertEquals(
- 0,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'mercurial', true))
- );
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'Mercurial', true))
- );
- }
- /**
- * Filter links using a tag combination
- */
- public function testFilterMultipleTags()
- {
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'dev cartoon', false))
- );
- }
- /**
- * Filter links using a non-existent tag
- */
- public function testFilterUnknownTag()
- {
- $this->assertEquals(
- 0,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'null', false))
- );
- }
- /**
- * Return links for a given day
- */
- public function testFilterDay()
- {
- $this->assertEquals(
- 3,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_DAY, '20121206'))
- );
- }
- /**
- * 404 - day not found
- */
- public function testFilterUnknownDay()
- {
- $this->assertEquals(
- 0,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_DAY, '19700101'))
- );
- }
- /**
- * Use an invalid date format
- * @expectedException Exception
- * @expectedExceptionMessageRegExp /Invalid date format/
- */
- public function testFilterInvalidDayWithChars()
- {
- self::$linkFilter->filter(LinkFilter::$FILTER_DAY, 'Rainy day, dream away');
- }
- /**
- * Use an invalid date format
- * @expectedException Exception
- * @expectedExceptionMessageRegExp /Invalid date format/
- */
- public function testFilterInvalidDayDigits()
- {
- self::$linkFilter->filter(LinkFilter::$FILTER_DAY, '20');
- }
- /**
- * Retrieve a link entry with its hash
- */
- public function testFilterSmallHash()
- {
- $links = self::$linkFilter->filter(LinkFilter::$FILTER_HASH, 'IuWvgA');
- $this->assertEquals(
- 1,
- count($links)
- );
- $this->assertEquals(
- 'MediaGoblin',
- $links['20130614_184135']['title']
- );
- }
- /**
- * No link for this hash
- *
- * @expectedException LinkNotFoundException
- */
- public function testFilterUnknownSmallHash()
- {
- self::$linkFilter->filter(LinkFilter::$FILTER_HASH, 'Iblaah');
- }
- /**
- * Full-text search - no result found.
- */
- public function testFilterFullTextNoResult()
- {
- $this->assertEquals(
- 0,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'azertyuiop'))
- );
- }
- /**
- * Full-text search - result from a link's URL
- */
- public function testFilterFullTextURL()
- {
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'ars.userfriendly.org'))
- );
-
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'ars org'))
- );
- }
- /**
- * Full-text search - result from a link's title only
- */
- public function testFilterFullTextTitle()
- {
- // use miscellaneous cases
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'userfriendly -'))
- );
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'UserFriendly -'))
- );
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'uSeRFrIendlY -'))
- );
- // use miscellaneous case and offset
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'RFrIendL'))
- );
- }
- /**
- * Full-text search - result from the link's description only
- */
- public function testFilterFullTextDescription()
- {
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'publishing media'))
- );
-
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'mercurial w3c'))
- );
-
- $this->assertEquals(
- 3,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, '"free software"'))
- );
- }
- /**
- * Full-text search - result from the link's tags only
- */
- public function testFilterFullTextTags()
- {
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'gnu'))
- );
- // Private only.
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', false, true))
- );
- }
- /**
- * Full-text search - result set from mixed sources
- */
- public function testFilterFullTextMixed()
- {
- $this->assertEquals(
- 3,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'free software'))
- );
- }
- /**
- * Full-text search - test exclusion with '-'.
- */
- public function testExcludeSearch()
- {
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'free -gnu'))
- );
- $this->assertEquals(
- 6,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, '-revolution'))
- );
- }
- /**
- * Full-text search - test AND, exact terms and exclusion combined, across fields.
- */
- public function testMultiSearch()
- {
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TEXT,
- '"Free Software " stallman "read this" @website stuff'
- ))
- );
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TEXT,
- '"free software " stallman "read this" -beard @website stuff'
- ))
- );
- }
- /**
- * Full-text search - make sure that exact search won't work across fields.
- */
- public function testSearchExactTermMultiFieldsKo()
- {
- $this->assertEquals(
- 0,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TEXT,
- '"designer naming"'
- ))
- );
- $this->assertEquals(
- 0,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TEXT,
- '"designernaming"'
- ))
- );
- }
- /**
- * Tag search with exclusion.
- */
- public function testTagFilterWithExclusion()
- {
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'gnu -free'))
- );
- $this->assertEquals(
- 6,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, '-free'))
- );
- }
- /**
- * Test crossed search (terms + tags).
- */
- public function testFilterCrossedSearch()
- {
- $terms = '"Free Software " stallman "read this" @website stuff';
- $tags = 'free';
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
- array($tags, $terms)
- ))
- );
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
- array('', $terms)
- ))
- );
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
- array($tags, '')
- ))
- );
- $this->assertEquals(
- ReferenceLinkDB::$NB_LINKS_TOTAL,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
- ''
- ))
- );
- }
- /**
- * Filter links by #hashtag.
- */
- public function testFilterByHashtag()
- {
- $hashtag = 'hashtag';
- $this->assertEquals(
- 3,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TAG,
- $hashtag
- ))
- );
- $hashtag = 'private';
- $this->assertEquals(
- 1,
- count(self::$linkFilter->filter(
- LinkFilter::$FILTER_TAG,
- $hashtag,
- false,
- true
- ))
- );
- }
- }
|