Skip to content

Commit fd0f30a

Browse files
committed
MAGECLOUD-2736: Magento can't install with custom DB configuration on cloud
1 parent e19470c commit fd0f30a

File tree

2 files changed

+53
-6
lines changed

2 files changed

+53
-6
lines changed

src/Config/Validator/Deploy/AdminEmail.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,24 @@ class AdminEmail implements ValidatorInterface
3030
* @var State
3131
*/
3232
private $state;
33+
/**
34+
* @var DatabaseConfiguration
35+
*/
36+
private $databaseConfiguration;
3337

3438
/**
39+
* @param DatabaseConfiguration $databaseConfiguration
3540
* @param Environment $environment
3641
* @param ResultFactory $resultFactory
3742
* @param State $deploy
3843
*/
3944
public function __construct(
45+
DatabaseConfiguration $databaseConfiguration,
4046
Environment $environment,
4147
ResultFactory $resultFactory,
4248
State $deploy
4349
) {
50+
$this->databaseConfiguration = $databaseConfiguration;
4451
$this->environment = $environment;
4552
$this->resultFactory = $resultFactory;
4653
$this->state = $deploy;
@@ -53,7 +60,10 @@ public function __construct(
5360
*/
5461
public function validate(): Validator\ResultInterface
5562
{
56-
if (!$this->state->isInstalled() && !$this->environment->getAdminEmail()) {
63+
if (!$this->environment->getAdminEmail()
64+
&& $this->databaseConfiguration->validate() instanceof Validator\Result\Success
65+
&& !$this->state->isInstalled()
66+
) {
5767
return $this->resultFactory->create(
5868
Validator\ResultInterface::ERROR,
5969
[

src/Test/Unit/Config/Validator/Deploy/AdminEmailTest.php

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Magento\MagentoCloud\Config\State;
99
use Magento\MagentoCloud\Config\Environment;
1010
use Magento\MagentoCloud\Config\Validator\Deploy\AdminEmail;
11+
use Magento\MagentoCloud\Config\Validator\Deploy\DatabaseConfiguration;
1112
use Magento\MagentoCloud\Config\Validator\Result\Error;
1213
use Magento\MagentoCloud\Config\Validator\Result\Success;
1314
use Magento\MagentoCloud\Config\Validator\ResultInterface;
@@ -35,6 +36,11 @@ class AdminEmailTest extends TestCase
3536
*/
3637
private $resultFactoryMock;
3738

39+
/**
40+
* @var DatabaseConfiguration|Mock
41+
*/
42+
private $databaseConfigurationMock;
43+
3844
/**
3945
* @var State|Mock
4046
*/
@@ -45,11 +51,13 @@ class AdminEmailTest extends TestCase
4551
*/
4652
protected function setUp()
4753
{
54+
$this->databaseConfigurationMock = $this->createMock(DatabaseConfiguration::class);
4855
$this->environmentMock = $this->createMock(Environment::class);
4956
$this->resultFactoryMock = $this->createMock(ResultFactory::class);
5057
$this->stateMock = $this->createMock(State::class);
5158

5259
$this->adminEmailValidator = new AdminEmail(
60+
$this->databaseConfigurationMock,
5361
$this->environmentMock,
5462
$this->resultFactoryMock,
5563
$this->stateMock
@@ -58,9 +66,10 @@ protected function setUp()
5866

5967
public function testValidate()
6068
{
61-
$this->stateMock->expects($this->once())
62-
->method('isInstalled')
63-
->willReturn(false);
69+
$this->stateMock->expects($this->never())
70+
->method('isInstalled');
71+
$this->databaseConfigurationMock->expects($this->never())
72+
->method('validate');
6473
$this->environmentMock->expects($this->once())
6574
->method('getAdminEmail')
6675
->willReturn('admin@example.com');
@@ -76,11 +85,15 @@ public function testValidate()
7685

7786
public function testValidateMagentoInstalled()
7887
{
88+
$this->environmentMock->expects($this->once())
89+
->method('getAdminEmail')
90+
->willReturn('');
7991
$this->stateMock->expects($this->once())
8092
->method('isInstalled')
8193
->willReturn(true);
82-
$this->environmentMock->expects($this->never())
83-
->method('getAdminEmail');
94+
$this->databaseConfigurationMock->expects($this->once())
95+
->method('validate')
96+
->willReturn($this->createMock(Success::class));
8497
$this->resultFactoryMock->expects($this->once())
8598
->method('create')
8699
->with(ResultInterface::SUCCESS)
@@ -91,11 +104,35 @@ public function testValidateMagentoInstalled()
91104
$this->assertInstanceOf(Success::class, $result);
92105
}
93106

107+
public function testValidateWrongDatabaseConnection()
108+
{
109+
$this->environmentMock->expects($this->once())
110+
->method('getAdminEmail')
111+
->willReturn('');
112+
$this->databaseConfigurationMock->expects($this->once())
113+
->method('validate')
114+
->willReturn($this->createMock(Error::class));
115+
$this->stateMock->expects($this->never())
116+
->method('isInstalled');
117+
$this->resultFactoryMock->expects($this->once())
118+
->method('create')
119+
->with(ResultInterface::SUCCESS)
120+
->willReturn($this->createMock(Success::class));
121+
122+
$result = $this->adminEmailValidator->validate();
123+
124+
$this->assertInstanceOf(Success::class, $result);
125+
}
126+
127+
94128
public function testValidateAdminEmailNotExist()
95129
{
96130
$this->stateMock->expects($this->once())
97131
->method('isInstalled')
98132
->willReturn(false);
133+
$this->databaseConfigurationMock->expects($this->once())
134+
->method('validate')
135+
->willReturn($this->createMock(Success::class));
99136
$this->environmentMock->expects($this->once())
100137
->method('getAdminEmail')
101138
->willReturn('');

0 commit comments

Comments
 (0)