|
4 | 4 |
|
5 | 5 | use App\Entity\Problem; |
6 | 6 | use App\Entity\Testcase; |
| 7 | +use App\Entity\Contest; |
7 | 8 | use App\Tests\Unit\BaseTestCase; |
8 | 9 | use Doctrine\ORM\EntityManagerInterface; |
9 | 10 | use Generator; |
@@ -183,4 +184,40 @@ public function testInteractiveSamples(): void |
183 | 184 | $response = $this->client->getResponse(); |
184 | 185 | self::assertEquals(404, $response->getStatusCode()); |
185 | 186 | } |
| 187 | + |
| 188 | + /** |
| 189 | + * Test that the problems page does not show page, statement, sample data before contest start. |
| 190 | + */ |
| 191 | + public function testAccessProblemBeforeContestStarts(): void |
| 192 | + { |
| 193 | + /** @var EntityManagerInterface $em */ |
| 194 | + $em = self::getContainer()->get(EntityManagerInterface::class); |
| 195 | + |
| 196 | + $contest = $em->getRepository(Contest::class)->findOneBy(['shortname' => 'demo']); |
| 197 | + $originalStartTime = $contest->getStarttimeString(); |
| 198 | + |
| 199 | + $lastSpacePosition = strrpos($originalStartTime, ' '); |
| 200 | + $datetime = substr($originalStartTime, 0, $lastSpacePosition); |
| 201 | + $timezone = substr($originalStartTime, $lastSpacePosition + 1); |
| 202 | + |
| 203 | + $date = new \DateTime($datetime, new \DateTimeZone($timezone)); |
| 204 | + $date->modify('+1 hour'); |
| 205 | + $newTimeString = $date->format('Y-m-d H:i:s') . ' ' . $timezone; |
| 206 | + $contest->setStarttimeString($newTimeString)->updateTimes(); |
| 207 | + |
| 208 | + $this->withChangedConfiguration('public_access_before_contest', true, function () { |
| 209 | + $this->client->request('GET', '/public/problems'); |
| 210 | + static::assertSelectorTextContains('.nav-item .nav-link.disabled', 'Problems'); |
| 211 | + static::assertSelectorTextContains('.alert.alert-secondary', 'No problem texts available at this point.'); |
| 212 | + |
| 213 | + $this->client->request('GET', '/team/problems/2/statement'); |
| 214 | + $statusCode = $this->client->getResponse()->getStatusCode(); |
| 215 | + static::assertSame(404, $statusCode, 'Expected status code 404, got ' . $statusCode); |
| 216 | + |
| 217 | + $this->client->request('GET', '/team/problems/2/samples.zip'); |
| 218 | + $statusCode = $this->client->getResponse()->getStatusCode(); |
| 219 | + static::assertSame(404, $statusCode, 'Expected status code 404, got ' . $statusCode); |
| 220 | + }); |
| 221 | + $contest->setStarttimeString($originalStartTime)->updateTimes(); |
| 222 | + } |
186 | 223 | } |
0 commit comments