Added unit tests for cache of enabled apps

This commit is contained in:
Vincent Petry 2014-09-03 11:01:59 +02:00
parent 9d5f18c02f
commit 4a93a6e060
1 changed files with 74 additions and 10 deletions

View File

@ -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