Use doctrine in integration tests

[MAILPOET-2219]
This commit is contained in:
Pavel Dohnal
2019-08-21 11:06:18 +02:00
committed by M. Shull
parent 01fb9c7083
commit ff9bc0b3b9
3 changed files with 34 additions and 24 deletions

View File

@ -124,7 +124,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class); $container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class);
// Features // Features
$container->autowire(\MailPoet\Features\FeaturesController::class); $container->autowire(\MailPoet\Features\FeaturesController::class);
$container->autowire(\MailPoet\Features\FeatureFlagsController::class); $container->autowire(\MailPoet\Features\FeatureFlagsController::class)->setPublic(true);
$container->autowire(\MailPoet\Features\FeatureFlagsRepository::class); $container->autowire(\MailPoet\Features\FeatureFlagsRepository::class);
// Form // Form
$container->autowire(\MailPoet\Form\Util\FieldNameObfuscator::class)->setPublic(true); $container->autowire(\MailPoet\Form\Util\FieldNameObfuscator::class)->setPublic(true);

View File

@ -22,14 +22,14 @@ class FeatureFlagEntity {
private $name; private $name;
/** /**
* @Column(type="smallint", options={"unsigned":true}, nullable=true) * @Column(type="boolean", nullable=true)
* @var integer|null * @var bool|null
*/ */
private $value; private $value;
/** /**
* @param string $name * @param string $name
* @param integer|null $value * @param bool|null $value
*/ */
public function __construct($name, $value = null) { public function __construct($name, $value = null) {
$this->name = $name; $this->name = $name;
@ -46,12 +46,12 @@ class FeatureFlagEntity {
$this->name = $name; $this->name = $name;
} }
/** @return integer|null */ /** @return bool|null */
public function getValue() { public function getValue() {
return $this->value; return $this->value;
} }
/** @param integer|null $value */ /** @param bool|null $value */
public function setValue($value) { public function setValue($value) {
$this->value = $value; $this->value = $value;
} }

View File

@ -1,18 +1,26 @@
<?php <?php
namespace MailPoet\Test\API\JSON\v1; namespace MailPoet\Test\API\JSON\v1;
use Codeception\Stub;
use MailPoet\API\JSON\Error as APIError; use MailPoet\API\JSON\Error as APIError;
use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\API\JSON\v1\FeatureFlags; use MailPoet\API\JSON\v1\FeatureFlags;
use MailPoet\Entities\FeatureFlagEntity;
use MailPoet\Features\FeatureFlagsController; use MailPoet\Features\FeatureFlagsController;
use MailPoet\Features\FeatureFlagsRepository;
use MailPoet\Features\FeaturesController; use MailPoet\Features\FeaturesController;
use MailPoet\Models\FeatureFlag; use MailPoet\Models\FeatureFlag;
class FeatureFlagsTest extends \MailPoetTest { class FeatureFlagsTest extends \MailPoetTest {
/** @var FeatureFlagsRepository */
private $repository;
function _before() { function _before() {
parent::_before(); parent::_before();
FeatureFlag::deleteMany(); $this->repository = $this->di_container->get(FeatureFlagsRepository::class);
$table_name = $this->entity_manager->getClassMetadata(FeatureFlagEntity::class)->getTableName();
$this->entity_manager->getConnection()->executeUpdate("TRUNCATE $table_name");
} }
function testItReturnsDefaults() { function testItReturnsDefaults() {
@ -36,7 +44,7 @@ class FeatureFlagsTest extends \MailPoetTest {
} }
function testItReturnsDatabaseValue() { function testItReturnsDatabaseValue() {
FeatureFlag::createOrUpdate([ $this->repository->createOrUpdate([
'name' => 'feature-a', 'name' => 'feature-a',
'value' => false, 'value' => false,
]); ]);
@ -63,15 +71,16 @@ class FeatureFlagsTest extends \MailPoetTest {
'feature-a' => false, 'feature-a' => false,
]); ]);
$features = FeatureFlag::where('name', 'feature-a')->findMany(); $this->entity_manager->clear();
expect(count($features))->equals(1); $features = $this->repository->findBy(['name' => 'feature-a']);
expect($features[0]->name)->equals('feature-a'); expect($features)->count(1);
expect($features[0]->value)->equals('0'); expect($features[0]->getName())->equals('feature-a');
expect($features[0]->getValue())->equals(false);
} }
function testItUpdatesDatabaseValue() { function testItUpdatesDatabaseValue() {
FeatureFlag::createOrUpdate([ $this->repository->createOrUpdate([
'name' => 'feature-a', 'name' => 'feature-a',
'value' => false, 'value' => false,
]); ]);
@ -84,14 +93,15 @@ class FeatureFlagsTest extends \MailPoetTest {
'feature-a' => true, 'feature-a' => true,
]); ]);
$features = FeatureFlag::where('name', 'feature-a')->findMany(); $this->entity_manager->clear();
$features = $this->repository->findBy(['name' => 'feature-a']);
expect(count($features))->equals(1); expect(count($features))->equals(1);
expect($features[0]->name)->equals('feature-a'); expect($features[0]->getName())->equals('feature-a');
expect($features[0]->value)->equals('1'); expect($features[0]->getValue())->equals(true);
} }
function testItDoesNotReturnUnknownFlag() { function testItDoesNotReturnUnknownFlag() {
FeatureFlag::createOrUpdate([ $this->repository->createOrUpdate([
'name' => 'feature-unknown', 'name' => 'feature-unknown',
'value' => true, 'value' => true,
]); ]);
@ -109,20 +119,20 @@ class FeatureFlagsTest extends \MailPoetTest {
expect($response->errors[0]['error'])->equals(APIError::BAD_REQUEST); expect($response->errors[0]['error'])->equals(APIError::BAD_REQUEST);
expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST); expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
$features = FeatureFlag::findMany(); $features = $this->repository->findAll();
expect(count($features))->equals(0); expect(count($features))->equals(0);
} }
/** @return FeatureFlags */
private function createEndpointWithFeatureDefaults(array $defaults) { private function createEndpointWithFeatureDefaults(array $defaults) {
$features_controller = $this->make(FeaturesController::class, [ $features_controller = $this->make(FeaturesController::class, [
'defaults' => $defaults, 'defaults' => $defaults,
]); ]);
$controller = new FeatureFlagsController($features_controller); $feature_flags = Stub::make(FeatureFlagsController::class, [
return new FeatureFlags($features_controller, $controller); 'features_controller' => $features_controller,
'feature_flags_repository' => $this->di_container->get(FeatureFlagsRepository::class),
]);
return new FeatureFlags($features_controller, $feature_flags);
} }
function _after() {
parent::_before();
FeatureFlag::deleteMany();
}
} }