# Instructions

- Following Playwright test failed.
- Explain why, be concise, respect Playwright best practices.
- Provide a snippet of code with the fix, if possible.

# Test info

- Name: tests/ui/sitemap.spec.ts >> sitemap URL validation >> elections sitemap - sample URLs resolve
- Location: tests/ui/sitemap.spec.ts:337:7

# Error details

```
Error: Errors: Expected 200 for /elections/2006/, got 503, Expected 200 for /elections/1984/, got 503, Expected 200 for /elections/2014/, got 503, Expected 200 for /elections/1996/, got 503, Expected 200 for /elections/1988/, got 503

expect(received).toHaveLength(expected)

Expected length: 0
Received length: 5
Received array:  ["Expected 200 for /elections/2006/, got 503", "Expected 200 for /elections/1984/, got 503", "Expected 200 for /elections/2014/, got 503", "Expected 200 for /elections/1996/, got 503", "Expected 200 for /elections/1988/, got 503"]
```

# Page snapshot

```yaml
- generic [active] [ref=f5e1]:
  - heading "503 Service Temporarily Unavailable" [level=1] [ref=f5e3]
  - separator [ref=f5e4]
  - generic [ref=f5e5]: nginx/1.31.7
```

# Test source

```ts
  250 |     console.log(`Tested ${result.tested} URLs from candidates sitemap`);
  251 |     expect(result.errors, `Errors: ${result.errors.join(', ')}`).toHaveLength(0);
  252 |   });
  253 | 
  254 |   test('committees sitemap - sample URLs resolve', async ({ page }) => {
  255 |     test.setTimeout(120000);
  256 | 
  257 |     // Navigate to a simple page first so we have a page context for fetch
  258 |     await page.goto('/');
  259 |     const baseUrl = new URL(page.url()).origin;
  260 | 
  261 |     const result = await testSitemapUrls(page, baseUrl, '/committees/sitemap-committees.xml');
  262 | 
  263 |     if (result.tested === 0 && !STRICT) {
  264 |       test.skip();
  265 |       return;
  266 |     }
  267 |     expect(result.tested, `sitemap sampled no URLs; errors: ${result.errors.join(', ')}`).toBeGreaterThan(0);
  268 | 
  269 |     console.log(`Tested ${result.tested} URLs from committees sitemap`);
  270 |     expect(result.errors, `Errors: ${result.errors.join(', ')}`).toHaveLength(0);
  271 |   });
  272 | 
  273 |   test('parties sitemap - sample URLs resolve', async ({ page }) => {
  274 |     await page.goto('/');
  275 |     const baseUrl = new URL(page.url()).origin;
  276 | 
  277 |     const result = await testSitemapUrls(page, baseUrl, '/parties/sitemap-parties.xml');
  278 | 
  279 |     if (result.tested === 0 && !STRICT) {
  280 |       test.skip();
  281 |       return;
  282 |     }
  283 |     expect(result.tested, `sitemap sampled no URLs; errors: ${result.errors.join(', ')}`).toBeGreaterThan(0);
  284 | 
  285 |     console.log(`Tested ${result.tested} URLs from parties sitemap`);
  286 |     expect(result.errors, `Errors: ${result.errors.join(', ')}`).toHaveLength(0);
  287 |   });
  288 | 
  289 |   test('offices sitemap - sample URLs resolve', async ({ page }) => {
  290 |     await page.goto('/');
  291 |     const baseUrl = new URL(page.url()).origin;
  292 | 
  293 |     const result = await testSitemapUrls(page, baseUrl, '/offices/sitemap-offices.xml');
  294 | 
  295 |     if (result.tested === 0 && !STRICT) {
  296 |       test.skip();
  297 |       return;
  298 |     }
  299 |     expect(result.tested, `sitemap sampled no URLs; errors: ${result.errors.join(', ')}`).toBeGreaterThan(0);
  300 | 
  301 |     console.log(`Tested ${result.tested} URLs from offices sitemap`);
  302 |     expect(result.errors, `Errors: ${result.errors.join(', ')}`).toHaveLength(0);
  303 |   });
  304 | 
  305 |   test('districts sitemap - sample URLs resolve', async ({ page }) => {
  306 |     await page.goto('/');
  307 |     const baseUrl = new URL(page.url()).origin;
  308 | 
  309 |     const result = await testSitemapUrls(page, baseUrl, '/districts/sitemap-districts.xml');
  310 | 
  311 |     if (result.tested === 0 && !STRICT) {
  312 |       test.skip();
  313 |       return;
  314 |     }
  315 |     expect(result.tested, `sitemap sampled no URLs; errors: ${result.errors.join(', ')}`).toBeGreaterThan(0);
  316 | 
  317 |     console.log(`Tested ${result.tested} URLs from districts sitemap`);
  318 |     expect(result.errors, `Errors: ${result.errors.join(', ')}`).toHaveLength(0);
  319 |   });
  320 | 
  321 |   test('states sitemap - sample URLs resolve', async ({ page }) => {
  322 |     await page.goto('/');
  323 |     const baseUrl = new URL(page.url()).origin;
  324 | 
  325 |     const result = await testSitemapUrls(page, baseUrl, '/states/sitemap-states.xml');
  326 | 
  327 |     if (result.tested === 0 && !STRICT) {
  328 |       test.skip();
  329 |       return;
  330 |     }
  331 |     expect(result.tested, `sitemap sampled no URLs; errors: ${result.errors.join(', ')}`).toBeGreaterThan(0);
  332 | 
  333 |     console.log(`Tested ${result.tested} URLs from states sitemap`);
  334 |     expect(result.errors, `Errors: ${result.errors.join(', ')}`).toHaveLength(0);
  335 |   });
  336 | 
  337 |   test('elections sitemap - sample URLs resolve', async ({ page }) => {
  338 |     await page.goto('/');
  339 |     const baseUrl = new URL(page.url()).origin;
  340 | 
  341 |     const result = await testSitemapUrls(page, baseUrl, '/elections/sitemap-elections.xml');
  342 | 
  343 |     if (result.tested === 0 && !STRICT) {
  344 |       test.skip();
  345 |       return;
  346 |     }
  347 |     expect(result.tested, `sitemap sampled no URLs; errors: ${result.errors.join(', ')}`).toBeGreaterThan(0);
  348 | 
  349 |     console.log(`Tested ${result.tested} URLs from elections sitemap`);
> 350 |     expect(result.errors, `Errors: ${result.errors.join(', ')}`).toHaveLength(0);
      |                                                                  ^ Error: Errors: Expected 200 for /elections/2006/, got 503, Expected 200 for /elections/1984/, got 503, Expected 200 for /elections/2014/, got 503, Expected 200 for /elections/1996/, got 503, Expected 200 for /elections/1988/, got 503
  351 |   });
  352 | 
  353 | });
  354 | 
```