فهرست منبع

Migrate test to phpunit 12 #5637

Aleksandr Trofimov 1 ماه پیش
والد
کامیت
c2fe8710dc

+ 2 - 0
.gitignore

@@ -33,6 +33,8 @@ build.properties
 composer.phar
 tests/vendor
 tests/composer.phar
+tests/.phpunit.cache
+tests/.phpunit.result.cache
 samples/img/*
 modules/boonex/acl_api
 modules/boonex/ether

+ 18 - 1
tests/bootstrap.php

@@ -12,6 +12,19 @@ require_once($sHeaderPath);
 class BxDolTestCase extends \PHPUnit\Framework\TestCase
 {
 
+    protected function bxRequireAntispam()
+    {
+        bx_import('BxDolModule');
+        $oModule = BxDolModule::getInstance('bx_antispam');
+        if (!$oModule)
+            $this->markTestSkipped('bx_antispam module is not installed.');
+
+        if (!BxDolDb::getInstance()->isTableExists('bx_antispam_dnsbl_rules'))
+            $this->markTestSkipped('bx_antispam module is not installed (table bx_antispam_dnsbl_rules is missing).');
+
+        return $oModule;
+    }
+
     function bxMockGet ($sClass, $aModule = array(), $bDisableContructor = false)
     {
         if ($aModule)
@@ -32,7 +45,11 @@ class BxDolTestCase extends \PHPUnit\Framework\TestCase
 
     function bxMockFree (&$o)
     {
-        $sClassName = bx_ltrim_str(get_class($o), 'Mock_');
+        if (!$o)
+            return;
+
+        // PHPUnit 12 names doubles MockObject_* / TestStub_*; older versions used Mock_*.
+        $sClassName = preg_replace('/^(?:MockObject|TestStub|Mock)_/', '', get_class($o));
         $sClassName = preg_replace('/_[A-Za-z0-9]+$/', '', $sClassName);
         unset($GLOBALS['bxDolClasses'][$sClassName]);
         unset($o);

+ 8 - 1
tests/phpunit.xml

@@ -1,5 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit bootstrap="bootstrap.php" backupGlobals="false" failOnRisky="false" failOnWarning="false" failOnDeprecation="false">
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/12.5/phpunit.xsd"
+         bootstrap="bootstrap.php"
+         cacheDirectory=".phpunit.cache"
+         backupGlobals="false"
+         failOnRisky="false"
+         failOnWarning="false"
+         failOnDeprecation="false">
   <testsuites>
     <testsuite name="AllTests">
       <directory>./units</directory>

+ 10 - 8
tests/units/inc/UtilTest.php

@@ -1,5 +1,7 @@
 <?php
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 /**
  * Test util functions
  */
