]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - tests/LinkFilterTest.php
lint: fix line-length warnings
[github/shaarli/Shaarli.git] / tests / LinkFilterTest.php
index 31fd4cf499ac0606d32ced23d261b6ac1c18ad0a..eb54c3591af12fb6111389d34d55b5979149bc10 100644 (file)
@@ -7,18 +7,34 @@ require_once 'application/LinkFilter.php';
  */
 class LinkFilterTest extends PHPUnit_Framework_TestCase
 {
+    /**
+     * @var string Test datastore path.
+     */
+    protected static $testDatastore = 'sandbox/datastore.php';
     /**
      * @var LinkFilter instance.
      */
     protected static $linkFilter;
 
+    /**
+     * @var ReferenceLinkDB instance
+     */
+    protected static $refDB;
+
+    /**
+     * @var LinkDB instance
+     */
+    protected static $linkDB;
+
     /**
      * Instanciate linkFilter with ReferenceLinkDB data.
      */
     public static function setUpBeforeClass()
     {
-        $refDB = new ReferenceLinkDB();
-        self::$linkFilter = new LinkFilter($refDB->getLinks());
+        self::$refDB = new ReferenceLinkDB();
+        self::$refDB->write(self::$testDatastore);
+        self::$linkDB = new LinkDB(self::$testDatastore, true, false);
+        self::$linkFilter = new LinkFilter(self::$linkDB);
     }
 
     /**
@@ -27,14 +43,53 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
     public function testFilter()
     {
         $this->assertEquals(
-            7,
+            self::$refDB->countLinks(),
             count(self::$linkFilter->filter('', ''))
         );
 
+        $this->assertEquals(
+            self::$refDB->countLinks(),
+            count(self::$linkFilter->filter('', '', 'all'))
+        );
+
+        $this->assertEquals(
+            self::$refDB->countLinks(),
+            count(self::$linkFilter->filter('', '', 'randomstr'))
+        );
+
         // Private only.
         $this->assertEquals(
-            2,
-            count(self::$linkFilter->filter('', '', false, true))
+            self::$refDB->countPrivateLinks(),
+            count(self::$linkFilter->filter('', '', false, 'private'))
+        );
+
+        // Public only.
+        $this->assertEquals(
+            self::$refDB->countPublicLinks(),
+            count(self::$linkFilter->filter('', '', false, 'public'))
+        );
+
+        $this->assertEquals(
+            ReferenceLinkDB::$NB_LINKS_TOTAL,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, ''))
+        );
+
+        $this->assertEquals(
+            self::$refDB->countUntaggedLinks(),
+            count(
+                self::$linkFilter->filter(
+                    LinkFilter::$FILTER_TAG,
+                    /*$request=*/'',
+                    /*$casesensitive=*/false,
+                    /*$visibility=*/'all',
+                    /*$untaggedonly=*/true
+                )
+            )
+        );
+
+        $this->assertEquals(
+            ReferenceLinkDB::$NB_LINKS_TOTAL,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, ''))
         );
     }
 
@@ -48,10 +103,26 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
             count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false))
         );
 
+        $this->assertEquals(
+            4,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'all'))
+        );
+
+        $this->assertEquals(
+            4,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'default-blabla'))
+        );
+
         // Private only.
         $this->assertEquals(
             1,
-            count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, true))
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'private'))
+        );
+
+        // Public only.
+        $this->assertEquals(
+            3,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'public'))
         );
     }
 
@@ -99,7 +170,7 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
     public function testFilterDay()
     {
         $this->assertEquals(
-            3,
+            4,
             count(self::$linkFilter->filter(LinkFilter::$FILTER_DAY, '20121206'))
         );
     }
@@ -149,19 +220,18 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
 
         $this->assertEquals(
             'MediaGoblin',
-            $links['20130614_184135']['title']
+            $links[7]['title']
         );
     }
 
     /**
      * No link for this hash
+     *
+     * @expectedException LinkNotFoundException
      */
     public function testFilterUnknownSmallHash()
     {
-        $this->assertEquals(
-            0,
-            count(self::$linkFilter->filter(LinkFilter::$FILTER_HASH, 'Iblaah'))
-        );
+        self::$linkFilter->filter(LinkFilter::$FILTER_HASH, 'Iblaah');
     }
 
     /**
@@ -184,7 +254,7 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
             2,
             count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'ars.userfriendly.org'))
         );
-        
+
         $this->assertEquals(
             2,
             count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'ars org'))
@@ -226,16 +296,16 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
             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"'))
-        );        
+        );
     }
 
     /**
@@ -244,14 +314,30 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
     public function testFilterFullTextTags()
     {
         $this->assertEquals(
-            2,
-            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'gnu'))
+            6,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web'))
+        );
+
+        $this->assertEquals(
+            6,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', 'all'))
+        );
+
+        $this->assertEquals(
+            6,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', 'bla'))
         );
 
         // Private only.
         $this->assertEquals(
             1,
-            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', false, true))
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', false, 'private'))
+        );
+
+        // Public only.
+        $this->assertEquals(
+            5,
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', false, 'public'))
         );
     }
 
@@ -277,7 +363,7 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
         );
 
         $this->assertEquals(
-            6,
+            ReferenceLinkDB::$NB_LINKS_TOTAL - 1,
             count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, '-revolution'))
         );
     }
@@ -337,8 +423,78 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
         );
 
         $this->assertEquals(
-            6,
+            ReferenceLinkDB::$NB_LINKS_TOTAL - 1,
             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(false, 'PSR-2')
+            ))
+        );
+        $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,
+                'private'
+            ))
+        );
+    }
 }