diff --git a/app/routes/crate/reverse-dependencies.js b/app/routes/crate/reverse-dependencies.js index cec813b8712..402195e3ca0 100644 --- a/app/routes/crate/reverse-dependencies.js +++ b/app/routes/crate/reverse-dependencies.js @@ -10,7 +10,7 @@ export default class ReverseDependenciesRoute extends Route { page: { refreshModel: true }, }; - async model(params) { + async model(params, transition) { params.reverse = true; params.crate = this.modelFor('crate'); let crateName = params.crate.name; @@ -18,15 +18,8 @@ export default class ReverseDependenciesRoute extends Route { try { return await this.store.query('dependency', params); } catch (error) { - let message = `Could not load reverse dependencies for the "${crateName}" crate`; - - let details = error.errors?.[0]?.detail; - if (details && !details.startsWith('{')) { - message += `: ${details}`; - } - - this.notifications.error(message); - this.router.replaceWith('index'); + let title = `${crateName}: Failed to load dependents`; + this.router.replaceWith('catch-all', { transition, error, title }); } } diff --git a/e2e/acceptance/reverse-dependencies.spec.ts b/e2e/acceptance/reverse-dependencies.spec.ts index e5cde39a127..27a8262d7ac 100644 --- a/e2e/acceptance/reverse-dependencies.spec.ts +++ b/e2e/acceptance/reverse-dependencies.spec.ts @@ -65,30 +65,17 @@ test.describe('Acceptance | /crates/:crate_id/reverse_dependencies', { tag: '@ac await expect(totalRows).toHaveText('22'); }); - test('shows a generic error if the server is broken', async ({ page, msw }) => { + test('shows error message if loading of reverse dependencies fails', async ({ page, msw }) => { let { foo } = prepare(msw); let error = HttpResponse.json({}, { status: 500 }); await msw.worker.use(http.get('/api/v1/crates/:crate_id/reverse_dependencies', () => error)); await page.goto(`/crates/${foo.name}/reverse_dependencies`); - await expect(page).toHaveURL('/'); - await expect(page.locator('[data-test-notification-message="error"]')).toHaveText( - 'Could not load reverse dependencies for the "foo" crate', - ); - }); - - test('shows a detailed error if available', async ({ page, msw }) => { - let { foo } = prepare(msw); - - let payload = { errors: [{ detail: 'cannot request more than 100 items' }] }; - let error = HttpResponse.json(payload, { status: 400 }); - await msw.worker.use(http.get('/api/v1/crates/:crate_id/reverse_dependencies', () => error)); - - await page.goto(`/crates/${foo.name}/reverse_dependencies`); - await expect(page).toHaveURL('/'); - await expect(page.locator('[data-test-notification-message="error"]')).toHaveText( - 'Could not load reverse dependencies for the "foo" crate: cannot request more than 100 items', - ); + await expect(page).toHaveURL(`/crates/${foo.name}/reverse_dependencies`); + await expect(page.locator('[data-test-404-page]')).toBeVisible(); + await expect(page.locator('[data-test-title]')).toHaveText(`${foo.name}: Failed to load dependents`); + await expect(page.locator('[data-test-go-back]')).toBeVisible(); + await expect(page.locator('[data-test-try-again]')).not.toBeVisible(); }); }); diff --git a/tests/acceptance/reverse-dependencies-test.js b/tests/acceptance/reverse-dependencies-test.js index 35fe916f185..9e343a2cbc2 100644 --- a/tests/acceptance/reverse-dependencies-test.js +++ b/tests/acceptance/reverse-dependencies-test.js @@ -66,29 +66,17 @@ module('Acceptance | /crates/:crate_id/reverse_dependencies', function (hooks) { assert.dom('[data-test-total-rows]').hasText('22'); }); - test('shows a generic error if the server is broken', async function (assert) { + test('shows error message if loading of reverse dependencies fails', async function (assert) { let { foo } = prepare(this); let error = HttpResponse.json({}, { status: 500 }); this.worker.use(http.get('/api/v1/crates/:crate_id/reverse_dependencies', () => error)); await visit(`/crates/${foo.name}/reverse_dependencies`); - assert.strictEqual(currentURL(), '/'); - assert - .dom('[data-test-notification-message="error"]') - .hasText('Could not load reverse dependencies for the "foo" crate'); - }); - - test('shows a detailed error if available', async function (assert) { - let { foo } = prepare(this); - - let error = HttpResponse.json({ errors: [{ detail: 'cannot request more than 100 items' }] }, { status: 400 }); - this.worker.use(http.get('/api/v1/crates/:crate_id/reverse_dependencies', () => error)); - - await visit(`/crates/${foo.name}/reverse_dependencies`); - assert.strictEqual(currentURL(), '/'); - assert - .dom('[data-test-notification-message="error"]') - .hasText('Could not load reverse dependencies for the "foo" crate: cannot request more than 100 items'); + assert.strictEqual(currentURL(), `/crates/${foo.name}/reverse_dependencies`); + assert.dom('[data-test-404-page]').isVisible(); + assert.dom('[data-test-title]').hasText(`${foo.name}: Failed to load dependents`); + assert.dom('[data-test-go-back]').isVisible(); + assert.dom('[data-test-try-again]').isNotVisible(); }); });