From e3d032860dd56833493119c16dbc5fc32c5e8765 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 27 Jun 2025 20:07:13 +0700 Subject: [PATCH 1/5] [ComposerProcessor] Skip change under "suggest" config in composer.json for RaiseToInstalledComposerProcessor --- .../Fixture/skip-suggest.json | 8 ++++++ .../RaiseToInstalledComposerProcessorTest.php | 28 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json new file mode 100644 index 0000000..620ff67 --- /dev/null +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json @@ -0,0 +1,8 @@ +{ + "require-dev": { + "illuminate/container": "^9.0" + }, + "suggest": { + "illuminate/container": "to use container" + } +} diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php index a02a3c2..ea07427 100644 --- a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php @@ -49,6 +49,34 @@ public function testSkipDev(): void $this->assertEmpty($changedPackageVersionsResult->getChangedPackageVersions()); } + public function testSkipSuggestChange(): void + { + $composerJsonContents = FileSystem::read(__DIR__ . '/Fixture/skip-suggest.json'); + + $changedPackageVersionsResult = $this->raiseToInstalledComposerProcessor->process($composerJsonContents); + + $changedPackageVersion = $changedPackageVersionsResult->getChangedPackageVersions()[0]; + + $this->assertSame('illuminate/container', $changedPackageVersion->getPackageName()); + $this->assertSame('^9.0', $changedPackageVersion->getOldVersion()); + $this->assertSame('^12.19', $changedPackageVersion->getNewVersion()); + + $this->assertSame(<<<'JSON' +{ + "require-dev": { + "illuminate/container": "^12.19" + }, + "suggest": { + "illuminate/container": "to use container" + } +} + +JSON + , + $changedPackageVersionsResult->getComposerJsonContents() + ); + } + public function testSinglePiped(): void { $composerJsonContents = FileSystem::read(__DIR__ . '/Fixture/single-piped.json'); From 82a2f2980260f1ead241d3d064dff360f3d37781 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 27 Jun 2025 20:16:15 +0700 Subject: [PATCH 2/5] more fixtures --- .../skip-suggest-early-definition.json | 8 +++ .../RaiseToInstalledComposerProcessorTest.php | 54 +++++++++++++------ 2 files changed, 46 insertions(+), 16 deletions(-) create mode 100644 tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json new file mode 100644 index 0000000..43766c4 --- /dev/null +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json @@ -0,0 +1,8 @@ +{ + "suggest": { + "illuminate/container": "to use container" + }, + "require-dev": { + "illuminate/container": "^9.0" + } +} diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php index ea07427..a377be2 100644 --- a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php @@ -5,6 +5,7 @@ namespace Rector\Jack\Tests\ComposerProcessor\RaiseToInstalledComposerProcessor; use Nette\Utils\FileSystem; +use PHPUnit\Framework\Attributes\DataProvider; use Rector\Jack\ComposerProcessor\RaiseToInstalledComposerProcessor; use Rector\Jack\Tests\AbstractTestCase; use Rector\Jack\ValueObject\ChangedPackageVersion; @@ -49,9 +50,43 @@ public function testSkipDev(): void $this->assertEmpty($changedPackageVersionsResult->getChangedPackageVersions()); } - public function testSkipSuggestChange(): void + public static function provideSkipSuggestChangeFiles(): iterable { - $composerJsonContents = FileSystem::read(__DIR__ . '/Fixture/skip-suggest.json'); + yield [ + __DIR__ . '/Fixture/skip-suggest.json', + <<<'JSON' + { + "require-dev": { + "illuminate/container": "^12.19" + }, + "suggest": { + "illuminate/container": "to use container" + } + } + + JSON + ]; + + yield [ + __DIR__ . '/Fixture/skip-suggest-early-definition.json', + <<<'JSON' + { + "suggest": { + "illuminate/container": "to use container" + }, + "require-dev": { + "illuminate/container": "^12.19" + } + } + + JSON + ]; + } + + #[DataProvider('provideSkipSuggestChangeFiles')] + public function testSkipSuggestChange(string $file, string $changedFileContent): void + { + $composerJsonContents = FileSystem::read($file); $changedPackageVersionsResult = $this->raiseToInstalledComposerProcessor->process($composerJsonContents); @@ -61,20 +96,7 @@ public function testSkipSuggestChange(): void $this->assertSame('^9.0', $changedPackageVersion->getOldVersion()); $this->assertSame('^12.19', $changedPackageVersion->getNewVersion()); - $this->assertSame(<<<'JSON' -{ - "require-dev": { - "illuminate/container": "^12.19" - }, - "suggest": { - "illuminate/container": "to use container" - } -} - -JSON - , - $changedPackageVersionsResult->getComposerJsonContents() - ); + $this->assertSame($changedFileContent, $changedPackageVersionsResult->getComposerJsonContents()); } public function testSinglePiped(): void From d535247e43ec882b0e82473a8a9efa7986ad3702 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 27 Jun 2025 20:17:12 +0700 Subject: [PATCH 3/5] space --- .../Fixture/skip-suggest-early-definition.json | 2 +- .../Fixture/skip-suggest.json | 2 +- .../RaiseToInstalledComposerProcessorTest.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json index 43766c4..d4e6286 100644 --- a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest-early-definition.json @@ -1,6 +1,6 @@ { "suggest": { - "illuminate/container": "to use container" + "illuminate/container": "to use container" }, "require-dev": { "illuminate/container": "^9.0" diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json index 620ff67..29e3021 100644 --- a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/Fixture/skip-suggest.json @@ -3,6 +3,6 @@ "illuminate/container": "^9.0" }, "suggest": { - "illuminate/container": "to use container" + "illuminate/container": "to use container" } } diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php index a377be2..1ae29c7 100644 --- a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php @@ -60,7 +60,7 @@ public static function provideSkipSuggestChangeFiles(): iterable "illuminate/container": "^12.19" }, "suggest": { - "illuminate/container": "to use container" + "illuminate/container": "to use container" } } @@ -72,7 +72,7 @@ public static function provideSkipSuggestChangeFiles(): iterable <<<'JSON' { "suggest": { - "illuminate/container": "to use container" + "illuminate/container": "to use container" }, "require-dev": { "illuminate/container": "^12.19" From 4b9810fad28535c9ad84b4e63601d677ecc9a162 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 27 Jun 2025 20:24:06 +0700 Subject: [PATCH 4/5] Fix --- .../ComposerJsonPackageVersionUpdater.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/FileSystem/ComposerJsonPackageVersionUpdater.php b/src/FileSystem/ComposerJsonPackageVersionUpdater.php index 7940a6d..d378b73 100644 --- a/src/FileSystem/ComposerJsonPackageVersionUpdater.php +++ b/src/FileSystem/ComposerJsonPackageVersionUpdater.php @@ -11,12 +11,24 @@ final class ComposerJsonPackageVersionUpdater public static function update(string $composerJsonContents, string $packageName, string $newVersion): string { // replace using regex, to keep original composer.json format - return Strings::replace( + $allChanges = Strings::replace( $composerJsonContents, // find sprintf('#"%s": "(.*?)"#', $packageName), // replace sprintf('"%s": "%s"', $packageName, $newVersion) ); + + $suggestContent = Strings::match($composerJsonContents, '#"suggest"\s*:\s*{[^}]*}#'); + + if ($suggestContent !== null) { + $allChanges = Strings::replace( + $allChanges, + '#"suggest"\s*:\s*{[^}]*}#', + $suggestContent[0] + ); + } + + return $allChanges; } } From 5b014bef02f8718d9f1b52b5f39e1a723eadfdc2 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Fri, 27 Jun 2025 20:25:33 +0700 Subject: [PATCH 5/5] Fix phpstan --- .../RaiseToInstalledComposerProcessorTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php index 1ae29c7..c7c5d32 100644 --- a/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php +++ b/tests/ComposerProcessor/RaiseToInstalledComposerProcessor/RaiseToInstalledComposerProcessorTest.php @@ -50,6 +50,9 @@ public function testSkipDev(): void $this->assertEmpty($changedPackageVersionsResult->getChangedPackageVersions()); } + /** + * @return iterable + */ public static function provideSkipSuggestChangeFiles(): iterable { yield [