|
12 | 12 |
|
13 | 13 | namespace App\Tests\Controller; |
14 | 14 |
|
| 15 | +use App\Audit\AuditRecordType; |
| 16 | +use App\Entity\Package; |
| 17 | +use App\Entity\User; |
15 | 18 | use App\Tests\IntegrationTestCase; |
16 | 19 |
|
17 | 20 | class PackageControllerTest extends IntegrationTestCase |
@@ -52,4 +55,92 @@ public function testEdit(): void |
52 | 55 | self::assertResponseIsSuccessful(); |
53 | 56 | self::assertSame('github.com/composer/composer', $crawler->filter('.canonical')->text()); |
54 | 57 | } |
| 58 | + |
| 59 | + public function testCreateMaintainer(): void |
| 60 | + { |
| 61 | + $owner = self:: createUser( 'owner', '[email protected]'); |
| 62 | + $newMaintainer = self:: createUser( 'maintainer', '[email protected]'); |
| 63 | + $package = self::createPackage('test/pkg', 'https://example.com/test/pkg', maintainers: [$owner]); |
| 64 | + |
| 65 | + $this->store($owner, $newMaintainer, $package); |
| 66 | + |
| 67 | + $this->client->loginUser($owner); |
| 68 | + |
| 69 | + $this->assertFalse($package->isMaintainer($newMaintainer)); |
| 70 | + |
| 71 | + $crawler = $this->client->request('GET', '/packages/test/pkg'); |
| 72 | + |
| 73 | + $form = $crawler->filter('[name="add_maintainer_form"]')->form(); |
| 74 | + $form->setValues([ |
| 75 | + 'add_maintainer_form[user]' => 'maintainer', |
| 76 | + ]); |
| 77 | + |
| 78 | + $this->client->submit($form); |
| 79 | + |
| 80 | + $this->assertEmailCount(1); |
| 81 | + $email = $this->getMailerMessage(); |
| 82 | + $this->assertNotNull($email); |
| 83 | + $this->assertEmailHeaderSame($email, 'To', $newMaintainer->getEmail()); |
| 84 | + |
| 85 | + $this->assertResponseRedirects('/packages/test/pkg'); |
| 86 | + $this->client->followRedirect(); |
| 87 | + $this->assertResponseIsSuccessful(); |
| 88 | + |
| 89 | + $em = self::getEM(); |
| 90 | + $em->clear(); |
| 91 | + |
| 92 | + $maintainer = $em->getRepository(User::class)->find($newMaintainer->getId()); |
| 93 | + $package = $em->getRepository(Package::class)->find($package->getId()); |
| 94 | + |
| 95 | + $this->assertTrue($package->isMaintainer($maintainer)); |
| 96 | + |
| 97 | + $auditRecord = $em->getRepository(\App\Entity\AuditRecord::class)->findOneBy([ |
| 98 | + 'type' => AuditRecordType::MaintainerAdded->value, |
| 99 | + 'packageId' => $package->getId(), |
| 100 | + 'actorId' => $owner->getId(), |
| 101 | + ]); |
| 102 | + $this->assertNotNull($auditRecord); |
| 103 | + } |
| 104 | + |
| 105 | + public function testRemoveMaintainer(): void |
| 106 | + { |
| 107 | + $owner = self:: createUser( 'owner', '[email protected]'); |
| 108 | + $maintainer = self:: createUser( 'maintainer', '[email protected]'); |
| 109 | + $package = self::createPackage('test/pkg', 'https://example.com/test/pkg', maintainers: [$owner, $maintainer]); |
| 110 | + |
| 111 | + $this->store($owner, $maintainer, $package); |
| 112 | + |
| 113 | + $this->client->loginUser($owner); |
| 114 | + |
| 115 | + $this->assertTrue($package->isMaintainer($maintainer)); |
| 116 | + |
| 117 | + $crawler = $this->client->request('GET', '/packages/test/pkg'); |
| 118 | + |
| 119 | + $form = $crawler->filter('[name="remove_maintainer_form"]')->form(); |
| 120 | + $form->setValues([ |
| 121 | + 'remove_maintainer_form[user]' => $maintainer->getId(), |
| 122 | + ]); |
| 123 | + |
| 124 | + $this->client->submit($form); |
| 125 | + |
| 126 | + $this->assertResponseRedirects('/packages/test/pkg'); |
| 127 | + $this->client->followRedirect(); |
| 128 | + $this->assertResponseIsSuccessful(); |
| 129 | + |
| 130 | + $em = self::getEM(); |
| 131 | + $em->clear(); |
| 132 | + |
| 133 | + $maintainer = $em->getRepository(User::class)->find($maintainer->getId()); |
| 134 | + $package = $em->getRepository(Package::class)->find($package->getId()); |
| 135 | + |
| 136 | + $this->assertFalse($package->isMaintainer($maintainer)); |
| 137 | + |
| 138 | + $auditRecord = $em->getRepository(\App\Entity\AuditRecord::class)->findOneBy([ |
| 139 | + 'type' => AuditRecordType::MaintainerRemoved->value, |
| 140 | + 'packageId' => $package->getId(), |
| 141 | + 'actorId' => $owner->getId(), |
| 142 | + ]); |
| 143 | + |
| 144 | + $this->assertNotNull($auditRecord); |
| 145 | + } |
55 | 146 | } |
0 commit comments