|
15 | 15 | use App\Entity\Package; |
16 | 16 | use App\Entity\PackageFreezeReason; |
17 | 17 | use App\Entity\PackageRepository; |
| 18 | +use App\Entity\Vendor; |
18 | 19 | use App\Tests\IntegrationTestCase; |
19 | 20 |
|
20 | 21 | class PackageRepositoryTest extends IntegrationTestCase |
@@ -197,4 +198,33 @@ public function testGetFilteredQueryBuilderExcludesSuppressedByDefault(): void |
197 | 198 | self::assertContains('vendor/spam', $withFrozen); |
198 | 199 | self::assertContains('vendor/malware', $withFrozen); |
199 | 200 | } |
| 201 | + |
| 202 | + public function testGetPackageIdsFlaggableByViewsKeepsOnlyPackagesTheHeuristicCanStillReach(): void |
| 203 | + { |
| 204 | + $live = self::createPackage('vendor/live', 'https://example.org/live'); |
| 205 | + $suspect = self::createPackage('vendor/suspect', 'https://example.org/suspect'); |
| 206 | + $suspect->setSuspect('Too many views'); |
| 207 | + $old = self::createPackage('vendor/old', 'https://example.org/old'); |
| 208 | + $old->setCreatedAt(new \DateTimeImmutable('2018-01-01')); |
| 209 | + $spam = self::createPackage('vendor/spam', 'https://example.org/spam'); |
| 210 | + $spam->freeze(PackageFreezeReason::Spam); |
| 211 | + $temporary = self::createPackage('vendor/temporary', 'https://example.org/temporary'); |
| 212 | + $temporary->freeze(PackageFreezeReason::Temporary); |
| 213 | + $verified = self::createPackage('verifiedvendor/pkg', 'https://example.org/verifiedvendor/pkg'); |
| 214 | + $vendor = new Vendor('verifiedvendor'); |
| 215 | + $vendor->setVerified(true); |
| 216 | + $this->store($live, $suspect, $old, $spam, $temporary, $verified, $vendor); |
| 217 | + |
| 218 | + $ids = $this->packageRepository->getPackageIdsFlaggableByViews([ |
| 219 | + $live->getId(), $suspect->getId(), $old->getId(), $spam->getId(), $temporary->getId(), $verified->getId(), 999999999, |
| 220 | + ]); |
| 221 | + |
| 222 | + self::assertContains($live->getId(), $ids); |
| 223 | + self::assertContains($temporary->getId(), $ids, 'a gentle freeze keeps serving the page, so views still come in'); |
| 224 | + self::assertNotContains($suspect->getId(), $ids); |
| 225 | + self::assertNotContains($old->getId(), $ids); |
| 226 | + self::assertNotContains($spam->getId(), $ids, 'a suppressing freeze 404s the page, so no more views can arrive'); |
| 227 | + self::assertNotContains($verified->getId(), $ids, 'a verified vendor can never be flagged again'); |
| 228 | + self::assertNotContains(999999999, $ids, 'a deleted package cannot be flagged either'); |
| 229 | + } |
200 | 230 | } |
0 commit comments