|
1 | | -import { test, expect } from '@/e2e/helper'; |
| 1 | +import { expect, test } from '@/e2e/helper'; |
| 2 | +import { Response } from 'miragejs'; |
2 | 3 |
|
3 | 4 | const README_HTML = ` |
4 | 5 | <p><strong>Serde is a framework for <em>ser</em>ializing and <em>de</em>serializing Rust data structures efficiently and generically.</strong></p> |
@@ -112,4 +113,29 @@ test.describe('Acceptance | README rendering', { tag: '@acceptance' }, () => { |
112 | 113 | await page.goto('/crates/serde'); |
113 | 114 | await expect(page.locator('[data-test-no-readme]')).toBeVisible(); |
114 | 115 | }); |
| 116 | + |
| 117 | + test('it shows an error message and retry button if loading fails', async ({ page, mirage }) => { |
| 118 | + await page.exposeBinding('resp200', () => new Response(200, { 'Content-Type': 'text/html' }, 'foo')); |
| 119 | + |
| 120 | + await mirage.addHook(server => { |
| 121 | + let crate = server.create('crate', { name: 'serde' }); |
| 122 | + server.create('version', { crate, num: '1.0.0' }); |
| 123 | + |
| 124 | + server.logging = true; |
| 125 | + // Simulate a server error when fetching the README |
| 126 | + server.get('/api/v1/crates/:name/:version/readme', {}, 500); |
| 127 | + }); |
| 128 | + |
| 129 | + await page.goto('/crates/serde'); |
| 130 | + await expect(page.locator('[data-test-readme-error]')).toBeVisible(); |
| 131 | + await expect(page.locator('[data-test-retry-button]')).toBeVisible(); |
| 132 | + |
| 133 | + await page.evaluate(() => { |
| 134 | + // Simulate a successful response when fetching the README |
| 135 | + server.get('/api/v1/crates/:name/:version/readme', {}); |
| 136 | + }); |
| 137 | + |
| 138 | + await page.click('[data-test-retry-button]'); |
| 139 | + await expect(page.locator('[data-test-readme]')).toHaveText('{}'); |
| 140 | + }); |
115 | 141 | }); |
0 commit comments