diff --git a/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php b/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php
index f7059412d5..dfdd3d98c3 100644
--- a/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php
+++ b/datamodels/2.x/combodo-data-feature-removal/src/Controller/DataFeatureRemovalController.php
@@ -22,6 +22,7 @@ use Dict;
use Exception;
use IssueLog;
use MetaModel;
+use SetupUtils;
use utils;
class DataFeatureRemovalController extends Controller
@@ -97,6 +98,50 @@ class DataFeatureRemovalController extends Controller
$this->aCountClassesToCleanup = $aGetRemovedClasses;
}
+ public function OperationAnalysisResult(): void
+ {
+ $aParams = [];
+
+ if (SetupUtils::IsSessionSetupTokenValid()) {
+ //from setup wizard/mtp
+ SetupUtils::EraseSetupToken();
+ } else {
+ //from same module
+ $this->ValidateTransactionId();
+ }
+
+ $sSourceEnv = MetaModel::GetEnvironment();
+ $oSetupAudit = new SetupAudit($sSourceEnv);
+ $aGetRemovedClasses = array_keys($oSetupAudit->RunDataAudit());
+ IssueLog::Debug(__METHOD__, null, ['aGetRemovedClasses' => $aGetRemovedClasses]);
+
+ $oDataCleanupService = new DataCleanupService();
+ $aDeletionPlanSummaryEntities = $oDataCleanupService->GetCleanupSummary($aGetRemovedClasses);
+ $aColumns = ['Class', 'DeleteCount' , 'UpdateCount', 'IssueCount'];
+ $aRows = [];
+ $iQueryCount = 0;
+ $bHasIssues = false;
+ foreach ($aDeletionPlanSummaryEntities as $oDeletionPlanSummaryEntity) {
+ $aRows[] = [
+ $oDeletionPlanSummaryEntity->sClass,
+ $oDeletionPlanSummaryEntity->iDeleteCount,
+ $oDeletionPlanSummaryEntity->iUpdateCount,
+ $oDeletionPlanSummaryEntity->iIssueCount,
+ ];
+ $bHasIssues |= ($oDeletionPlanSummaryEntity->iIssueCount !== 0);
+ $iQueryCount += $oDeletionPlanSummaryEntity->iDeleteCount;
+ $iQueryCount += $oDeletionPlanSummaryEntity->iUpdateCount;
+ }
+
+ $aParams['sTransactionId'] = utils::GetNewTransactionId();
+ $aParams['aDeletionPlanSummary'] = $this->GetTableData('Extensions', $aColumns, $aRows);
+ $aParams['aClasses'] = $aGetRemovedClasses;
+ $aParams['iQueryCount'] = $iQueryCount;
+ $aParams['bDeletionPossible'] = !$bHasIssues;
+
+ $this->DisplayPage($aParams);
+ }
+
public function OperationDeletionPlan(): void
{
$aParams = [];
diff --git a/datamodels/2.x/combodo-data-feature-removal/templates/AnalysisResult.html.twig b/datamodels/2.x/combodo-data-feature-removal/templates/AnalysisResult.html.twig
new file mode 100644
index 0000000000..c37bff85a6
--- /dev/null
+++ b/datamodels/2.x/combodo-data-feature-removal/templates/AnalysisResult.html.twig
@@ -0,0 +1,29 @@
+{# @copyright Copyright (C) 2010-2026 Combodo SARL #}
+{# @license http://opensource.org/licenses/AGPL-3.0 #}
+
+{% UIPanel ForInformation { sTitle:'DataFeatureRemoval:DeletionPlan:Title'|dict_s, sSubTitle: 'DataFeatureRemoval:DeletionPlan:SubTitle'|dict_format(iQueryCount) } %}
+ {% UIDataTable ForForm { sRef:'aDeletionPlanSummary', aColumns:aDeletionPlanSummary.Columns, aData:aDeletionPlanSummary.Data} %}{% EndUIDataTable %}
+{% EndUIPanel %}
+
+{% if bDeletionPossible %}
+ {% UIForm Standard {} %}
+ {% UIInput ForHidden { sName:'transaction_id', sValue:sTransactionId} %}
+ {% UIInput ForHidden { sName:'operation', sValue:'DoDeletion'} %}
+ {% for sKey, sClass in aClasses %}
+ {% UIInput ForHidden { sName:"classes[" ~ sKey ~ "]", sValue:sClass } %}
+ {% endfor %}
+ {% UIToolbar ForButton {} %}
+ {% UIButton ForPrimaryAction {sLabel:'UI:Button:DoDeletion'|dict_s, sName:'btn_deletion', sId:'btn_deletion', bIsSubmit:true} %}
+ {% EndUIToolbar %}
+ {% EndUIForm %}
+{% else %}
+ {{ 'DataFeatureRemoval:DeletionPlan:Error:Issues'|dict_s }}
+{% endif %}
+
+{% UIForm Standard {} %}
+ {% UIInput ForHidden { sName:'transaction_id', sValue:sTransactionId} %}
+ {% UIInput ForHidden { sName:'operation', sValue:'Main'} %}
+ {% UIToolbar ForButton {} %}
+ {% UIButton ForPrimaryAction {sLabel:'UI:Button:BackToMain'|dict_s, sName:'btn_back', sId:'btn_back', bIsSubmit:true} %}
+ {% EndUIToolbar %}
+{% EndUIForm %}
\ No newline at end of file
diff --git a/setup/feature_removal/ModelReflectionSerializer.php b/setup/feature_removal/ModelReflectionSerializer.php
index 8b04427b7d..53ed1d5dfa 100644
--- a/setup/feature_removal/ModelReflectionSerializer.php
+++ b/setup/feature_removal/ModelReflectionSerializer.php
@@ -36,19 +36,6 @@ class ModelReflectionSerializer
{
IssueLog::Info(__METHOD__, null, ['env' => $sEnv]);
- $sCurrentEnvt = MetaModel::GetEnvironment();
- if ($sCurrentEnvt === $sEnv) {
- $aClasses = MetaModel::GetClasses();
- if (count($aClasses) === 0) {
- //MetaModel not started yet
- $sConfFile = utils::GetConfigFilePath($sEnv);
-
- MetaModel::Startup($sConfFile, false /* $bModelOnly */, false /* $bAllowCache */, false /* $bTraceSourceFiles */, $sEnv);
- $aClasses = MetaModel::GetClasses();
- }
- return $aClasses;
- }
-
$sPHPExec = trim(utils::GetConfig()->Get('php_path'));
$sOutput = "";
$iRes = 0;
diff --git a/setup/modulediscovery/ModuleFileReader.php b/setup/modulediscovery/ModuleFileReader.php
index 9fbcd634c3..b87df88954 100644
--- a/setup/modulediscovery/ModuleFileReader.php
+++ b/setup/modulediscovery/ModuleFileReader.php
@@ -16,6 +16,7 @@ use PhpParser\Node\Stmt\ElseIf_;
use PhpParser\Node\Stmt\Expression;
use PhpParser\Node\Stmt\If_;
use PhpParser\ParserFactory;
+use SetupLog;
require_once __DIR__.'/ModuleFileReaderException.php';
require_once APPROOT.'sources/PhpParser/Evaluation/PhpExpressionEvaluator.php';
@@ -143,6 +144,7 @@ class ModuleFileReader
}
// Replace the main function call by an assignment to a variable, as an array...
$sModuleFileContents = str_replace(['SetupWebPage::AddModule', 'ModuleDiscovery::AddModule'], '$aModuleInfo = array', $sModuleFileContents);
+ SetupLog::Debug(__METHOD__, null, ['module_file' => $sModuleFilePath]);
eval($sModuleFileContents); // Assigns $aModuleInfo
if (count($aModuleInfo) === 0) {
diff --git a/setup/runtimeenv.class.inc.php b/setup/runtimeenv.class.inc.php
index 74d9667d9d..f6a80b69b7 100644
--- a/setup/runtimeenv.class.inc.php
+++ b/setup/runtimeenv.class.inc.php
@@ -1126,7 +1126,9 @@ class RunTimeEnvironment
}
if (is_null($aSelectedModules) || in_array($sModuleId, $aSelectedModules)) {
- $aArgs = [MetaModel::GetConfig(), $aModule['installed_version'], $aModule['available_version']];
+ $oConfig = MetaModel::GetConfig();
+ $oConfig->Set('access_mode', ACCESS_FULL);
+ $aArgs = [$oConfig, $aModule['installed_version'], $aModule['available_version']];
RunTimeEnvironment::CallInstallerHandler($aModule, $sHandlerName, $aArgs);
}
}
@@ -1193,6 +1195,9 @@ class RunTimeEnvironment
*/
public function LoadData($aAvailableModules, $bSampleData, $aSelectedModules = null)
{
+ $oConfig = MetaModel::GetConfig();
+ $oConfig->Set('access_mode', ACCESS_FULL);
+
$oDataLoader = new XMLDataLoader();
CMDBObject::SetCurrentChangeFromParams("Initialization from XML files for the selected modules ");
@@ -1537,6 +1542,15 @@ class RunTimeEnvironment
$oBackup->CreateCompressedBackup($sTargetFile, $sSourceConfigFile);
}
+ /**
+ * @param \Config $oConfig
+ * @return void
+ */
+ public function EnterMaintenanceMode(Config $oConfig)
+ {
+ SetupUtils::EnterMaintenanceMode($oConfig);
+ }
+
public function EnterReadOnlyMode(Config $oConfig)
{
if ($this->GetFinalEnv() != 'production') {
@@ -1550,6 +1564,13 @@ class RunTimeEnvironment
SetupUtils::EnterReadOnlyMode($oConfig);
}
+ public function ExitMaintenanceMode(): void
+ {
+ if (SetupUtils::IsInMaintenanceMode()){
+ SetupUtils::ExitMaintenanceMode();
+ }
+ }
+
public function ExitReadOnlyMode()
{
if ($this->GetFinalEnv() != 'production') {
diff --git a/setup/sequencers/ApplicationInstallSequencer.php b/setup/sequencers/ApplicationInstallSequencer.php
index fe68981fe5..bfa612d689 100644
--- a/setup/sequencers/ApplicationInstallSequencer.php
+++ b/setup/sequencers/ApplicationInstallSequencer.php
@@ -89,6 +89,7 @@ class ApplicationInstallSequencer extends StepSequencer
return $this->ComputeNextStep($sStep);
case 'migrate-before':
+ $this->oRunTimeEnvironment->EnterMaintenanceMode($this->GetConfig());
if (array_key_exists($sStep, $this->oParams->Get('optional_steps', []))) {
$this->oRunTimeEnvironment->MigrateDataBeforeUpdateStructure($this->oParams->Get('mode'), $this->GetConfig());
}
@@ -139,6 +140,7 @@ class ApplicationInstallSequencer extends StepSequencer
case 'commit':
$this->oRunTimeEnvironment->Commit();
$this->oRunTimeEnvironment->ExitReadOnlyMode();
+ $this->oRunTimeEnvironment->ExitMaintenanceMode();
return $this->GetNextStep('', 'Completed', 100);
default:
diff --git a/setup/sequencers/DataAuditSequencer.php b/setup/sequencers/DataAuditSequencer.php
index 36ab5fc209..eb302873d0 100644
--- a/setup/sequencers/DataAuditSequencer.php
+++ b/setup/sequencers/DataAuditSequencer.php
@@ -94,6 +94,10 @@ class DataAuditSequencer extends StepSequencer
protected function IsDataAuditRequired(): bool
{
+ if (! array_key_exists('setup-audit', $this->oParams->Get('optional_steps', []))) {
+ return false;
+ }
+
if ('install' === $this->oParams->Get('mode')) {
return false;
}
diff --git a/setup/sequencers/StepSequencer.php b/setup/sequencers/StepSequencer.php
index e80d986f12..bb7515299b 100644
--- a/setup/sequencers/StepSequencer.php
+++ b/setup/sequencers/StepSequencer.php
@@ -159,6 +159,11 @@ abstract class StepSequencer
file_put_contents(APPROOT.'log/'.$sFileName.'.xml', $sSafeXml);
}
+ /**
+ * @return \Config
+ * @throws \ConfigException
+ * @throws \CoreException
+ */
protected function GetConfig()
{
if (! is_null($this->oTestConfig)) {
diff --git a/setup/unattended-install/unattended-install.php b/setup/unattended-install/unattended-install.php
index c1d9e63b13..b6362bd723 100644
--- a/setup/unattended-install/unattended-install.php
+++ b/setup/unattended-install/unattended-install.php
@@ -82,7 +82,7 @@ if (! is_null($sInstallationXmlPath) && is_file($sInstallationXmlPath)) {
$aComputedExtensions = $oInstallationFileService->GetAfterComputationSelectedExtensions();
if (! $bInstallationChoicesProvided) {
$sMsg = "Computed installation choices";
- echo "$sMsg:\n".implode(',', $aComputedExtensions)."\n\n";
+ echo "$sMsg:\n".implode(",\n", $aComputedExtensions)."\n\n";
SetupLog::Info($sMsg, null, $aComputedExtensions);
$oParams->Set('selected_extensions', $aComputedExtensions);
}
@@ -97,8 +97,8 @@ if (! is_null($sInstallationXmlPath) && is_file($sInstallationXmlPath)) {
$sMsg = "Modules to install listed in $sXmlSetupBaseName (selected_modules section)";
}
-sort($aSelectedModules);
-echo "$sMsg:\n".implode(',', $aSelectedModules)."\n\n";
+//sort($aSelectedModules);
+echo "$sMsg:\n".implode(",\n", $aSelectedModules)."\n\n";
SetupLog::Info($sMsg, null, $aSelectedModules);
// Configuration file
diff --git a/setup/unattended-install/xml_setup/fresh-install.xml b/setup/unattended-install/xml_setup/fresh-install.xml
index db1311cf55..70bb87e801 100644
--- a/setup/unattended-install/xml_setup/fresh-install.xml
+++ b/setup/unattended-install/xml_setup/fresh-install.xml
@@ -1,11 +1,13 @@
install
-
-
+
+ 1
+ 1
+ 1
+
datamodels/2.x/
- 2.7.0
- /var/www/html/iTop/conf/production/config-itop.php
+ 3.3.0
extensions
production
@@ -38,4 +40,5 @@
+ off
diff --git a/setup/unattended-install/xml_setup/itil-fresh-install.xml b/setup/unattended-install/xml_setup/itil-fresh-install.xml
index e1b1e594f0..b79c06b954 100644
--- a/setup/unattended-install/xml_setup/itil-fresh-install.xml
+++ b/setup/unattended-install/xml_setup/itil-fresh-install.xml
@@ -1,11 +1,13 @@
install
-
-
+
+ 1
+ 1
+ 1
+
datamodels/2.x/
- 2.7.0
- /var/www/html/iTop/conf/production/config-itop.php
+ 3.3.0
extensions
production
@@ -50,4 +52,5 @@
- itop-config-mgmt-core
- itop-kown-error-mgmt
+ off
diff --git a/setup/unattended-install/xml_setup/itil-upgrade.xml b/setup/unattended-install/xml_setup/itil-upgrade.xml
index eb0a63208a..dfe5d729b0 100644
--- a/setup/unattended-install/xml_setup/itil-upgrade.xml
+++ b/setup/unattended-install/xml_setup/itil-upgrade.xml
@@ -1,11 +1,13 @@
upgrade
-
-
+
+ 1
+ 1
+ 1
+
datamodels/2.x/
- 2.7.0
- /var/www/html/iTop/conf/production/config-itop.php
+ 3.3.0
extensions
production
@@ -50,4 +52,5 @@
- itop-config-mgmt-core
- itop-kown-error-mgmt
+ off
diff --git a/setup/unattended-install/xml_setup/upgrade.xml b/setup/unattended-install/xml_setup/upgrade.xml
index ff0d153f1e..deb1ce314c 100644
--- a/setup/unattended-install/xml_setup/upgrade.xml
+++ b/setup/unattended-install/xml_setup/upgrade.xml
@@ -1,11 +1,13 @@
upgrade
-
-
+
+ 1
+ 1
+ 1
+
datamodels/2.x/
- 2.7.0
- /var/www/html/iTop/conf/production/config-itop.php
+ 3.3.0
extensions
production
@@ -38,4 +40,5 @@
-
\ No newline at end of file
+ off
+
diff --git a/setup/wizardsteps/AbstractWizStepInstall.php b/setup/wizardsteps/AbstractWizStepInstall.php
index ab8860b385..8311488408 100644
--- a/setup/wizardsteps/AbstractWizStepInstall.php
+++ b/setup/wizardsteps/AbstractWizStepInstall.php
@@ -66,6 +66,7 @@ abstract class AbstractWizStepInstall extends WizardStep
'log-parameters' => true,
'migrate-before' => true,
'migrate-after' => true,
+ 'setup-audit' => true,
// 'backup' => see below
],
'source_dir' => str_replace(APPROOT, '', $sSourceDir),
diff --git a/setup/wizardsteps/WizStepDataAudit.php b/setup/wizardsteps/WizStepDataAudit.php
index 43a1e8ce99..9ee68c2def 100644
--- a/setup/wizardsteps/WizStepDataAudit.php
+++ b/setup/wizardsteps/WizStepDataAudit.php
@@ -18,6 +18,7 @@
* You should have received a copy of the GNU Affero General Public License
*/
+use Combodo\iTop\Application\Helper\Session;
use Combodo\iTop\Application\WebPage\WebPage;
require_once(APPROOT.'setup/sequencers/DataAuditSequencer.php');
@@ -112,11 +113,12 @@ JS);
INPUT;
}
-
+ $sUID = Session::Get('setup_token');
$oPage->add(
<<
-
+
+
$aHiddenRemovedExtensionInputs
HTML
diff --git a/setup/wizardsteps/WizStepModulesChoice.php b/setup/wizardsteps/WizStepModulesChoice.php
index b7bb07884d..8474588d69 100644
--- a/setup/wizardsteps/WizStepModulesChoice.php
+++ b/setup/wizardsteps/WizStepModulesChoice.php
@@ -509,6 +509,7 @@ EOF
$sDisplayChoices .= '
'.$aChoice['title'].'';
if (isset($aChoice['modules'])) {
if (count($aChoice['modules']) === 0 && (!isset($aChoice['missing']) || $aChoice['missing'] === false)) {
+ SetupLog::Error(__METHOD__, null, ['choice' => $aChoice]);
throw new Exception('Extension '.$aChoice['extension_code'].' does not have any module associated');
}
foreach ($aChoice['modules'] as $sModuleId) {
diff --git a/tests/php-unit-tests/unitary-tests/setup/sequencers/ApplicationInstallerSequencerTest.php b/tests/php-unit-tests/unitary-tests/setup/sequencers/ApplicationInstallerSequencerTest.php
index 654f6a0bc6..b9a7d8728a 100644
--- a/tests/php-unit-tests/unitary-tests/setup/sequencers/ApplicationInstallerSequencerTest.php
+++ b/tests/php-unit-tests/unitary-tests/setup/sequencers/ApplicationInstallerSequencerTest.php
@@ -62,6 +62,7 @@ class ApplicationInstallerSequencerTest extends ItopTestCase
'optional_steps' => [
'migrate-before' => true,
],
+ 'bCallEnterMaintenanceMode' => true,
],
];
}
@@ -69,12 +70,12 @@ class ApplicationInstallerSequencerTest extends ItopTestCase
/**
* @dataProvider FirstStepProvider
*/
- public function testFirstStep($sNextStep, $sNextLabel, $iPercent, $aOptionalSteps)
+ public function testFirstStep($sNextStep, $sNextLabel, $iPercent, $aOptionalSteps, bool $bCallEnterMaintenanceMode = false, bool $bCallExitMaintenanceMode = false)
{
$aAdditionalParams = [
'optional_steps' => $aOptionalSteps,
];
- $this->GivenApplicationInstallSequencer($aAdditionalParams);
+ $this->GivenApplicationInstallSequencer($aAdditionalParams, $bCallEnterMaintenanceMode, $bCallExitMaintenanceMode);
$aRes = $this->oSequencer->ExecuteStep();
$aExpected = [
@@ -160,7 +161,7 @@ class ApplicationInstallerSequencerTest extends ItopTestCase
'migrate-before' => true,
],
];
- $this->GivenApplicationInstallSequencer($aAdditionalParams);
+ $this->GivenApplicationInstallSequencer($aAdditionalParams, bCallEnterMaintenanceMode: true);
$this->oRunTimeEnvironment->expects($this->once())->method('MigrateDataBeforeUpdateStructure')
->with('install', $this->oConfig);
@@ -320,7 +321,7 @@ class ApplicationInstallerSequencerTest extends ItopTestCase
public function testCommit()
{
- $this->GivenApplicationInstallSequencer();
+ $this->GivenApplicationInstallSequencer(bCallExitMaintenanceMode: true);
$this->oRunTimeEnvironment->expects($this->once())->method('Commit');
$this->oRunTimeEnvironment->expects($this->once())->method('ExitReadOnlyMode');
@@ -484,13 +485,18 @@ class ApplicationInstallerSequencerTest extends ItopTestCase
$this->assertEquals(['', 100], $this->oSequencer->GetStepAfterWithPercent('commit'));
}
- private function GivenRunTimeEnvironment(bool $bStepComputationOnly = false): void
+ private function GivenRunTimeEnvironment(bool $bStepComputationOnly = false, bool $bCallEnterMaintenanceMode = false, bool $bCallExitMaintenanceMode = false): void
{
$this->oRunTimeEnvironment = $this->createMock(RunTimeEnvironment::class);
if (! $bStepComputationOnly) {
$this->oRunTimeEnvironment->expects($this->once())->method('EnterReadOnlyMode')
->with($this->oConfig);
}
+
+ $this->oRunTimeEnvironment->expects($this->exactly($bCallEnterMaintenanceMode ? 1 : 0))->method('EnterMaintenanceMode')
+ ->with($this->oConfig);
+
+ $this->oRunTimeEnvironment->expects($this->exactly($bCallExitMaintenanceMode ? 1 : 0))->method('ExitMaintenanceMode');
}
private function GivenConfig(): void
@@ -498,10 +504,10 @@ class ApplicationInstallerSequencerTest extends ItopTestCase
$this->oConfig = $this->createMock(Config::class);
}
- private function GivenApplicationInstallSequencer(array $aAdditionalParams = [], bool $bStepComputationOnly = false): void
+ private function GivenApplicationInstallSequencer(array $aAdditionalParams = [], bool $bStepComputationOnly = false, bool $bCallEnterMaintenanceMode = false, bool $bCallExitMaintenanceMode = false): void
{
$this->GivenConfig();
- $this->GivenRunTimeEnvironment($bStepComputationOnly);
+ $this->GivenRunTimeEnvironment($bStepComputationOnly, $bCallEnterMaintenanceMode, $bCallExitMaintenanceMode);
$this->oSequencer = new ApplicationInstallSequencer($this->GivenParams($aAdditionalParams), $this->oRunTimeEnvironment);
$this->SetNonPublicProperty($this->oSequencer, 'oTestConfig', $this->oConfig);
}
diff --git a/tests/php-unit-tests/unitary-tests/setup/sequencers/DataAuditSequencerTest.php b/tests/php-unit-tests/unitary-tests/setup/sequencers/DataAuditSequencerTest.php
index 33ae70c74f..1313d64402 100644
--- a/tests/php-unit-tests/unitary-tests/setup/sequencers/DataAuditSequencerTest.php
+++ b/tests/php-unit-tests/unitary-tests/setup/sequencers/DataAuditSequencerTest.php
@@ -8,6 +8,8 @@ use PHPParameters;
class DataAuditSequencerTest extends ItopTestCase
{
+ private $oConfig;
+
protected function setUp(): void
{
static::LoadRequiredItopFiles();
@@ -85,6 +87,7 @@ class DataAuditSequencerTest extends ItopTestCase
$aAdditionalParams = [
'mode' => 'update',
+ 'optional_steps' => ['setup-audit' => true ],
];
$oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
@@ -99,6 +102,30 @@ class DataAuditSequencerTest extends ItopTestCase
$this->assertEquals($aExpected, $aRes);
}
+ public function testCompileWithAuditDisabledViaOptionalSteps()
+ {
+ $oRunTimeEnvironment = $this->createMock(\RunTimeEnvironment::class);
+ $oRunTimeEnvironment->expects($this->never())->method('GetApplicationVersion');
+ $oRunTimeEnvironment->expects($this->once())->method('DoCompile');
+ $oRunTimeEnvironment->expects($this->never())->method('GetFinalEnv')
+ ->willReturn('production');
+
+ $aAdditionalParams = [
+ 'mode' => 'update',
+ ];
+ $oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
+
+ $aRes = $oSequencer->ExecuteStep('compile');
+ $aExpected = [
+ 'status' => 1,
+ 'message' => '',
+ 'next-step' => 'complete',
+ 'next-step-label' => 'Check Completed',
+ 'percentage-completed' => 100,
+ ];
+ $this->assertEquals($aExpected, $aRes);
+ }
+
public function testCompileNoAuditInFreshInstall()
{
$oRunTimeEnvironment = $this->createMock(\RunTimeEnvironment::class);
@@ -127,6 +154,7 @@ class DataAuditSequencerTest extends ItopTestCase
$aAdditionalParams = [
'mode' => 'update',
+ 'optional_steps' => ['setup-audit' => true ],
];
$oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
@@ -171,6 +199,7 @@ class DataAuditSequencerTest extends ItopTestCase
$aAdditionalParams = [
'mode' => 'update',
+ 'optional_steps' => ['setup-audit' => true ],
];
$oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
@@ -196,6 +225,7 @@ class DataAuditSequencerTest extends ItopTestCase
$aAdditionalParams = [
'mode' => 'update',
+ 'optional_steps' => ['setup-audit' => true ],
];
$oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
$aRes = $oSequencer->ExecuteStep('setup-audit');
@@ -272,7 +302,11 @@ class DataAuditSequencerTest extends ItopTestCase
->willReturn(['product_version' => ITOP_VERSION_FULL."_alpha"]);
$oRunTimeEnvironment->expects($this->never())->method("GetFinalEnv");
- $oSequencer = new DataAuditSequencer($this->GivenParams(['mode' => 'upgrade']), $oRunTimeEnvironment);
+ $aAdditionalParams = [
+ 'mode' => 'upgrade',
+ 'optional_steps' => ['setup-audit' => true ],
+ ];
+ $oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
self::assertFalse($this->InvokeNonPublicMethod(DataAuditSequencer::class, "IsDataAuditRequired", $oSequencer));
}
@@ -283,7 +317,25 @@ class DataAuditSequencerTest extends ItopTestCase
->willReturn(['product_version' => ITOP_VERSION_FULL]);
$oRunTimeEnvironment->expects($this->once())->method("GetFinalEnv")->willReturn("production-gabuzomeu");
- $oSequencer = new DataAuditSequencer($this->GivenParams(['mode' => 'upgrade']), $oRunTimeEnvironment);
+ $aAdditionalParams = [
+ 'mode' => 'upgrade',
+ 'optional_steps' => ['setup-audit' => true ],
+ ];
+ $oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
+ self::assertFalse($this->InvokeNonPublicMethod(DataAuditSequencer::class, "IsDataAuditRequired", $oSequencer));
+ }
+
+ public function testIsDataAuditRequired_NoAuditTriggeredBecauseDisabled()
+ {
+ $oRunTimeEnvironment = $this->createMock(\RunTimeEnvironment::class);
+ $oRunTimeEnvironment->expects($this->never())->method('GetApplicationVersion')
+ ->willReturn(['product_version' => ITOP_VERSION_FULL]);
+ $oRunTimeEnvironment->expects($this->never())->method("GetFinalEnv")->willReturn("production");
+
+ $aAdditionalParams = [
+ 'mode' => 'upgrade',
+ ];
+ $oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
self::assertFalse($this->InvokeNonPublicMethod(DataAuditSequencer::class, "IsDataAuditRequired", $oSequencer));
}
@@ -294,7 +346,11 @@ class DataAuditSequencerTest extends ItopTestCase
->willReturn(['product_version' => ITOP_VERSION_FULL]);
$oRunTimeEnvironment->expects($this->once())->method("GetFinalEnv")->willReturn("production");
- $oSequencer = new DataAuditSequencer($this->GivenParams(['mode' => 'upgrade']), $oRunTimeEnvironment);
+ $aAdditionalParams = [
+ 'mode' => 'upgrade',
+ 'optional_steps' => ['setup-audit' => true ],
+ ];
+ $oSequencer = new DataAuditSequencer($this->GivenParams($aAdditionalParams), $oRunTimeEnvironment);
self::assertTrue($this->InvokeNonPublicMethod(DataAuditSequencer::class, "IsDataAuditRequired", $oSequencer));
}
}