diff --git a/tests/lib/app.php b/tests/lib/app.php index 9873d42baf..e538ebec8a 100644 --- a/tests/lib/app.php +++ b/tests/lib/app.php @@ -337,15 +337,7 @@ class Test_App extends PHPUnit_Framework_TestCase { \OC_User::setUserId($user); - $appConfig = $this->getMock( - '\OC\AppConfig', - array('getValues'), - array(\OC_DB::getConnection()), - '', - false - ); - - $appConfig->expects($this->once()) + $this->setupAppConfigMock()->expects($this->once()) ->method('getValues') ->will($this->returnValue( array( @@ -358,7 +350,6 @@ class Test_App extends PHPUnit_Framework_TestCase { ) ) ); - $this->registerAppConfig($appConfig); $apps = \OC_App::getEnabledApps(true, $forceAll); $this->assertEquals($expectedApps, $apps); @@ -377,6 +368,79 @@ class Test_App extends PHPUnit_Framework_TestCase { $group2->delete(); } + /** + * Test isEnabledApps() with cache, not re-reading the list of + * enabled apps more than once when a user is set. + */ + public function testEnabledAppsCache() { + $userManager = \OC::$server->getUserManager(); + $user1 = $userManager->createUser(self::TEST_USER1, self::TEST_USER1); + + \OC_User::setUserId(self::TEST_USER1); + + $this->setupAppConfigMock()->expects($this->once()) + ->method('getValues') + ->will($this->returnValue( + array( + 'app3' => 'yes', + 'app2' => 'no', + ) + ) + ); + + $apps = \OC_App::getEnabledApps(true); + $this->assertEquals(array('files', 'app3'), $apps); + + // mock should not be called again here + $apps = \OC_App::getEnabledApps(false); + $this->assertEquals(array('files', 'app3'), $apps); + + $this->restoreAppConfig(); + \OC_User::setUserId(null); + + $user1->delete(); + // clear user cache... + $userManager->delete(self::TEST_USER1); + } + + /** + * Tests that the apps list is re-requested (not cached) when + * no user is set. + */ + public function testEnabledAppsNoCache() { + $this->setupAppConfigMock()->expects($this->exactly(2)) + ->method('getValues') + ->will($this->returnValue( + array( + 'app3' => 'yes', + 'app2' => 'no', + ) + ) + ); + + $apps = \OC_App::getEnabledApps(true); + $this->assertEquals(array('files', 'app3'), $apps); + + // mock should be called again here + $apps = \OC_App::getEnabledApps(false); + $this->assertEquals(array('files', 'app3'), $apps); + + $this->restoreAppConfig(); + } + + private function setupAppConfigMock() { + $appConfig = $this->getMock( + '\OC\AppConfig', + array('getValues'), + array(\OC_DB::getConnection()), + '', + false + ); + + $this->registerAppConfig($appConfig); + return $appConfig; + } + /** * Register an app config mock for testing purposes. * @param $appConfig app config mock