e107inc / e107

e107 Bootstrap CMS (Content Management System) v2 with PHP, MySQL, HTML5, jQuery and Twitter Bootstrap. Issue Discussion Room: https://gitter.im/e107inc/e107
https://e107.org
GNU General Public License v3.0
321 stars 213 forks source link

pluginsTest::testPlugInstalledStatus fails if the tested plugin is not the last one #3531

Closed Deltik closed 5 years ago

Deltik commented 5 years ago

When e_plugin::buildAddonPrefsList() executes, it wipes out what is considered the currently loaded plugin (e_plugin::$_plugdir) and replaces it with the last plugin found by e_plugin::getDetected().

Execution

$ ~/PhpstormProjects/e107-test/vendor/bin/codecept run unit pluginsTest::testPlugInstalledStatus
Codeception PHP Testing Framework v2.5.1
Powered by PHPUnit 7.3.5 by Sebastian Bergmann and contributors.
Running with seed: 

Unit Tests (1) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
✖ pluginsTest: Testplug installed status (0.10s)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Time: 1.35 seconds, Memory: 22.00MB

There was 1 failure:

---------
1) pluginsTest: Testplug installed status
 Test  tests/unit/pluginsTest.php:testplugInstalledStatus
e_plugin:isInstalled() = 1 but plugin_installflag = 0 after uninstall.
Failed asserting that 0 matches expected 1.
#1  /home/deltik/PhpstormProjects/e107-test/tests/unit/pluginsTest.php:265

FAILURES!
Tests: 1, Assertions: 5, Failures: 1.

Test code

        public function testplugInstalledStatus()
        {
            $sql = e107::getDb();

            $plg = e107::getPlug()->clearCache();
            $plg->load('tagcloud');

            // check it's NOT installed.
            $status = $plg->isInstalled();
            $dbStatus = (bool) $sql->retrieve('plugin', "plugin_installflag", "plugin_path='tagcloud'");
            $this->assertEquals($status,$dbStatus,"e_plugin:isInstalled() doesn't match plugin_installflag in db table.");
            $this->assertFalse($status, "Status for tagcloud being installed should be false");

            e107::getPlugin()->install('tagcloud');

            // check it's installed.
            $status = (int) $plg->isInstalled();
            $actual = (bool) $status;
            $dbStatus = (int) $sql->retrieve('plugin', "plugin_installflag", "plugin_path='tagcloud'");
            $this->assertEquals($status,$dbStatus,"e_plugin:isInstalled() = ".$status." but plugin_installflag = ".$dbStatus." after install.");
            $this->assertTrue($actual, "Status for tagcloud being installed should be true after being installed.");

            e107::getPlugin()->uninstall('tagcloud');

            // check it's NOT installed.
            $status = (int) $plg->isInstalled();
            $actual = (bool) $status;
            $dbStatus = (int) $sql->retrieve('plugin', "plugin_installflag", "plugin_path='tagcloud'");
            $this->assertEquals($status,$dbStatus,"e_plugin:isInstalled() = ".$status." but plugin_installflag = ".$dbStatus." after uninstall.");
            $this->assertFalse($actual, "Status for tagcloud being installed should be false after being uninstalled.");

        }
Deltik commented 5 years ago

e107inc/e107-test#9 is a duplicate of this.