Fix App\Mode determination
This commit is contained in:
parent
7aa9917ca8
commit
05102911db
2 changed files with 34 additions and 8 deletions
|
@ -13,9 +13,9 @@ use Friendica\Util\BasePath;
|
|||
*/
|
||||
class Mode
|
||||
{
|
||||
const LOCALCONFIGPRESENT = 1;
|
||||
const DBAVAILABLE = 2;
|
||||
const DBCONFIGAVAILABLE = 4;
|
||||
const LOCALCONFIGPRESENT = 1;
|
||||
const DBAVAILABLE = 2;
|
||||
const DBCONFIGAVAILABLE = 4;
|
||||
const MAINTENANCEDISABLED = 8;
|
||||
|
||||
/***
|
||||
|
@ -58,7 +58,7 @@ class Mode
|
|||
*
|
||||
* @return Mode returns itself
|
||||
*
|
||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function determine($basePath = null)
|
||||
{
|
||||
|
@ -88,8 +88,10 @@ class Mode
|
|||
|
||||
$this->mode |= Mode::DBCONFIGAVAILABLE;
|
||||
|
||||
if ($this->configCache->get('system', 'maintenance') ||
|
||||
$this->database->selectFirst('config', ['v'], ['cat' => 'system', 'k' => 'maintenance'])) {
|
||||
if (!empty($this->configCache->get('system', 'maintenance')) ||
|
||||
// Don't use Config or Configuration here because we're possibly BEFORE initializing the Configuration,
|
||||
// so this could lead to a dependency circle
|
||||
!empty($this->database->selectFirst('config', ['v'], ['cat' => 'system', 'k' => 'maintenance'])['v'])) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
|
|
@ -125,7 +125,31 @@ class ModeTest extends MockedTest
|
|||
->andReturn(false)->once();
|
||||
$this->databaseMock->shouldReceive('selectFirst')
|
||||
->with('config', ['v'], ['cat' => 'system', 'k' => 'maintenance'])
|
||||
->andReturn(false)->once();
|
||||
->andReturn(['v' => null])->once();
|
||||
|
||||
$mode = new Mode($this->basePathMock, $this->databaseMock, $this->configCacheMock);
|
||||
$mode->determine();
|
||||
|
||||
$this->assertTrue($mode->isNormal());
|
||||
$this->assertFalse($mode->isInstall());
|
||||
|
||||
$this->assertTrue($mode->has(Mode::DBCONFIGAVAILABLE));
|
||||
$this->assertTrue($mode->has(Mode::MAINTENANCEDISABLED));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test explicit disabled maintenance (in case you manually disable it)
|
||||
*/
|
||||
public function testDisabledMaintenance()
|
||||
{
|
||||
$this->databaseMock->shouldReceive('connected')->andReturn(true)->once();
|
||||
$this->databaseMock->shouldReceive('fetchFirst')
|
||||
->with('SHOW TABLES LIKE \'config\'')->andReturn(true)->once();
|
||||
$this->configCacheMock->shouldReceive('get')->with('system', 'maintenance')
|
||||
->andReturn(false)->once();
|
||||
$this->databaseMock->shouldReceive('selectFirst')
|
||||
->with('config', ['v'], ['cat' => 'system', 'k' => 'maintenance'])
|
||||
->andReturn(['v' => '0'])->once();
|
||||
|
||||
$mode = new Mode($this->basePathMock, $this->databaseMock, $this->configCacheMock);
|
||||
$mode->determine();
|
||||
|
|
Loading…
Reference in a new issue