123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- <?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(
- 6,
- count(self::$linkFilter->filter('', ''))
- );
- // Private only.
- $this->assertEquals(
- 2,
- count(self::$linkFilter->filter('', '', false, true))
- );
- }
- /**
- * 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
- */
- public function testFilterUnknownSmallHash()
- {
- $this->assertEquals(
- 0,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_HASH, 'Iblaah'))
- );
- }
- /**
- * 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'))
- );
- }
- /**
- * 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, 'media publishing'))
- );
- }
- /**
- * 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(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'free software'))
- );
- }
- }
|