|
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; |
| 10 | +use App\DataFixtures\Test\DemoAboutToStartContestFixture; |
9 | 11 | use Generator; |
10 | 12 |
|
11 | 13 | class ProblemControllerTest extends BaseTestCase |
@@ -183,4 +185,32 @@ public function testInteractiveSamples(): void |
183 | 185 | $response = $this->client->getResponse(); |
184 | 186 | self::assertEquals(404, $response->getStatusCode()); |
185 | 187 | } |
| 188 | + |
| 189 | + /** |
| 190 | + * Test that the problems page does not show page, statement, sample data before contest start. |
| 191 | + */ |
| 192 | + public function testAccessProblemBeforeContestStarts(): void |
| 193 | + { |
| 194 | + $this->loadFixtures([DemoAboutToStartContestFixture::class]); |
| 195 | + |
| 196 | + $this->withChangedConfiguration('public_access_before_contest', true, function () { |
| 197 | + $this->client->request('GET', '/public/problems'); |
| 198 | + static::assertSelectorTextContains('.nav-item .nav-link.disabled', 'Problems'); |
| 199 | + static::assertSelectorTextContains('.alert.alert-secondary', 'No problem texts available at this point.'); |
| 200 | + |
| 201 | + for ($i = 1; $i <= 3; $i++) { |
| 202 | + $endpoints = [ |
| 203 | + "/team/problems/{$i}", |
| 204 | + "/team/problems/{$i}/statement", |
| 205 | + "/team/problems/{$i}/samples.zip" |
| 206 | + ]; |
| 207 | + |
| 208 | + foreach ($endpoints as $endpoint) { |
| 209 | + $this->client->request('GET', $endpoint); |
| 210 | + $statusCode = $this->client->getResponse()->getStatusCode(); |
| 211 | + static::assertSame(404, $statusCode, "Expected status code 404, got {$statusCode} for {$endpoint}"); |
| 212 | + } |
| 213 | + } |
| 214 | + }); |
| 215 | + } |
186 | 216 | } |
0 commit comments