Covered the stats aggregation with the tests.
parent
dcfccc04e9
commit
c1db6b2c3b
|
@ -7,20 +7,20 @@ use Laminas\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;
|
|||
|
||||
abstract class AbstractIntegrationTestCase extends AbstractHttpControllerTestCase
|
||||
{
|
||||
/** @var string */
|
||||
protected $testPath;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->setApplicationConfig(require dirname(__DIR__) . '/../config/application.config.php');
|
||||
$this->testPath = getenv('TESTS_DIR');
|
||||
|
||||
$this->setApplicationConfig(require dirname($this->testPath) . '/config/application.config.php');
|
||||
|
||||
parent::setUp();
|
||||
|
||||
$this->configureServiceManager($this->getApplicationServiceLocator());
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
// TODO: clear the db data.
|
||||
}
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
// Creates the DB with initial data, executes all the migrations.
|
||||
|
@ -29,7 +29,12 @@ abstract class AbstractIntegrationTestCase extends AbstractHttpControllerTestCas
|
|||
|
||||
public static function tearDownAfterClass(): void
|
||||
{
|
||||
// TODO: drop the database or clear the phinxlog table and all the data.
|
||||
shell_exec(getenv('TESTS_DIR') . '/scripts/clean_client_database.sh');
|
||||
}
|
||||
|
||||
protected static function createMyPrintTestData(): void
|
||||
{
|
||||
shell_exec(getenv('TESTS_DIR') . '/scripts/insert_my_print_anrs.sh');
|
||||
}
|
||||
|
||||
protected function configureServiceManager(ServiceManager $serviceManager)
|
||||
|
|
|
@ -5,8 +5,7 @@ namespace MonarcAppFo\Tests\Integration\Service;
|
|||
use GuzzleHttp\Handler\MockHandler;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use Laminas\ServiceManager\ServiceManager;
|
||||
use Monarc\Core\Service\AuthenticationService;
|
||||
use Monarc\Core\Service\ConnectedUserService;
|
||||
use Monarc\FrontOffice\Model\Table\AnrTable;
|
||||
use Monarc\FrontOffice\Model\Table\SettingTable;
|
||||
use Monarc\FrontOffice\Provider\StatsApiProvider;
|
||||
use Monarc\FrontOffice\Service\Exception\StatsAlreadyCollectedException;
|
||||
|
@ -18,6 +17,13 @@ class StatsApiServiceTest extends AbstractIntegrationTestCase
|
|||
/** @var MockHandler */
|
||||
private $mockHandler;
|
||||
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
static::createMyPrintTestData();
|
||||
}
|
||||
|
||||
protected function configureServiceManager(ServiceManager $serviceManager)
|
||||
{
|
||||
$serviceManager->setAllowOverride(true);
|
||||
|
@ -51,20 +57,60 @@ class StatsApiServiceTest extends AbstractIntegrationTestCase
|
|||
|
||||
/** @var StatsAnrService $statsAnrService */
|
||||
$statsAnrService = $this->getApplicationServiceLocator()->get(StatsAnrService::class);
|
||||
$statsAnrService->collectStats();
|
||||
$statsAnrService->collectStats([99, 78]);
|
||||
|
||||
$this->assertEquals('GET', $this->mockHandler->getLastRequest()->getMethod());
|
||||
}
|
||||
|
||||
public function testItCanGenerateTheStatsWhenItIsNotDoneForToday()
|
||||
public function testItCanGenerateTheStatsForAllTheAnrs()
|
||||
{
|
||||
/** @var AnrTable $anrTable */
|
||||
$anrTable = $this->getApplicationServiceLocator()->get(AnrTable::class);
|
||||
$anrs = $anrTable->findAll();
|
||||
$anrUuid = [];
|
||||
foreach ($anrs as $anr) {
|
||||
$anrUuid[] = $anr->getUuid();
|
||||
}
|
||||
|
||||
$this->mockHandler->append(new Response(200, [], $this->getStatsResponse()));
|
||||
$this->mockHandler->append(new Response(200, [], '{"status": "ok"}'));
|
||||
|
||||
// TODO: import MyPrint to test if the exact Json is generated and compare with the last request history.
|
||||
/** @var StatsAnrService $statsAnrService */
|
||||
$statsAnrService = $this->getApplicationServiceLocator()->get(StatsAnrService::class);
|
||||
$statsAnrService->collectStats();
|
||||
|
||||
$this->assertJsonStringEqualsJsonString(
|
||||
$this->getExpectedStatsDataJson($anrUuid),
|
||||
$this->mockHandler->getLastRequest()->getBody()->getContents()
|
||||
);
|
||||
}
|
||||
|
||||
public function testItGenerateTheStatsOnlyForPassedAnrs()
|
||||
{
|
||||
$anrIdsToGenerateTheStats = [1, 2, 3];
|
||||
|
||||
/** @var AnrTable $anrTable */
|
||||
$anrTable = $this->getApplicationServiceLocator()->get(AnrTable::class);
|
||||
$anrs = $anrTable->findAll();
|
||||
$anrUuid = [];
|
||||
foreach ($anrs as $num => $anr) {
|
||||
if ($num + 1 > \count($anrIdsToGenerateTheStats)) {
|
||||
break;
|
||||
}
|
||||
$anrUuid[] = $anr->getUuid();
|
||||
}
|
||||
|
||||
$this->mockHandler->append(new Response(200, [], $this->getStatsResponse()));
|
||||
$this->mockHandler->append(new Response(200, [], '{"status": "ok"}'));
|
||||
|
||||
/** @var StatsAnrService $statsAnrService */
|
||||
$statsAnrService = $this->getApplicationServiceLocator()->get(StatsAnrService::class);
|
||||
$statsAnrService->collectStats($anrIdsToGenerateTheStats);
|
||||
|
||||
$this->assertJsonStringEqualsJsonString(
|
||||
$this->getExpectedStatsDataJson($anrUuid),
|
||||
$this->mockHandler->getLastRequest()->getBody()->getContents()
|
||||
);
|
||||
}
|
||||
|
||||
private function getStatsResponse(array $results = []): string
|
||||
|
@ -80,4 +126,23 @@ class StatsApiServiceTest extends AbstractIntegrationTestCase
|
|||
'results' => $results,
|
||||
]);
|
||||
}
|
||||
|
||||
private function getExpectedStatsDataJson(array $anrUuid): string
|
||||
{
|
||||
$allStatsData = json_decode(
|
||||
file_get_contents($this->testPath . '/data/expected_stats_data_for_all_anrs.json'),
|
||||
true
|
||||
);
|
||||
|
||||
$expectedStats = [];
|
||||
foreach ($allStatsData as $num => $statsData) {
|
||||
if (!isset($anrUuid[$num])) {
|
||||
break;
|
||||
}
|
||||
$statsData['anr_uuid'] = $anrUuid[$num];
|
||||
$expectedStats[] = $statsData;
|
||||
}
|
||||
|
||||
return json_encode($expectedStats);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
TRUNCATE TABLE `anrs`;
|
||||
TRUNCATE TABLE `amvs`;
|
||||
TRUNCATE TABLE `anrs_objects`;
|
||||
TRUNCATE TABLE `anrs_objects_categories`;
|
||||
TRUNCATE TABLE `assets`;
|
||||
TRUNCATE TABLE `deliveries`;
|
||||
TRUNCATE TABLE `instances`;
|
||||
TRUNCATE TABLE `instances_consequences`;
|
||||
TRUNCATE TABLE `instances_risks`;
|
||||
TRUNCATE TABLE `instances_risks_op`;
|
||||
TRUNCATE TABLE `interviews`;
|
||||
TRUNCATE TABLE `measures`;
|
||||
TRUNCATE TABLE `measures_amvs`;
|
||||
TRUNCATE TABLE `measures_measures`;
|
||||
TRUNCATE TABLE `measures_rolf_risks`;
|
||||
TRUNCATE TABLE `objects`;
|
||||
TRUNCATE TABLE `objects_categories`;
|
||||
TRUNCATE TABLE `objects_objects`;
|
||||
TRUNCATE TABLE `questions`;
|
||||
TRUNCATE TABLE `questions_choices`;
|
||||
TRUNCATE TABLE `recommandations`;
|
||||
TRUNCATE TABLE `recommandations_risks`;
|
||||
TRUNCATE TABLE `recommandations_sets`;
|
||||
TRUNCATE TABLE `referentials`;
|
||||
TRUNCATE TABLE `rolf_risks_tags`;
|
||||
TRUNCATE TABLE `rolf_risks`;
|
||||
TRUNCATE TABLE `rolf_tags`;
|
||||
TRUNCATE TABLE `scales`;
|
||||
TRUNCATE TABLE `scales_comments`;
|
||||
TRUNCATE TABLE `scales_impact_types`;
|
||||
TRUNCATE TABLE `soa`;
|
||||
TRUNCATE TABLE `soacategory`;
|
||||
TRUNCATE TABLE `themes`;
|
||||
TRUNCATE TABLE `threats`;
|
||||
TRUNCATE TABLE `vulnerabilities`;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
DBHOST="127.0.0.1"
|
||||
DBUSER_MONARC="sqlmonarcuser"
|
||||
DBPASSWORD_MONARC="sqlmonarcuser"
|
||||
# Comment/Uncomment and modify the following line to run tests from your host machine:
|
||||
CONNECTION_OPTIONS="--ssl-key=~/web/monarc/MonarcAppFO/vagrant/.vagrant/machines/default/virtualbox/private_key"
|
||||
|
||||
mysql -h $DBHOST -u $DBUSER_MONARC -p$DBPASSWORD_MONARC $CONNECTION_OPTIONS monarc_cli_test < tests/data/clean_client_database.sql > /dev/null
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
DBHOST="127.0.0.1"
|
||||
DBUSER_MONARC="sqlmonarcuser"
|
||||
DBPASSWORD_MONARC="sqlmonarcuser"
|
||||
# Comment/Uncomment and modify the following line to run tests from your host machine:
|
||||
CONNECTION_OPTIONS="--ssl-key=~/web/monarc/MonarcAppFO/vagrant/.vagrant/machines/default/virtualbox/private_key"
|
||||
|
||||
mysql -h $DBHOST -u $DBUSER_MONARC -p$DBPASSWORD_MONARC $CONNECTION_OPTIONS monarc_cli_test < tests/data/insert_my_print_anrs.sql > /dev/null
|
Loading…
Reference in New Issue