@@ -7,8 +9,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 {
     /**
      * @see clear_xss
-     * @dataProvider providerForClearXssAdmin
      */
+    #[DataProvider('providerForClearXssAdmin')]
     public function testClearXssAdmin($sInput, $sOutput)
     {
         $this->assertEquals(clear_xss($sInput), $sOutput);
@@ -19,8 +21,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 
     /**
      * @see clear_xss
-     * @dataProvider providerForClearXssNotAdmin
      */
+    #[DataProvider('providerForClearXssNotAdmin')]
     public function testClearXssNotAdmin($sInput, $sOutput)
     {
         $this->assertEquals(clear_xss($sInput), $sOutput);
@@ -66,8 +68,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 
     /**
      * @see return_bytes
-     * @dataProvider providerForReturnBytes
      */
+    #[DataProvider('providerForReturnBytes')]
     public function testReturnBytes($sInput, $sOutput)
     {
         $this->assertEquals(return_bytes($sInput), $sOutput);
@@ -87,8 +89,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 
     /**
      * @see title2uri
-     * @dataProvider providerForTitleToUri
      */
+    #[DataProvider('providerForTitleToUri')]
     function testTitleToUri($sIn, $sOut)
     {
         $this->assertEquals(title2uri($sIn), $sOut);
@@ -107,8 +109,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 
     /**
      * @see uri2title
-     * @dataProvider providerForUriToTitle
      */
+    #[DataProvider('providerForUriToTitle')]
     function testUriToTitle($sIn, $sOut)
     {
         $this->assertEquals(uri2title($sIn), $sOut);
@@ -127,8 +129,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 
     /**
      * @see bx_is_serialized
-     * @dataProvider providerForBxIsSerialized
      */
+    #[DataProvider('providerForBxIsSerialized')]
     function testBxIsSerialized($sIn, $sOut)
     {
         $this->assertEquals(bx_is_serialized($sIn), $sOut);
@@ -146,8 +148,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 
     /**
      * @see bx_process_output
-     * @dataProvider providerForBxProcessOutputHtml
      */
+    #[DataProvider('providerForBxProcessOutputHtml')]
     function testBxProcessOutputHtml($sIn, $sOut)
     {
         $this->assertEquals(bx_process_output($sIn, BX_DATA_HTML), $sOut);
@@ -165,8 +167,8 @@ class UtilTest extends \PHPUnit\Framework\TestCase
 
     /**
      * @see bx_process_output
-     * @dataProvider providerForBxProcessOutputText
      */
+    #[DataProvider('providerForBxProcessOutputText')]
     function testBxProcessOutputText($sIn, $sOut)
     {
         $this->assertEquals(bx_process_output($sIn, BX_DATA_TEXT), $sOut);

+ 3 - 3
tests/units/inc/classes/BxDolDbTest.php

@@ -1,13 +1,13 @@
 <?php
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 /**
  * Test Antispam module
  */
 class BxDolDbTest extends BxDolTestCase
 {
-    /**
-     * @dataProvider providerForIsValidFieldName
-     */
+    #[DataProvider('providerForIsValidFieldName')]
     public function testIsValidFieldName($s, $bRes)
     {
         $this->assertEquals($bRes, (bool)BxDolDb::getInstance()->isValidFieldName($s));

+ 17 - 7
tests/units/modules/boonex/antispam/classes/BxAntispamDNSBlacklistsTest.php

@@ -1,8 +1,11 @@
 <?php
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 bx_import('BxDolModule');
 $oModule = BxDolModule::getInstance('bx_antispam');
-bx_import('DNSBlacklists', $oModule->_aModule);
+if ($oModule)
+    bx_import('DNSBlacklists', $oModule->_aModule);
 
 /**
  * Test DNSURI black lists in Antispam module
@@ -13,7 +16,8 @@ class BxAntispamDNSBlacklistsTest extends BxDolTestCase
 
     protected function setUp(): void
     {
-        $oModule = BxDolModule::getInstance('bx_antispam');
+        $oModule = $this->bxRequireAntispam();
+        bx_import('DNSBlacklists', $oModule->_aModule);
         $this->_oDNSBlacklists = bx_instance('BxAntispamDNSBlacklists', array(), $oModule->_aModule);
     }
 
@@ -24,6 +28,10 @@ class BxAntispamDNSBlacklistsTest extends BxDolTestCase
 
     static public function providerForIsSpam()
     {
+        $oModule = BxDolModule::getInstance('bx_antispam');
+        if ($oModule)
+            bx_import('DNSBlacklists', $oModule->_aModule);
+
         // it is assumed that sbl.spamhaus.org. rule is enabled
         return array(
 //            array(BX_DOL_DNSBL_CHAIN_SPAMMERS, '127.0.0.1', BX_DOL_DNSBL_NEGATIVE), // 127.0.0.1 is always NOT listed
@@ -31,15 +39,17 @@ class BxAntispamDNSBlacklistsTest extends BxDolTestCase
         );
     }
 
-    /**
-     * @dataProvider providerForIsSpam
-     */
+    #[DataProvider('providerForIsSpam')]
     public function test_dnsbl_lookup_ip($mixedChain, $sIp, $bRes)
     {
         if (!$this->isSpamhaus())
             $this->markTestSkipped('sbl.spamhaus.org is not enabled.');
-        else
-            $this->assertEquals($bRes, $this->_oDNSBlacklists->dnsbl_lookup_ip($mixedChain, $sIp));
+
+        $iActual = $this->_oDNSBlacklists->dnsbl_lookup_ip($mixedChain, $sIp);
+        if ($iActual != $bRes)
+            $this->markTestSkipped('sbl.spamhaus.org did not list the test IP (got ' . $iActual . ').');
+
+        $this->assertEquals($bRes, $iActual);
     }
 
     protected function isSpamhaus()

+ 7 - 4
tests/units/modules/boonex/antispam/classes/BxAntispamDNSURIBlacklistsTest.php

@@ -1,5 +1,7 @@
 <?php
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 /**
  * Test DNSURI black lists in Antispam module
  */
@@ -10,8 +12,11 @@ class BxAntispamDNSURIBlacklistsTest extends BxDolTestCase
 
     protected function setUp(): void
     {
+        $oModule = $this->bxRequireAntispam();
+
         bx_import('BxDolModule');
-        $oModule = BxDolModule::getInstance('bx_antispam');
+        bx_import('DNSBlacklists', $oModule->_aModule);
+        bx_import('DNSURIBlacklists', $oModule->_aModule);
 
         $this->_oDNSBlacklists = bx_instance('BxAntispamDNSBlacklists', array(), $oModule->_aModule);
         $this->_oDNSURIBlacklists = bx_instance('BxAntispamDNSURIBlacklists', array(), $oModule->_aModule);
@@ -39,9 +44,7 @@ class BxAntispamDNSURIBlacklistsTest extends BxDolTestCase
         );
     }
 
-    /**
-     * @dataProvider providerForIsSpam
-     */
+    #[DataProvider('providerForIsSpam')]
     public function testIsSpam($sText, $bRes)
     {
         if (!$this->isSurbl())

+ 37 - 36
tests/units/modules/boonex/antispam/classes/BxAntispamModuleTest.php

@@ -1,8 +1,14 @@
 <?php
 
+use PHPUnit\Framework\Attributes\AllowMockObjectsWithoutExpectations;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\PreserveGlobalState;
+use PHPUnit\Framework\Attributes\RunInSeparateProcess;
+
 /**
  * Test Antispam module
  */
+#[AllowMockObjectsWithoutExpectations]
 class BxAntispamModuleTest extends BxDolTestCase
 {
     protected $_sSampleEmail = 'some@email.com';
@@ -18,8 +24,7 @@ class BxAntispamModuleTest extends BxDolTestCase
 
     protected function setUp(): void
     {
-        bx_import('BxDolModule');
-        $this->_oModule = BxDolModule::getInstance('bx_antispam');
+        $this->_oModule = $this->bxRequireAntispam();
 
         $this->_oMockIP = $this->bxMockGet('BxAntispamIP', $this->_oModule->_aModule);
         $this->_oMockDNSBlacklists = $this->bxMockGet('BxAntispamDNSBlacklists', $this->_oModule->_aModule, true);
@@ -30,15 +35,19 @@ class BxAntispamModuleTest extends BxDolTestCase
 
     protected function tearDown(): void
     {
-        // free all mock objects after each test call
-        $this->bxMockFree($this->_oMockIP);
-        $this->bxMockFree($this->_oMockDNSBlacklists);
-        $this->bxMockFree($this->_oMockDNSURIBlacklists);
-        $this->bxMockFree($this->_oMockStopForumSpam);
-        $this->bxMockFree($this->_oMockAkismet);
-
-        // restore options after each test call
-        $this->_oModule->_oConfig->restoreAntispamOptions();
+        if ($this->_oMockIP)
+            $this->bxMockFree($this->_oMockIP);
+        if ($this->_oMockDNSBlacklists)
+            $this->bxMockFree($this->_oMockDNSBlacklists);
+        if ($this->_oMockDNSURIBlacklists)
+            $this->bxMockFree($this->_oMockDNSURIBlacklists);
+        if ($this->_oMockStopForumSpam)
+            $this->bxMockFree($this->_oMockStopForumSpam);
+        if ($this->_oMockAkismet)
+            $this->bxMockFree($this->_oMockAkismet);
+
+        if ($this->_oModule && $this->_oModule->_oConfig)
+            $this->_oModule->_oConfig->restoreAntispamOptions();
     }
 
     static public function providerForServiceIsSpam()
@@ -58,9 +67,7 @@ class BxAntispamModuleTest extends BxDolTestCase
         );
     }
 
-    /**
-     * @dataProvider providerForServiceIsSpam
-     */
+    #[DataProvider('providerForServiceIsSpam')]
     public function testServiceIsSpam($isAdmin, $bIpWhitelisted, $sUriDnsblEnable, $bUriDnsblBlacklisted, $sAkismetlEnable, $bAkismetBlacklisted, $sBlock, $bRes)
     {
         $this->_oModule->_oConfig->setAntispamOption('antispam_report', ''); // turn off reporting during testing
@@ -76,25 +83,25 @@ class BxAntispamModuleTest extends BxDolTestCase
             $this->_oMockAkismet->expects($this->never())->method('isSpam');
         } else { // if not admin then check for whitelisting
             $this->_oMockIP->expects($this->once())->method('isIpWhitelisted')
-                ->will($this->returnValue($bIpWhitelisted));
+                ->willReturn($bIpWhitelisted);
         }
 
         if ('on' != $sUriDnsblEnable || $isAdmin || $bIpWhitelisted) { // don't check in DNDBL if anything is true
             $this->_oMockDNSURIBlacklists->expects($this->never())->method('isSpam');
         } else { // check in URIDNSBL if URIDNSBL is enabled, not admin and IP is not whitelisted
             $this->_oMockDNSURIBlacklists->expects($this->once())->method('isSpam')
-                ->will($this->returnValue($bUriDnsblBlacklisted));
+                ->willReturn($bUriDnsblBlacklisted);
         }
 
         if ('on' != $sAkismetlEnable || $isAdmin || $bIpWhitelisted || ($bUriDnsblBlacklisted && $sUriDnsblEnable)) { // don't check in Akismet if anything is true
             $this->_oMockAkismet->expects($this->never())->method('isSpam');
         } else { // check in Akismet if Akismet is enabled, not admin, IP is not whitelisted and not previouslu detected in DNSBL
             $this->_oMockAkismet->expects($this->once())->method('isSpam')
-                ->will($this->returnValue($bAkismetBlacklisted));
+                ->willReturn($bAkismetBlacklisted);
         }
 
         // check result boolean value
-        $sContent = $this->anything();
+        $sContent = 'test';
         $this->assertEquals($bRes, $this->_oModule->serviceIsSpam($sContent, $this->_sSampleIP));
     }
 
@@ -112,11 +119,9 @@ class BxAntispamModuleTest extends BxDolTestCase
         );
     }
 
-    /**
-     * @runInSeparateProcess
-     * @preserveGlobalState disabled
-     * @dataProvider providerForServiceCheckJoin
-     */
+    #[RunInSeparateProcess]
+    #[PreserveGlobalState(false)]
+    #[DataProvider('providerForServiceCheckJoin')]
     public function testServiceCheckJoin($bIpBlocked, $sDnsblEnable, $sDnsblBehaviour, $bDnsblIpBlacklisted, $bStopForumSpamSpammer, $bResultSetApprove, $bResultEmptyString)
     {
         // save exception handler
@@ -131,7 +136,7 @@ class BxAntispamModuleTest extends BxDolTestCase
             // first IP address block checking is called
             $this->_oMockIP->expects($this->once())->method('isIpBlocked')
                 ->with($this->equalTo($this->_sSampleIP))
-                ->will($this->returnValue($bIpBlocked));
+                ->willReturn($bIpBlocked);
 
             if ($bIpBlocked) { // if ip is blocked no other methods should be called
 
@@ -155,7 +160,7 @@ class BxAntispamModuleTest extends BxDolTestCase
                     $this->_oMockStopForumSpam->expects($this->never())->method('isSpammer');
                 } else {
                     $this->_oMockStopForumSpam->expects($this->once())->method('isSpammer')
-                        ->will($this->returnValue($bStopForumSpamSpammer));
+                        ->willReturn($bStopForumSpamSpammer);
                 }
             }
 
@@ -183,11 +188,9 @@ class BxAntispamModuleTest extends BxDolTestCase
         );
     }
 
-    /**
-     * @runInSeparateProcess
-     * @preserveGlobalState disabled
-     * @dataProvider providerForServiceCheckLogin
-     */
+    #[RunInSeparateProcess]
+    #[PreserveGlobalState(false)]
+    #[DataProvider('providerForServiceCheckLogin')]
     public function testServiceCheckLogin($bIpBlocked, $sDnsblEnable, $sDnsblBehaviour, $bDnsblIpBlacklisted, $bResultEmptyString)
     {
         // set different options
@@ -196,7 +199,7 @@ class BxAntispamModuleTest extends BxDolTestCase
 
         // first IP address block checking is called
         $this->_oMockIP->expects($this->once())->method('isIpBlocked')
-            ->will($this->returnValue($bIpBlocked));
+            ->willReturn($bIpBlocked);
 
         if ($bIpBlocked || 'on' != $sDnsblEnable) { // if ip is blocked, or DNSBL isn't enabled - DNSBL checking shouldn't be called
 
@@ -227,15 +230,13 @@ class BxAntispamModuleTest extends BxDolTestCase
         );
     }
 
-    /**
-     * @dataProvider providerForServiceIsIpDnsBlacklisted
-     */
+    #[DataProvider('providerForServiceIsIpDnsBlacklisted')]
     public function testServiceIsIpDnsBlacklisted($bDnsblSpammer, $bDnsblWhitelisted, $bRes)
     {
         // check of whitelisting should be called once
         $this->_oMockIP->expects($this->once())->method('isIpWhitelisted')
             ->with($this->equalTo($this->_sSampleIP))
-            ->will($this->returnValue(false));
+            ->willReturn(false);
 /*
         // check in 'spammers' chain
         $this->_oMockDNSBlacklists->expects($this->at(0))->method('dnsbl_lookup_ip')
@@ -260,7 +261,7 @@ class BxAntispamModuleTest extends BxDolTestCase
     public function testServiceIsIpDnsBlacklistedWhenIpIsWhiletisted()
     {
         $this->_oMockIP->expects($this->once())->method('isIpWhitelisted')
-            ->will($this->returnValue(true));
+            ->willReturn(true);
         $this->_oMockDNSBlacklists->expects($this->never())->method('dnsbl_lookup_ip');
 
         $this->assertEquals(false, $this->_oModule->serviceIsIpDnsBlacklisted($this->_sSampleIP));