Skip to content

Commit b743aca

Browse files
Add missing controller tests for adding and removing maintainer
1 parent e32571b commit b743aca

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

tests/Controller/PackageControllerTest.php

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212

1313
namespace App\Tests\Controller;
1414

15+
use App\Audit\AuditRecordType;
16+
use App\Entity\Package;
17+
use App\Entity\User;
1518
use App\Tests\IntegrationTestCase;
1619

1720
class PackageControllerTest extends IntegrationTestCase
@@ -52,4 +55,93 @@ public function testEdit(): void
5255
self::assertResponseIsSuccessful();
5356
self::assertSame('github.com/composer/composer', $crawler->filter('.canonical')->text());
5457
}
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->enableProfiler(); // This is required in 7.3.4 to assert emails were sent, see https://github.com/symfony/symfony/issues/61873
79+
$this->client->submit($form);
80+
81+
$this->assertEmailCount(1);
82+
$email = $this->getMailerMessage();
83+
$this->assertNotNull($email);
84+
$this->assertEmailHeaderSame($email, 'To', $newMaintainer->getEmail());
85+
86+
$this->assertResponseRedirects('/packages/test/pkg');
87+
$this->client->followRedirect();
88+
$this->assertResponseIsSuccessful();
89+
90+
$em = self::getEM();
91+
$em->clear();
92+
93+
$maintainer = $em->getRepository(User::class)->find($newMaintainer->getId());
94+
$package = $em->getRepository(Package::class)->find($package->getId());
95+
96+
$this->assertTrue($package->isMaintainer($maintainer));
97+
98+
$auditRecord = $em->getRepository(\App\Entity\AuditRecord::class)->findOneBy([
99+
'type' => AuditRecordType::MaintainerAdded->value,
100+
'packageId' => $package->getId(),
101+
'actorId' => $owner->getId(),
102+
]);
103+
$this->assertNotNull($auditRecord);
104+
}
105+
106+
public function testRemoveMaintainer(): void
107+
{
108+
$owner = self::createUser('owner', '[email protected]');
109+
$maintainer = self::createUser('maintainer', '[email protected]');
110+
$package = self::createPackage('test/pkg', 'https://example.com/test/pkg', maintainers: [$owner, $maintainer]);
111+
112+
$this->store($owner, $maintainer, $package);
113+
114+
$this->client->loginUser($owner);
115+
116+
$this->assertTrue($package->isMaintainer($maintainer));
117+
118+
$crawler = $this->client->request('GET', '/packages/test/pkg');
119+
120+
$form = $crawler->filter('[name="remove_maintainer_form"]')->form();
121+
$form->setValues([
122+
'remove_maintainer_form[user]' => $maintainer->getId(),
123+
]);
124+
125+
$this->client->submit($form);
126+
127+
$this->assertResponseRedirects('/packages/test/pkg');
128+
$this->client->followRedirect();
129+
$this->assertResponseIsSuccessful();
130+
131+
$em = self::getEM();
132+
$em->clear();
133+
134+
$maintainer = $em->getRepository(User::class)->find($maintainer->getId());
135+
$package = $em->getRepository(Package::class)->find($package->getId());
136+
137+
$this->assertFalse($package->isMaintainer($maintainer));
138+
139+
$auditRecord = $em->getRepository(\App\Entity\AuditRecord::class)->findOneBy([
140+
'type' => AuditRecordType::MaintainerRemoved->value,
141+
'packageId' => $package->getId(),
142+
'actorId' => $owner->getId(),
143+
]);
144+
145+
$this->assertNotNull($auditRecord);
146+
}
55147
}

0 commit comments

Comments
 (0)