From aee704d400b8b11c20e5b6e873a208d4a4762eb0 Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 10:15:33 +0200 Subject: [PATCH 1/8] feat: Improve code quality with automatic type declarations via Rector --- CHANGELOG.md | 6 ++++ composer.json | 2 ++ rector.php | 32 +++++++++---------- src/IlluminaSampleSheet/V1/DataSection.php | 4 +-- .../V2/BclConvert/DataSection.php | 10 ++++-- .../V2/BclConvert/OverrideCycles.php | 2 +- src/Microplate/AbstractMicroplate.php | 2 -- src/Microplate/Coordinates.php | 2 +- src/Tecan/Rack/BaseRack.php | 4 ++- tests/Microplate/MicroplateTest.php | 4 +-- 10 files changed, 40 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e25f7..3d9d6ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,12 @@ See [GitHub releases](https://github.com/mll-lab/php-utils/releases). ## Unreleased +## v5.6.0 + +### Added + +- Improve code quality with automatic type declarations via Rector + ## v5.5.1 ### Fixed diff --git a/composer.json b/composer.json index b7081a4..4bdcfa7 100644 --- a/composer.json +++ b/composer.json @@ -26,8 +26,10 @@ "require-dev": { "ergebnis/composer-normalize": "^2", "jangregor/phpstan-prophecy": "^1", + "larastan/larastan": "^2.9", "mll-lab/graphql-php-scalars": "^6.3", "mll-lab/php-cs-fixer-config": "^5", + "orchestra/testbench": "^9.5", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^1", "phpstan/phpstan-deprecation-rules": "^1", diff --git a/rector.php b/rector.php index 5444e6d..b8944ff 100644 --- a/rector.php +++ b/rector.php @@ -2,25 +2,25 @@ use Rector\CodeQuality\Rector\Concat\JoinStringConcatRector; use Rector\Config\RectorConfig; -use Rector\PHPUnit\Rector\Class_\PreferPHPUnitSelfCallRector; +use Rector\PHPUnit\CodeQuality\Rector\Class_\PreferPHPUnitSelfCallRector; use Rector\Set\ValueObject\SetList; -return static function (RectorConfig $rectorConfig): void { - $rectorConfig->sets([ - SetList::PHP_71, - SetList::PHP_72, - SetList::PHP_73, - SetList::PHP_74, +return RectorConfig::configure() + ->withSets([ SetList::CODE_QUALITY, - ]); - $rectorConfig->skip([ + SetList::TYPE_DECLARATION, + SetList::RECTOR_PRESET, + ]) + ->withPhpSets() + ->withRules([PreferPHPUnitSelfCallRector::class]) + ->withSkip([ JoinStringConcatRector::class => [ __DIR__ . '/tests/CSVArrayTest.php', // keep `\r\n` for readability ], - ]); - - $rectorConfig->rule(PreferPHPUnitSelfCallRector::class); - - $rectorConfig->paths([__DIR__ . '/src', __DIR__ . '/tests']); - $rectorConfig->phpstanConfig(__DIR__ . '/phpstan.neon'); -}; + ]) + ->withPaths([__DIR__ . '/src', __DIR__ . '/tests']) + ->withBootstrapFiles([ + // Rector uses PHPStan internally, which in turn requires Larastan to be set up correctly + __DIR__ . '/vendor/larastan/larastan/bootstrap.php', + ]) + ->withPHPStanConfigs([__DIR__ . '/phpstan.neon']); diff --git a/src/IlluminaSampleSheet/V1/DataSection.php b/src/IlluminaSampleSheet/V1/DataSection.php index b2101ef..88d5adc 100644 --- a/src/IlluminaSampleSheet/V1/DataSection.php +++ b/src/IlluminaSampleSheet/V1/DataSection.php @@ -53,10 +53,10 @@ public function convertSectionToString(): string protected function validateDuplicatedSampleIDs(): void { $groups = $this->rows - ->groupBy(fn (Row $row) => $row->sampleID); + ->groupBy(fn (Row $row): string => $row->sampleID); $duplicates = $groups - ->filter(fn ($group) => count($group) > 1) + ->filter(fn ($group): bool => count($group) > 1) ->keys(); $duplicateIDsAsString = $duplicates->implode(', '); diff --git a/src/IlluminaSampleSheet/V2/BclConvert/DataSection.php b/src/IlluminaSampleSheet/V2/BclConvert/DataSection.php index 4c371c4..db3fc4f 100644 --- a/src/IlluminaSampleSheet/V2/BclConvert/DataSection.php +++ b/src/IlluminaSampleSheet/V2/BclConvert/DataSection.php @@ -26,8 +26,12 @@ public function convertSectionToString(): string { $this->assertNotEmpty(); + $object = $this->dataRows[0]; + if (! is_object($object)) { + throw new IlluminaSampleSheetException('Trying to convert empty data section to string.'); + } /** @var array $samplePropertiesOfFirstSample */ - $samplePropertiesOfFirstSample = array_keys(get_object_vars($this->dataRows[0])); + $samplePropertiesOfFirstSample = array_keys(get_object_vars($object)); foreach ($this->dataRows as $sample) { $actualProperties = array_keys(get_object_vars($sample)); if ($samplePropertiesOfFirstSample !== $actualProperties) { @@ -52,10 +56,10 @@ public function convertSectionToString(): string /** @param array $samplePropertiesOfFirstSample */ protected function generateDataHeaderByProperties(array $samplePropertiesOfFirstSample): string { - $samplePropertiesOfFirstSample = array_filter($samplePropertiesOfFirstSample, fn (string $value) // @phpstan-ignore-next-line Variable property access on a non-object required here + $samplePropertiesOfFirstSample = array_filter($samplePropertiesOfFirstSample, fn (string $value): bool // @phpstan-ignore-next-line Variable property access on a non-object required here => $this->dataRows[0]->$value !== null); - $samplePropertiesOfFirstSample = array_map(fn (string $value) => ucfirst($value), $samplePropertiesOfFirstSample); + $samplePropertiesOfFirstSample = array_map(fn (string $value): string => ucfirst($value), $samplePropertiesOfFirstSample); return implode(',', $samplePropertiesOfFirstSample); } diff --git a/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php b/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php index 2130f67..39896eb 100644 --- a/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php +++ b/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php @@ -53,7 +53,7 @@ public function makeOverrideCycle(string $cycleString): OverrideCycle return new OverrideCycle( array_map( - fn (array $match) => new CycleTypeWithCount(new CycleType($match[1]), (int) $match[2]), + fn (array $match): \MLL\Utils\IlluminaSampleSheet\V2\BclConvert\CycleTypeWithCount => new CycleTypeWithCount(new CycleType($match[1]), (int) $match[2]), $matches ) ); diff --git a/src/Microplate/AbstractMicroplate.php b/src/Microplate/AbstractMicroplate.php index 323870a..eeff865 100644 --- a/src/Microplate/AbstractMicroplate.php +++ b/src/Microplate/AbstractMicroplate.php @@ -70,7 +70,6 @@ function ($content, string $key) use ($flowDirection): string { /** @return Collection */ public function freeWells(): Collection { - // @phpstan-ignore-next-line Only recognized to be correct with larastan return $this->wells()->filter( /** @param TWell $content */ static fn ($content): bool => $content === self::EMPTY_WELL @@ -80,7 +79,6 @@ public function freeWells(): Collection /** @return Collection */ public function filledWells(): Collection { - // @phpstan-ignore-next-line Only recognized to be correct with larastan return $this->wells()->filter( /** @param TWell $content */ static fn ($content): bool => $content !== self::EMPTY_WELL diff --git a/src/Microplate/Coordinates.php b/src/Microplate/Coordinates.php index c6f3ddd..4a0b6a1 100644 --- a/src/Microplate/Coordinates.php +++ b/src/Microplate/Coordinates.php @@ -52,7 +52,7 @@ public function __construct(string $row, int $column, CoordinateSystem $coordina * * @return static */ - public static function fromArray(array $coordinates, CoordinateSystem $coordinateSystem) + public static function fromArray(array $coordinates, CoordinateSystem $coordinateSystem): self { return new self($coordinates['row'], $coordinates['column'], $coordinateSystem); } diff --git a/src/Tecan/Rack/BaseRack.php b/src/Tecan/Rack/BaseRack.php index 686babf..7bd94c2 100644 --- a/src/Tecan/Rack/BaseRack.php +++ b/src/Tecan/Rack/BaseRack.php @@ -18,8 +18,10 @@ abstract class BaseRack implements Rack public function __construct(CoordinateSystem $coordinateSystem) { $this->coordinateSystem = $coordinateSystem; - $this->positions = Collection::times($this->positionCount(), fn () => self::EMPTY_POSITION) + /** @var Collection $positions */ + $positions = Collection::times($this->positionCount(), fn () => self::EMPTY_POSITION) ->mapWithKeys(fn ($content, int $position): array => [$position + 1 => $content]); + $this->positions = $positions; } public function id(): ?string diff --git a/tests/Microplate/MicroplateTest.php b/tests/Microplate/MicroplateTest.php index addbb7c..e00c7f3 100644 --- a/tests/Microplate/MicroplateTest.php +++ b/tests/Microplate/MicroplateTest.php @@ -145,7 +145,7 @@ private function preparePlate(): Microplate foreach ($data12x8 as $well) { $microplateCoordinates = Coordinates::fromArray($well, new CoordinateSystem12x8()); - $randomNumber = rand(1, 100); + $randomNumber = random_int(1, 100); $randomNumberOrNull = $randomNumber > 50 ? $randomNumber : null; $microplate->addWell($microplateCoordinates, $randomNumberOrNull); @@ -200,7 +200,7 @@ public function testThrowsPlateFullException(): void $microplateCoordinates = Coordinates::fromArray($wellData, $coordinateSystem); // check that it does not throw before the plate is full self::assertEquals($microplateCoordinates, $microplate->nextFreeWellCoordinates(FlowDirection::ROW())); - $microplate->addWell($microplateCoordinates, rand(1, 100)); + $microplate->addWell($microplateCoordinates, random_int(1, 100)); } $this->expectException(MicroplateIsFullException::class); From 23973d8b88b0e7a648ef992305efa4126e4b6d30 Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 10:22:58 +0200 Subject: [PATCH 2/8] feat: Improve code quality with automatic rector rules for PHPUnit --- CHANGELOG.md | 1 + rector.php | 12 +++++++++++ .../V2/BclConvert/OverrideCycles.php | 2 +- tests/DnaSequenceTest.php | 12 +++++------ .../IlluminaSampleSheet/V1/DualIndexTest.php | 20 +++++++++---------- tests/Microplate/MicroplateTest.php | 4 ++-- tests/Tecan/Rack/RackTest.php | 8 ++++---- 7 files changed, 35 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d9d6ee..d5dba96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ See [GitHub releases](https://github.com/mll-lab/php-utils/releases). ### Added - Improve code quality with automatic type declarations via Rector +- Improve code quality with automatic rector rules for PHPUnit ## v5.5.1 diff --git a/rector.php b/rector.php index b8944ff..293613c 100644 --- a/rector.php +++ b/rector.php @@ -3,6 +3,8 @@ use Rector\CodeQuality\Rector\Concat\JoinStringConcatRector; use Rector\Config\RectorConfig; use Rector\PHPUnit\CodeQuality\Rector\Class_\PreferPHPUnitSelfCallRector; +use Rector\PHPUnit\CodeQuality\Rector\Class_\PreferPHPUnitThisCallRector; +use Rector\PHPUnit\Set\PHPUnitSetList; use Rector\Set\ValueObject\SetList; return RectorConfig::configure() @@ -10,10 +12,20 @@ SetList::CODE_QUALITY, SetList::TYPE_DECLARATION, SetList::RECTOR_PRESET, + PHPUnitSetList::PHPUNIT_40, + PHPUnitSetList::PHPUNIT_50, + PHPUnitSetList::PHPUNIT_60, + PHPUnitSetList::PHPUNIT_70, + PHPUnitSetList::PHPUNIT_80, + PHPUnitSetList::PHPUNIT_90, + PHPUnitSetList::PHPUNIT_100, + PHPUnitSetList::PHPUNIT_110, + PHPUnitSetList::PHPUNIT_CODE_QUALITY, ]) ->withPhpSets() ->withRules([PreferPHPUnitSelfCallRector::class]) ->withSkip([ + PreferPHPUnitThisCallRector::class, // breaks tests JoinStringConcatRector::class => [ __DIR__ . '/tests/CSVArrayTest.php', // keep `\r\n` for readability ], diff --git a/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php b/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php index 39896eb..cc03a37 100644 --- a/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php +++ b/src/IlluminaSampleSheet/V2/BclConvert/OverrideCycles.php @@ -53,7 +53,7 @@ public function makeOverrideCycle(string $cycleString): OverrideCycle return new OverrideCycle( array_map( - fn (array $match): \MLL\Utils\IlluminaSampleSheet\V2\BclConvert\CycleTypeWithCount => new CycleTypeWithCount(new CycleType($match[1]), (int) $match[2]), + fn (array $match): CycleTypeWithCount => new CycleTypeWithCount(new CycleType($match[1]), (int) $match[2]), $matches ) ); diff --git a/tests/DnaSequenceTest.php b/tests/DnaSequenceTest.php index ec09a52..23535db 100644 --- a/tests/DnaSequenceTest.php +++ b/tests/DnaSequenceTest.php @@ -10,19 +10,19 @@ final class DnaSequenceTest extends TestCase public function testReverse(): void { $dnaSequence = new DnaSequence('ATGC'); - self::assertEquals('CGTA', $dnaSequence->reverse()); + self::assertSame('CGTA', $dnaSequence->reverse()); } public function testComplement(): void { $dnaSequence = new DnaSequence('ATGC'); - self::assertEquals('TACG', $dnaSequence->complement()); + self::assertSame('TACG', $dnaSequence->complement()); } public function testReverseComplement(): void { $dnaSequence = new DnaSequence('ATGC'); - self::assertEquals('GCAT', $dnaSequence->reverseComplement()); + self::assertSame('GCAT', $dnaSequence->reverseComplement()); } public function testInvalidSequenceThrowsException(): void @@ -34,8 +34,8 @@ public function testInvalidSequenceThrowsException(): void public function testEmptySequence(): void { $dnaSequence = new DnaSequence(''); - self::assertEquals('', $dnaSequence->reverse()); - self::assertEquals('', $dnaSequence->complement()); - self::assertEquals('', $dnaSequence->reverseComplement()); + self::assertSame('', $dnaSequence->reverse()); + self::assertSame('', $dnaSequence->complement()); + self::assertSame('', $dnaSequence->reverseComplement()); } } diff --git a/tests/IlluminaSampleSheet/V1/DualIndexTest.php b/tests/IlluminaSampleSheet/V1/DualIndexTest.php index b91ef23..cf9cbfe 100644 --- a/tests/IlluminaSampleSheet/V1/DualIndexTest.php +++ b/tests/IlluminaSampleSheet/V1/DualIndexTest.php @@ -33,17 +33,15 @@ public function testValidate( new DualIndex($i7IndexID, $index, $i5IndexID, $index2); } - /** @return array> */ - public static function provideValidDualIndexes(): array + /** @return iterable> */ + public static function provideValidDualIndexes(): iterable { - return [ - 'Both indices valid long' => ['someIndexID', 'ATCGNGTANGT', 'someOtherIndexID', 'ATGNAAATTTTAC', true], - 'Both indices valid short' => ['someIndexID', 'A', 'someOtherIndexID', 'G', true], - 'Both indices invalid' => ['i7IndexID', 'invalidValue', 'i5IndexID', 'invalidValue2', false, 'invalidValue'], - 'First index invalid' => ['i7IndexID', 'invalidValue', 'i5IndexID', 'ATCGNGT', false, 'invalidValue'], - 'Second index invalid' => ['i7IndexID', 'ATCGNGT', 'i5IndexID', 'invalidValue2', false, 'invalidValue2'], - 'First index empty' => ['someIndexID', '', 'someOtherIndexID', 'ATGNAAAC', false, ''], - 'Second index empty' => ['someIndexID', 'ATCGNGT', 'someOtherIndexID', '', false, ''], - ]; + yield 'Both indices valid long' => ['someIndexID', 'ATCGNGTANGT', 'someOtherIndexID', 'ATGNAAATTTTAC', true]; + yield 'Both indices valid short' => ['someIndexID', 'A', 'someOtherIndexID', 'G', true]; + yield 'Both indices invalid' => ['i7IndexID', 'invalidValue', 'i5IndexID', 'invalidValue2', false, 'invalidValue']; + yield 'First index invalid' => ['i7IndexID', 'invalidValue', 'i5IndexID', 'ATCGNGT', false, 'invalidValue']; + yield 'Second index invalid' => ['i7IndexID', 'ATCGNGT', 'i5IndexID', 'invalidValue2', false, 'invalidValue2']; + yield 'First index empty' => ['someIndexID', '', 'someOtherIndexID', 'ATGNAAAC', false, '']; + yield 'Second index empty' => ['someIndexID', 'ATCGNGT', 'someOtherIndexID', '', false, '']; } } diff --git a/tests/Microplate/MicroplateTest.php b/tests/Microplate/MicroplateTest.php index e00c7f3..1bbe323 100644 --- a/tests/Microplate/MicroplateTest.php +++ b/tests/Microplate/MicroplateTest.php @@ -29,8 +29,8 @@ public function testCanAddAndRetrieveWellBasedOnCoordinateSystem(): void $wellContent2 = 'bar'; $microplate->addWell($microplateCoordinate2, $wellContent2); - self::assertEquals($wellContent1, $microplate->well($microplateCoordinate1)); - self::assertEquals($wellContent2, $microplate->well($microplateCoordinate2)); + self::assertSame($wellContent1, $microplate->well($microplateCoordinate1)); + self::assertSame($wellContent2, $microplate->well($microplateCoordinate2)); $coordinateWithOtherCoordinateSystem = new Coordinates('B', 2, new CoordinateSystem4x3()); // @phpstan-ignore-next-line expecting a type error due to mismatching coordinates diff --git a/tests/Tecan/Rack/RackTest.php b/tests/Tecan/Rack/RackTest.php index f1e1d77..26025e5 100644 --- a/tests/Tecan/Rack/RackTest.php +++ b/tests/Tecan/Rack/RackTest.php @@ -25,8 +25,8 @@ public function testAssignsFirstEmptyPosition(): void self::assertSame(32, $rack->positionCount()); $position = $rack->assignFirstEmptyPosition('Sample'); - self::assertEquals(1, $position); - self::assertEquals('Sample', $rack->positions[1]); + self::assertSame(1, $position); + self::assertSame('Sample', $rack->positions[1]); } public function testAssignsLastEmptyPosition(): void @@ -36,8 +36,8 @@ public function testAssignsLastEmptyPosition(): void self::assertSame($lastPosition, $rack->positionCount()); $position = $rack->assignLastEmptyPosition('Sample'); - self::assertEquals($lastPosition, $position); - self::assertEquals('Sample', $rack->positions[$lastPosition]); + self::assertSame($lastPosition, $position); + self::assertSame('Sample', $rack->positions[$lastPosition]); } public function testThrowsExceptionWhenNoEmptyPosition(): void From e417123731a943a50091fd0d232e6757839c6427 Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 11:31:54 +0200 Subject: [PATCH 3/8] larastan/larastan versions --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 4bdcfa7..6199053 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "require-dev": { "ergebnis/composer-normalize": "^2", "jangregor/phpstan-prophecy": "^1", - "larastan/larastan": "^2.9", + "larastan/larastan": "^1 || ^2", "mll-lab/graphql-php-scalars": "^6.3", "mll-lab/php-cs-fixer-config": "^5", "orchestra/testbench": "^9.5", From bea266526020487304c526023a1b5c92e3e9b342 Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 11:34:41 +0200 Subject: [PATCH 4/8] orchestra/testbench versions --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 6199053..a0b152a 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "larastan/larastan": "^1 || ^2", "mll-lab/graphql-php-scalars": "^6.3", "mll-lab/php-cs-fixer-config": "^5", - "orchestra/testbench": "^9.5", + "orchestra/testbench": "^9", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^1", "phpstan/phpstan-deprecation-rules": "^1", From a6e8efb10064eb5dc3cead470da2de6060f302e6 Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 11:41:40 +0200 Subject: [PATCH 5/8] orchestra/testbench versions --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index a0b152a..dcaa2f3 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "larastan/larastan": "^1 || ^2", "mll-lab/graphql-php-scalars": "^6.3", "mll-lab/php-cs-fixer-config": "^5", - "orchestra/testbench": "^9", + "orchestra/testbench": "^8 || ^9", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^1", "phpstan/phpstan-deprecation-rules": "^1", From 9b3b464b81fe8fc1f154cb35caa325e1065d6db7 Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 11:44:10 +0200 Subject: [PATCH 6/8] phpstan-ignore-next-linE --- src/Tecan/Rack/BaseRack.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Tecan/Rack/BaseRack.php b/src/Tecan/Rack/BaseRack.php index 7bd94c2..52b5032 100644 --- a/src/Tecan/Rack/BaseRack.php +++ b/src/Tecan/Rack/BaseRack.php @@ -18,10 +18,9 @@ abstract class BaseRack implements Rack public function __construct(CoordinateSystem $coordinateSystem) { $this->coordinateSystem = $coordinateSystem; - /** @var Collection $positions */ - $positions = Collection::times($this->positionCount(), fn () => self::EMPTY_POSITION) + /** @phpstan-ignore-next-line types are correct, but phpstan doesn't understand it */ + $this->positions = Collection::times($this->positionCount(), fn () => self::EMPTY_POSITION) ->mapWithKeys(fn ($content, int $position): array => [$position + 1 => $content]); - $this->positions = $positions; } public function id(): ?string From 90be8cf4ba972cebd292f45b8151002f01c97b68 Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 11:47:48 +0200 Subject: [PATCH 7/8] testbench versions --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index dcaa2f3..209b98d 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "larastan/larastan": "^1 || ^2", "mll-lab/graphql-php-scalars": "^6.3", "mll-lab/php-cs-fixer-config": "^5", - "orchestra/testbench": "^8 || ^9", + "orchestra/testbench": "^7 || ^8 || ^9", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^1", "phpstan/phpstan-deprecation-rules": "^1", From 2e926c2be9f1deb62afd8d238151a793b26c25fb Mon Sep 17 00:00:00 2001 From: Simon Bigelmayr Date: Mon, 21 Oct 2024 11:50:24 +0200 Subject: [PATCH 8/8] testbench versions --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 209b98d..21e7fac 100644 --- a/composer.json +++ b/composer.json @@ -29,7 +29,7 @@ "larastan/larastan": "^1 || ^2", "mll-lab/graphql-php-scalars": "^6.3", "mll-lab/php-cs-fixer-config": "^5", - "orchestra/testbench": "^7 || ^8 || ^9", + "orchestra/testbench": "^6 || ^7 || ^8 || ^9", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^1", "phpstan/phpstan-deprecation-rules": "^1",