From 98ae017a0721aa6b57f012e649a4dcdee593afe8 Mon Sep 17 00:00:00 2001 From: eth3lbert Date: Sun, 23 Feb 2025 23:01:58 +0800 Subject: [PATCH] routes/crate: Fetch crate when peeked crate lacks included values --- app/routes/crate.js | 10 +++++++++- e2e/acceptance/crate.spec.ts | 10 ++++++++++ tests/acceptance/crate-test.js | 10 ++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/routes/crate.js b/app/routes/crate.js index 84a1fe56739..310949a706e 100644 --- a/app/routes/crate.js +++ b/app/routes/crate.js @@ -12,7 +12,15 @@ export default class CrateRoute extends Route { let crateName = params.crate_id; try { - return this.store.peekRecord('crate', crateName) || (await this.store.queryRecord('crate', { name: crateName })); + // We would like the peeked crate to include information (such as keywords) for further + // processing. Currently, we determine this by checking if associated versions exist, + // as default_version is included in the queryRecord call. + // See: https://github.com/rust-lang/crates.io/issues/10663 + let crate = this.store.peekRecord('crate', crateName); + if (!crate || crate.hasMany('versions').value() == null) { + crate = await this.store.queryRecord('crate', { name: crateName }); + } + return crate; } catch (error) { if (error instanceof NotFoundError) { let title = `${crateName}: Crate not found`; diff --git a/e2e/acceptance/crate.spec.ts b/e2e/acceptance/crate.spec.ts index ab605c978b5..39077256f79 100644 --- a/e2e/acceptance/crate.spec.ts +++ b/e2e/acceptance/crate.spec.ts @@ -245,4 +245,14 @@ test.describe('Acceptance | crate page', { tag: '@acceptance' }, () => { await expect(page).toHaveURL('/crates/nanomsg/settings'); }); + + test('keywords are shown when navigating from search', async ({ page, msw }) => { + loadFixtures(msw.db); + + await page.goto('/search?q=nanomsg'); + await page.getByRole('link', { name: 'nanomsg', exact: true }).click(); + + await expect(page).toHaveURL('/crates/nanomsg'); + await expect(page.locator('[data-test-keyword]')).toBeVisible(); + }); }); diff --git a/tests/acceptance/crate-test.js b/tests/acceptance/crate-test.js index 01aa740bc72..35d2022ceb9 100644 --- a/tests/acceptance/crate-test.js +++ b/tests/acceptance/crate-test.js @@ -249,4 +249,14 @@ module('Acceptance | crate page', function (hooks) { assert.strictEqual(currentURL(), '/crates/nanomsg/settings'); }); + + test('keywords are shown when navigating from search', async function (assert) { + loadFixtures(this.db); + + await visit('/search?q=nanomsg'); + await click('[data-test-crate-link]'); + + assert.strictEqual(currentURL(), '/crates/nanomsg'); + assert.dom('[data-test-keyword]').exists(); + }); });