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
|
class Mode
|
||||||
{
|
{
|
||||||
const LOCALCONFIGPRESENT = 1;
|
const LOCALCONFIGPRESENT = 1;
|
||||||
const DBAVAILABLE = 2;
|
const DBAVAILABLE = 2;
|
||||||
const DBCONFIGAVAILABLE = 4;
|
const DBCONFIGAVAILABLE = 4;
|
||||||
const MAINTENANCEDISABLED = 8;
|
const MAINTENANCEDISABLED = 8;
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
@ -58,7 +58,7 @@ class Mode
|
||||||
*
|
*
|
||||||
* @return Mode returns itself
|
* @return Mode returns itself
|
||||||
*
|
*
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function determine($basePath = null)
|
public function determine($basePath = null)
|
||||||
{
|
{
|
||||||
|
@ -88,8 +88,10 @@ class Mode
|
||||||
|
|
||||||
$this->mode |= Mode::DBCONFIGAVAILABLE;
|
$this->mode |= Mode::DBCONFIGAVAILABLE;
|
||||||
|
|
||||||
if ($this->configCache->get('system', 'maintenance') ||
|
if (!empty($this->configCache->get('system', 'maintenance')) ||
|
||||||
$this->database->selectFirst('config', ['v'], ['cat' => 'system', 'k' => '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;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,4 +136,4 @@ class Mode
|
||||||
$this->has(Mode::DBCONFIGAVAILABLE) &&
|
$this->has(Mode::DBCONFIGAVAILABLE) &&
|
||||||
$this->has(Mode::MAINTENANCEDISABLED);
|
$this->has(Mode::MAINTENANCEDISABLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,7 +125,31 @@ class ModeTest extends MockedTest
|
||||||
->andReturn(false)->once();
|
->andReturn(false)->once();
|
||||||
$this->databaseMock->shouldReceive('selectFirst')
|
$this->databaseMock->shouldReceive('selectFirst')
|
||||||
->with('config', ['v'], ['cat' => 'system', 'k' => 'maintenance'])
|
->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 = new Mode($this->basePathMock, $this->databaseMock, $this->configCacheMock);
|
||||||
$mode->determine();
|
$mode->determine();
|
||||||
|
|
Loading…
Reference in a new issue