From 261c7b1e4656911c9361d0378348e8ee0e238486 Mon Sep 17 00:00:00 2001 From: Steven Rombauts Date: Wed, 12 Nov 2025 21:48:14 +0100 Subject: [PATCH] Add missing test for skipping identical maintainers when transferring package --- .../Command/TransferOwnershipCommandTest.php | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/tests/Command/TransferOwnershipCommandTest.php b/tests/Command/TransferOwnershipCommandTest.php index 6555c7618..ef167fc6d 100644 --- a/tests/Command/TransferOwnershipCommandTest.php +++ b/tests/Command/TransferOwnershipCommandTest.php @@ -124,7 +124,33 @@ public function testExecuteWithDryRunDoesNothing(): void $callable = fn (User $user) => $user->getUsernameCanonical(); $this->assertEqualsCanonicalizing(['john', 'alice'], array_map($callable, $package1->getMaintainers()->toArray())); - $this->assertEqualsCanonicalizing(['john', 'bob'], array_map($callable, $package2->getMaintainers()->toArray())); + } + + public function testExecuteIgnoresIdenticalMaintainers(): void + { + $this->commandTester->execute([ + 'vendorOrPackage' => 'vendor1', + 'maintainers' => ['alice', 'john'], + ]); + + $this->commandTester->assertCommandIsSuccessful(); + + $em = self::getEM(); + $em->clear(); + + $package1 = $em->find(Package::class, $this->package1->getId()); + $package2 = $em->find(Package::class, $this->package2->getId()); + + $this->assertNotNull($package1); + $this->assertNotNull($package2); + + $callable = fn (User $user) => $user->getUsernameCanonical(); + $this->assertEqualsCanonicalizing(['alice', 'john'], array_map($callable, $package1->getMaintainers()->toArray())); + $this->assertEqualsCanonicalizing(['alice', 'john'], array_map($callable, $package2->getMaintainers()->toArray())); + + $record = $this->retrieveAuditRecordForPackage($package1); + $this->assertNull($record, 'No audit log should be created if package maintainers are identical'); + $this->assertAuditLogWasCreated($package2, ['john', 'bob'], ['alice', 'john']); } public function testExecuteFailsWithUnknownMaintainers(): void @@ -159,12 +185,7 @@ public function testExecuteFailsIfNoVendorPackagesFound(): void */ private function assertAuditLogWasCreated(Package $package, array $oldMaintainers, array $newMaintainers): void { - $record = $this->getEM()->getRepository(AuditRecord::class)->findOneBy([ - 'type' => AuditRecordType::PackageTransferred->value, - 'packageId' => $package->getId(), - 'actorId' => null, - ]); - + $record = $this->retrieveAuditRecordForPackage($package); $this->assertNotNull($record); $this->assertSame('admin', $record->attributes['actor']); $this->assertSame($package->getId(), $record->packageId); @@ -173,4 +194,13 @@ private function assertAuditLogWasCreated(Package $package, array $oldMaintainer $this->assertEqualsCanonicalizing($oldMaintainers, array_map($callable, $record->attributes['previous_maintainers'])); $this->assertEqualsCanonicalizing($newMaintainers, array_map($callable, $record->attributes['current_maintainers'])); } + + private function retrieveAuditRecordForPackage(Package $package): ?AuditRecord + { + return $this->getEM()->getRepository(AuditRecord::class)->findOneBy([ + 'type' => AuditRecordType::PackageTransferred->value, + 'packageId' => $package->getId(), + 'actorId' => null, + ]); + } }