Skip to content

Commit d20ef9d

Browse files
Add missing controller tests for adding and removing maintainer
1 parent 7b54466 commit d20ef9d

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

tests/Controller/PackageControllerTest.php

Lines changed: 91 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,92 @@ 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->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+
}
55146
}

0 commit comments

Comments
 (0)