]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - tests/LinkFilterTest.php
Unit Test for the new ID system
[github/shaarli/Shaarli.git] / tests / LinkFilterTest.php
index 5107ab72230945a4d6f1ea6853e423b4efb9e19f..21d680a5ae59f55532e85e45f67e7abc4e1b31f1 100644 (file)
@@ -27,7 +27,7 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
     public function testFilter()
     {
         $this->assertEquals(
-            6,
+            ReferenceLinkDB::$NB_LINKS_TOTAL,
             count(self::$linkFilter->filter('', ''))
         );
 
@@ -36,6 +36,16 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
             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, ''))
+        );
     }
 
     /**
@@ -149,18 +159,28 @@ 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()
+    {
+        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_HASH, 'Iblaah'))
+            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'azertyuiop'))
         );
     }
 
@@ -173,6 +193,11 @@ 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'))
+        );
     }
 
     /**
@@ -208,8 +233,18 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
     {
         $this->assertEquals(
             1,
-            count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'media publishing'))
+            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"'))
+        );        
     }
 
     /**
@@ -235,8 +270,147 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
     public function testFilterFullTextMixed()
     {
         $this->assertEquals(
-            2,
+            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(
+            7,
+            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(
+            7,
+            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
+            ))
+        );
+    }
 }