From d5edfc69d0311b72737dcbfba2dca2a7db048a31 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Thu, 30 Mar 2023 18:13:40 +0200 Subject: [PATCH 01/12] fix: fix version constraint handling for versions below 1.0.0 --- src/Classes/Semver/Comparator.php | 18 +++++++++-- .../unit/SemverTests/SemverComparatorTest.php | 30 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/Classes/Semver/Comparator.php b/src/Classes/Semver/Comparator.php index 4d4d5920..4be2c107 100644 --- a/src/Classes/Semver/Comparator.php +++ b/src/Classes/Semver/Comparator.php @@ -156,8 +156,22 @@ public function isCompatible(string $versionString1, string $versionString2): bo $version1 = $this->parser->parse($versionString1); $version2 = $this->parser->parse($versionString2); - if ($version1->getMajor() != $version2->getMajor()) { - return false; + $majorCheck = $version1->getMajor() == $version2->getMajor(); + $minorCheck = $version1->getMinor() == $version2->getMinor(); + $patchCheck = $version1->getPatch() == $version2->getPatch(); + + if ($version1->getMajor() >= 1) { // ^1.0.0 + if (!$majorCheck) { + return false; + } + } elseif ($version1->getMajor() == 0 && $version1->getMinor() >= 1) { // ^0.1.0 + if (!$majorCheck || !$minorCheck) { + return false; + } + } elseif ($version1->getMajor() == 0 && $version1->getMinor() == 0) { // ^0.0.0 + if (!$majorCheck || !$minorCheck || !$patchCheck) { + return false; + } } return $this->greaterThanOrEqualTo($versionString1, $versionString2); diff --git a/tests/unit/SemverTests/SemverComparatorTest.php b/tests/unit/SemverTests/SemverComparatorTest.php index 4ae00d0d..8ab16725 100644 --- a/tests/unit/SemverTests/SemverComparatorTest.php +++ b/tests/unit/SemverTests/SemverComparatorTest.php @@ -128,6 +128,36 @@ public function testThatVersionASatisfiesConstraint() $this->assertFalse($this->comparator->satisfies('3.3.3', '3.2.3')); } + public function testCaretOperatorLess010() + { + // Test für Versionen kleiner als 0.1.0 + $this->assertFalse($this->comparator->satisfies('0.0.9', '^0.0.0')); + $this->assertFalse($this->comparator->satisfies('0.0.9', '^0.1.0')); + $this->assertFalse($this->comparator->satisfies('0.0.9', '^1.0.0')); + $this->assertTrue($this->comparator->satisfies('0.0.9', '^0.0.9')); + $this->assertTrue($this->comparator->satisfies('0.0.9', '^0.0.9-beta.1')); + } + + public function testCaretOperatorLess100() + { + // Test für Versionen kleiner als 1.0.0 + $this->assertTrue($this->comparator->satisfies('0.9.9', '^0.9.0')); + $this->assertTrue($this->comparator->satisfies('0.9.9', '^0.9.9')); + $this->assertFalse($this->comparator->satisfies('0.9.9', '^0.10.0')); + $this->assertFalse($this->comparator->satisfies('0.9.9', '^1.0.0')); + $this->assertFalse($this->comparator->satisfies('0.10.0', '^0.9.0')); + } + + public function testCaretOperatorUntil100() + { + // Test für Versionen ab 1.0.0 + $this->assertTrue($this->comparator->satisfies('1.0.0', '^1.0.0')); + $this->assertFalse($this->comparator->satisfies('1.0.0', '^1.0.1')); + $this->assertTrue($this->comparator->satisfies('1.1.0', '^1.0.0')); + $this->assertFalse($this->comparator->satisfies('2.0.0', '^1.0.0')); + } + + public function testThatVersionASatisfiesOrConstraint() { $this->assertTrue($this->comparator->satisfies('3.3.3', '^2.2.2 || ^3.3.3')); From 6631e3f143d0e6c6ef0c5a9a1a7b9db0b6c8280c Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Thu, 30 Mar 2023 18:14:26 +0200 Subject: [PATCH 02/12] fix: CombinationSatisfyer and DependencyBuilderTest --- src/Classes/DependencyManager/CombinationSatisfyer.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Classes/DependencyManager/CombinationSatisfyer.php b/src/Classes/DependencyManager/CombinationSatisfyer.php index b3a417f7..d1185b11 100644 --- a/src/Classes/DependencyManager/CombinationSatisfyer.php +++ b/src/Classes/DependencyManager/CombinationSatisfyer.php @@ -117,9 +117,8 @@ public function satisfiesCominationsFromModuleWithIterator( ModuleTree $moduleTree, CombinationIterator $combinationIterator ): CombinationSatisfyerResult { - $foundCombination = new Combination(); - while (true) { + $foundCombination = new Combination(); $failLog = new FailLog(); $testCombination = $combinationIterator->current(); $result = $this->satisfiesCominationFromModuleTree( From 6f6cfce3a880b64cfc3cf70d3ec44be5901e7ea8 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Thu, 30 Mar 2023 18:14:34 +0200 Subject: [PATCH 03/12] fix: CombinationSatisfyer and DependencyBuilderTest --- .../DependencyBuilderTest.php | 62 +++++++++++++++++-- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/tests/unit/DependencyManager/DependencyBuilderTest.php b/tests/unit/DependencyManager/DependencyBuilderTest.php index e22896f5..1bf7d1e2 100644 --- a/tests/unit/DependencyManager/DependencyBuilderTest.php +++ b/tests/unit/DependencyManager/DependencyBuilderTest.php @@ -14,12 +14,13 @@ namespace RobinTheHood\ModifiedModuleLoaderClient\Tests\Unit\DependencyManager; use PHPUnit\Framework\TestCase; +use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\CombinationSatisfyerResult; use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\DependencyBuilder; use RobinTheHood\ModifiedModuleLoaderClient\DependencyManager\SystemSet; class DependencyBuilderTest extends TestCase { - public function testSatisfies() + public function testSatisfies1() { $dependencyBuilder = new DependencyBuilder(); $systemSet = new SystemSet(); @@ -47,26 +48,77 @@ public function testSatisfies() "robinthehood/modified-orm" => '1.8.1', "robinthehood/modified-ui" => '0.1.0', "robinthehood/pdf-bill" => '0.17.0', - "robinthehood/tfpdf" => '0.3.0', - 'firstweb/multi-order' => '1.13.3', + 'firstweb/multi-order' => '1.0.3', "foo/bar" => '1.2.3' ], $combinationSatisfyerResult->testCombination->getAll() ); + $this->assertEqualsCanonicalizing( [ "modified" => '2.0.4.2', "composer/autoload" => '1.3.0', + 'firstweb/multi-order' => '1.0.3', + ], + $combinationSatisfyerResult->foundCombination->getAll() + ); + + $this->assertEquals( + CombinationSatisfyerResult::RESULT_COMBINATION_FOUND, + $combinationSatisfyerResult->result + ); + } + + public function testSatisfies2() + { + $dependencyBuilder = new DependencyBuilder(); + $systemSet = new SystemSet(); + + $systemSet->set([ + "modified" => '2.0.4.2', + "php" => '7.4.0', + "mmlc" => '1.20.0-beta.1', + "composer/autoload" => '1.3.0', + "robinthehood/modified-std-module" => '0.9.0', + "robinthehood/modified-orm" => '1.8.1', + "robinthehood/pdf-bill" => '0.17.0', + "foo/bar" => '1.2.3' + ]); + + $combinationSatisfyerResult = $dependencyBuilder->satisfies('firstweb/multi-order', '^1.10.0', $systemSet); + + $this->assertEqualsCanonicalizing( + [ + "modified" => '2.0.4.2', + "php" => '7.4.0', + "mmlc" => '1.20.0-beta.1', + "composer/autoload" => '1.3.0', "robinthehood/modified-std-module" => '0.9.0', "robinthehood/modified-orm" => '1.8.1', "robinthehood/modified-ui" => '0.1.0', "robinthehood/pdf-bill" => '0.17.0', - "robinthehood/tfpdf" => '0.3.0', - 'firstweb/multi-order' => '1.13.3', + 'firstweb/multi-order' => '1.10.0', + "foo/bar" => '1.2.3' + ], + $combinationSatisfyerResult->testCombination->getAll() + ); + + + $this->assertEqualsCanonicalizing( + [ + "modified" => '2.0.4.2', + "composer/autoload" => '1.3.0', + 'firstweb/multi-order' => '1.10.0', + "robinthehood/modified-orm" => '1.8.1', ], $combinationSatisfyerResult->foundCombination->getAll() ); + + $this->assertEquals( + CombinationSatisfyerResult::RESULT_COMBINATION_NOT_FOUND, + $combinationSatisfyerResult->result + ); } public function atestInvokeDependency() From 3cb6c6081193839a34f7a0bba77c1b1ff1094006 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Thu, 30 Mar 2023 18:39:04 +0200 Subject: [PATCH 04/12] fix: some more tests --- tests/unit/ModuleLoaderTest.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/unit/ModuleLoaderTest.php b/tests/unit/ModuleLoaderTest.php index 3ed78dc8..f6421279 100644 --- a/tests/unit/ModuleLoaderTest.php +++ b/tests/unit/ModuleLoaderTest.php @@ -18,6 +18,8 @@ class ModuleLoaderTest extends TestCase { + private $loader; + protected function setUp(): void { $this->loader = new ModuleLoader(); @@ -63,11 +65,13 @@ public function testCanLoadAllVersionsByContraint() $modules = $this->loader->loadAllByArchiveNameAndConstraint('robinthehood/modified-std-module', '^0.2.0'); $this->assertEquals('0.2.0', $modules[0]->getVersion()); - $this->assertEquals('0.3.0', $modules[1]->getVersion()); - $this->assertEquals('0.4.0', $modules[2]->getVersion()); + // $this->assertEquals('0.3.0', $modules[1]->getVersion()); + // $this->assertEquals('0.4.0', $modules[2]->getVersion()); - $modules = $this->loader->loadAllByArchiveNameAndConstraint('robinthehood/modified-std-module', '^0.0.0'); + $modules = $this->loader->loadAllByArchiveNameAndConstraint('robinthehood/modified-std-module', '^0.0.1'); $this->assertEquals('0.0.1', $modules[0]->getVersion()); - $this->assertEquals('0.1.0', $modules[1]->getVersion()); + //$this->assertEquals('0.1.0', $modules[1]->getVersion()); + + // TODO: Add more tests for version > 1.0.0 } } From 58f53285332063a19a056cfb326a9a04469baabb Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Fri, 31 Mar 2023 00:38:34 +0200 Subject: [PATCH 05/12] test: add more constraint tests --- tests/unit/ModuleLoaderTest.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/tests/unit/ModuleLoaderTest.php b/tests/unit/ModuleLoaderTest.php index f6421279..ad81ffae 100644 --- a/tests/unit/ModuleLoaderTest.php +++ b/tests/unit/ModuleLoaderTest.php @@ -63,15 +63,25 @@ public function testCanLoadAllVersionsByContraint() $this->assertEquals(0, count($modules)); // Lokale Version mit 'auto'; + // tests for version <1.0.0 $modules = $this->loader->loadAllByArchiveNameAndConstraint('robinthehood/modified-std-module', '^0.2.0'); $this->assertEquals('0.2.0', $modules[0]->getVersion()); - // $this->assertEquals('0.3.0', $modules[1]->getVersion()); - // $this->assertEquals('0.4.0', $modules[2]->getVersion()); $modules = $this->loader->loadAllByArchiveNameAndConstraint('robinthehood/modified-std-module', '^0.0.1'); $this->assertEquals('0.0.1', $modules[0]->getVersion()); - //$this->assertEquals('0.1.0', $modules[1]->getVersion()); - // TODO: Add more tests for version > 1.0.0 + $modules = $this->loader->loadAllByArchiveNameAndConstraint('robinthehood/modified-std-module', '^0.6.0'); + $this->assertEquals(4, count($modules)); + $this->assertEquals('0.6.0', $modules[0]->getVersion()); + $this->assertEquals('0.6.1', $modules[1]->getVersion()); + $this->assertEquals('0.6.2', $modules[2]->getVersion()); + + // tests for version >=1.0.0 + $modules = $this->loader->loadAllByArchiveNameAndConstraint('composer/autoload', '^1.2.0'); + $this->assertEquals(4, count($modules)); + $this->assertEquals('1.2.0', $modules[0]->getVersion()); + $this->assertEquals('1.2.1', $modules[1]->getVersion()); + $this->assertEquals('1.2.2', $modules[2]->getVersion()); + $this->assertEquals('1.3.0', $modules[3]->getVersion()); } } From c1c49457161648eec433692ab7f48f2dec85ad9e Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Fri, 31 Mar 2023 12:15:07 +0200 Subject: [PATCH 06/12] feat: add lax and strict mode --- src/Classes/Semver/Comparator.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Classes/Semver/Comparator.php b/src/Classes/Semver/Comparator.php index 4be2c107..85b42c29 100644 --- a/src/Classes/Semver/Comparator.php +++ b/src/Classes/Semver/Comparator.php @@ -17,9 +17,16 @@ class Comparator { + public const CARET_MODE_LAX = 0; + public const CARET_MODE_STRICT = 1; + + /** @var Parser */ protected $parser; - public function __construct(Parser $parser) + /** @var int */ + private $mode = self::CARET_MODE_STRICT; + + public function __construct(Parser $parser, int $mode = self::CARET_MODE_STRICT) { $this->parser = $parser; } @@ -160,15 +167,17 @@ public function isCompatible(string $versionString1, string $versionString2): bo $minorCheck = $version1->getMinor() == $version2->getMinor(); $patchCheck = $version1->getPatch() == $version2->getPatch(); + $strict = $this->mode === self::CARET_MODE_STRICT; + if ($version1->getMajor() >= 1) { // ^1.0.0 if (!$majorCheck) { return false; } - } elseif ($version1->getMajor() == 0 && $version1->getMinor() >= 1) { // ^0.1.0 + } elseif ($strict && $version1->getMajor() == 0 && $version1->getMinor() >= 1) { // ^0.1.0 if (!$majorCheck || !$minorCheck) { return false; } - } elseif ($version1->getMajor() == 0 && $version1->getMinor() == 0) { // ^0.0.0 + } elseif ($strict && $version1->getMajor() == 0 && $version1->getMinor() == 0) { // ^0.0.0 if (!$majorCheck || !$minorCheck || !$patchCheck) { return false; } From 5f6abd86363a120d1dda1845c6d94feebae4492d Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Fri, 31 Mar 2023 12:15:33 +0200 Subject: [PATCH 07/12] feat: add new class SemverComparatorFactory --- src/Classes/SemverComparatorFactory.php | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/Classes/SemverComparatorFactory.php diff --git a/src/Classes/SemverComparatorFactory.php b/src/Classes/SemverComparatorFactory.php new file mode 100644 index 00000000..61f52577 --- /dev/null +++ b/src/Classes/SemverComparatorFactory.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace RobinTheHood\ModifiedModuleLoaderClient; + +use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; +use RobinTheHood\ModifiedModuleLoaderClient\Semver\Parser; + +class SemverComparatorFactory +{ + /** + * @return Comparator + */ + public static function createComparator() + { + $comparator = new Comparator(new Parser(), Config::getDependenyMode()); + return $comparator; + } +} From 5798017e9f1c3669fd990dbd1590045a20f9fc90 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Fri, 31 Mar 2023 12:17:19 +0200 Subject: [PATCH 08/12] feat: use new class SemverComparatorFactory --- src/Classes/DependencyManager/CombinationSatisfyer.php | 4 ++-- src/Classes/DependencyManager/DependencyManager.php | 5 +++-- src/Classes/Module.php | 4 ++-- src/Classes/ModuleFilter.php | 8 ++++---- src/Classes/ModuleSorter.php | 2 +- src/Classes/ModuleStatus.php | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/Classes/DependencyManager/CombinationSatisfyer.php b/src/Classes/DependencyManager/CombinationSatisfyer.php index d1185b11..e7fb471f 100644 --- a/src/Classes/DependencyManager/CombinationSatisfyer.php +++ b/src/Classes/DependencyManager/CombinationSatisfyer.php @@ -14,7 +14,7 @@ namespace RobinTheHood\ModifiedModuleLoaderClient\DependencyManager; use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; -use RobinTheHood\ModifiedModuleLoaderClient\Semver\Parser; +use RobinTheHood\ModifiedModuleLoaderClient\SemverComparatorFactory; class CombinationSatisfyer { @@ -23,7 +23,7 @@ class CombinationSatisfyer public function __construct() { - $this->comparator = new Comparator(new Parser()); + $this->comparator = SemverComparatorFactory::createComparator(); } /** diff --git a/src/Classes/DependencyManager/DependencyManager.php b/src/Classes/DependencyManager/DependencyManager.php index 283d2bb5..91e13c50 100644 --- a/src/Classes/DependencyManager/DependencyManager.php +++ b/src/Classes/DependencyManager/DependencyManager.php @@ -22,15 +22,16 @@ use RobinTheHood\ModifiedModuleLoaderClient\Logger\LogLevel; use RobinTheHood\ModifiedModuleLoaderClient\Logger\StaticLogger; use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; -use RobinTheHood\ModifiedModuleLoaderClient\Semver\Parser; +use RobinTheHood\ModifiedModuleLoaderClient\SemverComparatorFactory; class DependencyManager { + /** @var Comparator */ protected $comparator; public function __construct() { - $this->comparator = new Comparator(new Parser()); + $this->comparator = SemverComparatorFactory::createComparator(); } /** diff --git a/src/Classes/Module.php b/src/Classes/Module.php index bf9a9a02..a9f4fda1 100644 --- a/src/Classes/Module.php +++ b/src/Classes/Module.php @@ -515,7 +515,7 @@ public function isCompatibleWithPhp(): bool } $phpVersionInstalled = phpversion(); - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); return $comparator->satisfies($phpVersionInstalled, $phpVersionContraint); } @@ -532,7 +532,7 @@ public function isCompatibleWithMmlc(): bool return true; } - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); return $comparator->satisfies($mmlcVersionInstalled, $mmlcVersionContraint); } diff --git a/src/Classes/ModuleFilter.php b/src/Classes/ModuleFilter.php index 2d898e54..5359e910 100644 --- a/src/Classes/ModuleFilter.php +++ b/src/Classes/ModuleFilter.php @@ -124,7 +124,7 @@ public static function filterNewestVersion(array $modules): array continue; } - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); if ($comparator->lessThan($module->getVersion(), $filteredModule->getVersion())) { $insertOrReplace = false; break; @@ -162,7 +162,7 @@ public static function filterNewestOrInstalledVersion($modules): array break; } - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); if ($comparator->lessThan($module->getVersion(), $filteredModule->getVersion())) { $insertOrReplace = false; break; @@ -215,7 +215,7 @@ public static function filterByVersionConstrain(array $modules, string $constrai { $filteredModules = []; foreach ($modules as $module) { - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); if ($comparator->satisfies($module->getVersion(), $constrain)) { $filteredModules[] = $module; } @@ -230,7 +230,7 @@ public static function getLatestVersion(array $modules): ?Module { $selectedModule = null; foreach ($modules as $module) { - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); if (!$selectedModule || $comparator->greaterThan($module->getVersion(), $selectedModule->getVersion())) { $selectedModule = $module; } diff --git a/src/Classes/ModuleSorter.php b/src/Classes/ModuleSorter.php index af42e793..df3f1e11 100644 --- a/src/Classes/ModuleSorter.php +++ b/src/Classes/ModuleSorter.php @@ -73,7 +73,7 @@ public static function sortByCategory($modules): array public static function sortByVersion(array $modules): array { usort($modules, function (Module $moduleA, Module $moduleB): int { - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); if ($comparator->lessThan($moduleA->getVersion(), $moduleB->getVersion())) { return 1; } else { diff --git a/src/Classes/ModuleStatus.php b/src/Classes/ModuleStatus.php index 3c1f81ba..b73f955c 100644 --- a/src/Classes/ModuleStatus.php +++ b/src/Classes/ModuleStatus.php @@ -136,7 +136,7 @@ public static function isUpdatable(Module $module): bool return false; } - $comparator = new Comparator(new Parser()); + $comparator = SemverComparatorFactory::createComparator(); if (!$comparator->greaterThan($newestVersion->getVersion(), $installedVersion->getVersion())) { return false; } From 9224dbf33c3b64af31d25fab35e54a26349b8feb Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Fri, 31 Mar 2023 12:19:11 +0200 Subject: [PATCH 09/12] refactor: set strict mode directly --- src/Classes/MmlcVersionInfoLoader.php | 2 +- src/Classes/SelfUpdater.php | 2 +- tests/unit/MmlcVersionInfoLoaderTest.php | 2 +- tests/unit/SemverTests/SemverComparatorTest.php | 3 ++- tests/unit/SemverTests/SemverFilterTest.php | 4 ++-- tests/unit/SemverTests/SemverSorterTest.php | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Classes/MmlcVersionInfoLoader.php b/src/Classes/MmlcVersionInfoLoader.php index 0a7ce597..e3bf4a51 100644 --- a/src/Classes/MmlcVersionInfoLoader.php +++ b/src/Classes/MmlcVersionInfoLoader.php @@ -34,7 +34,7 @@ class MmlcVersionInfoLoader public static function createLoader(): MmlcVersionInfoLoader { $parser = new Parser(); - $comparator = new Comparator($parser); + $comparator = new Comparator($parser, Comparator::CARET_MODE_STRICT); $sorter = new Sorter($comparator); $filter = new Filter($parser, $comparator, $sorter); diff --git a/src/Classes/SelfUpdater.php b/src/Classes/SelfUpdater.php index 9115e9be..c7be36e0 100644 --- a/src/Classes/SelfUpdater.php +++ b/src/Classes/SelfUpdater.php @@ -55,7 +55,7 @@ public function __construct(MmlcVersionInfoLoader $mmlcVersionInfoLoader) $this->appRoot = App::getRoot(); $this->mmlcVersionInfoLoader = $mmlcVersionInfoLoader; $this->remoteUpdateServer = $this->getRomteUpdateServer(); - $this->comparator = new Comparator(new Parser()); + $this->comparator = new Comparator(new Parser(), Comparator::CARET_MODE_STRICT); $this->parser = new Parser(); $this->filter = new Filter($this->parser, $this->comparator, new Sorter($this->comparator)); } diff --git a/tests/unit/MmlcVersionInfoLoaderTest.php b/tests/unit/MmlcVersionInfoLoaderTest.php index 277a67bf..0b6d3b52 100644 --- a/tests/unit/MmlcVersionInfoLoaderTest.php +++ b/tests/unit/MmlcVersionInfoLoaderTest.php @@ -74,7 +74,7 @@ public function testCanGetNextNewestUnstable() private function getMmlcVersionInfoLoader(): MmlcVersionInfoLoader { $parser = new Parser(); - $comparator = new Comparator($parser); + $comparator = new Comparator($parser, Comparator::CARET_MODE_STRICT); $sorter = new Sorter($comparator); $filter = new Filter($parser, $comparator, $sorter); diff --git a/tests/unit/SemverTests/SemverComparatorTest.php b/tests/unit/SemverTests/SemverComparatorTest.php index 8ab16725..3fb85506 100644 --- a/tests/unit/SemverTests/SemverComparatorTest.php +++ b/tests/unit/SemverTests/SemverComparatorTest.php @@ -17,13 +17,14 @@ use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; use RobinTheHood\ModifiedModuleLoaderClient\Semver\Parser; +// TODO: test caret none strict mode class SemverComparatorTest extends TestCase { public $comparator; protected function setUp(): void { - $this->comparator = new Comparator(new Parser()); + $this->comparator = new Comparator(new Parser(), Comparator::CARET_MODE_STRICT); } public function testSemverCanHandleGreaterThan() diff --git a/tests/unit/SemverTests/SemverFilterTest.php b/tests/unit/SemverTests/SemverFilterTest.php index 078fb2e5..0c60dcde 100644 --- a/tests/unit/SemverTests/SemverFilterTest.php +++ b/tests/unit/SemverTests/SemverFilterTest.php @@ -27,8 +27,8 @@ class SemverFilterTest extends TestCase protected function setUp(): void { $parser = new Parser(); - $comparator = new Comparator($parser); - $this->filter = new Filter($parser, new Comparator($parser), new Sorter($comparator)); + $comparator = new Comparator($parser, Comparator::CARET_MODE_STRICT); + $this->filter = new Filter($parser, $comparator, new Sorter($comparator)); } public function testSemverGetsHighestVersionString() diff --git a/tests/unit/SemverTests/SemverSorterTest.php b/tests/unit/SemverTests/SemverSorterTest.php index 92063b43..a3b70eec 100644 --- a/tests/unit/SemverTests/SemverSorterTest.php +++ b/tests/unit/SemverTests/SemverSorterTest.php @@ -25,7 +25,7 @@ class SemverSorterTest extends TestCase protected function setUp(): void { - $comparator = new Comparator(new Parser()); + $comparator = new Comparator(new Parser(), Comparator::CARET_MODE_STRICT); $this->sorter = new Sorter($comparator); } From c37daacb31f84095a9b26ab80c7fdd4279e14f84 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Fri, 31 Mar 2023 12:19:41 +0200 Subject: [PATCH 10/12] style: disable some phpcs warnings --- src/Templates/Settings.tmpl.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Templates/Settings.tmpl.php b/src/Templates/Settings.tmpl.php index e10665c5..cd8af673 100644 --- a/src/Templates/Settings.tmpl.php +++ b/src/Templates/Settings.tmpl.php @@ -1,5 +1,10 @@ Date: Fri, 31 Mar 2023 12:20:21 +0200 Subject: [PATCH 11/12] feat: add GUI config for dependency strict and lax mode --- src/Classes/Config.php | 33 +++++++++++++++++++++++++++++++++ src/Classes/IndexController.php | 4 ++++ src/Templates/Settings.tmpl.php | 12 ++++++++++++ 3 files changed, 49 insertions(+) diff --git a/src/Classes/Config.php b/src/Classes/Config.php index 433fac9f..e4c0c16a 100644 --- a/src/Classes/Config.php +++ b/src/Classes/Config.php @@ -12,6 +12,7 @@ namespace RobinTheHood\ModifiedModuleLoaderClient; use RobinTheHood\ModifiedModuleLoaderClient\App; +use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; class Config { @@ -428,4 +429,36 @@ public static function getLogging(): bool return $logging === 'true'; } + + + /** + * Set exceptionMonitorMail in config. + * + * @param string $newExceptionMonitorMail. + */ + public static function setDependencyMode(string $dependencyMode): void + { + self::writeConfiguration(['dependencyMode' => $dependencyMode]); + } + + /** + * Get dependencyMode from config. + * + * @return bool Returns logging from config or null. + */ + public static function getDependenyMode(): int + { + /** + * Expect a string or null + * depending if the user specified an email address. + * You will not receive an empty string. + */ + $dependencyMode = self::getOption('dependencyMode'); + + if ($dependencyMode === 'strict') { + return Comparator::CARET_MODE_STRICT; + } + + return Comparator::CARET_MODE_LAX; + } } diff --git a/src/Classes/IndexController.php b/src/Classes/IndexController.php index 4c99f36e..c9c33acc 100644 --- a/src/Classes/IndexController.php +++ b/src/Classes/IndexController.php @@ -632,6 +632,10 @@ public function invokeSettings() Config::setInstallMode($parsedBody['installMode']); } + if (isset($parsedBody['dependencyMode'])) { + Config::setDependencyMode($parsedBody['dependencyMode']); + } + Notification::pushFlashMessage([ 'text' => 'Einstellungen erfolgreich gespeichert.', 'type' => 'success' diff --git a/src/Templates/Settings.tmpl.php b/src/Templates/Settings.tmpl.php index cd8af673..283af1bd 100644 --- a/src/Templates/Settings.tmpl.php +++ b/src/Templates/Settings.tmpl.php @@ -8,6 +8,7 @@ defined('LOADED_FROM_INDEX') && LOADED_FROM_INDEX ?? die('Access denied.'); use RobinTheHood\ModifiedModuleLoaderClient\Config; +use RobinTheHood\ModifiedModuleLoaderClient\Semver\Comparator; use RobinTheHood\ModifiedModuleLoaderClient\ViewModels\NotificationViewModel; $notificationView = new NotificationViewModel(); @@ -109,6 +110,17 @@ function viewIsSelected(bool $value): string

In diesem Ordner werden Module für den MMLC heruntergeladen.

+ +
+ + + +

Du kannst zwischen strict und lax wählen. Mit strict werden die Abhänigkeiten von Modulen mit einer Version kleiner als 1.0.0 genauer kontrolliert. Wenn sich einige Module nicht installieren lassen, kannst du es mit lax versuchen. Beachte, dass im Lex-Modus die Wahrscheinlichkeit größer ist, dass verschiedene Module nicht miteinander harmonieren.

+
+
From 9a3f6507065261b64cc81eddc433795f8ce88d48 Mon Sep 17 00:00:00 2001 From: Robin Wieschendorf Date: Fri, 31 Mar 2023 12:51:31 +0200 Subject: [PATCH 12/12] fix: doc block type --- src/Classes/Config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Classes/Config.php b/src/Classes/Config.php index e4c0c16a..effb1575 100644 --- a/src/Classes/Config.php +++ b/src/Classes/Config.php @@ -444,7 +444,7 @@ public static function setDependencyMode(string $dependencyMode): void /** * Get dependencyMode from config. * - * @return bool Returns logging from config or null. + * @return int Returns logging from config or null. */ public static function getDependenyMode(): int {