Skip to content

Commit 452a5c8

Browse files
committed
Auto merge of #3179 - Turbo87:crate-row-version, r=pichfl
CrateRow: Use `defaultVersion` for crate version display This PR resolves #654 by using the new `defaultVersion` property of the `crate` model in the `CrateRow` component which is used by the search page. Closes #2751 r? `@pichfl`
2 parents e7fb8fa + 86949fe commit 452a5c8

File tree

2 files changed

+68
-8
lines changed

2 files changed

+68
-8
lines changed

app/components/crate-row.hbs

+11-8
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@
66
{{@crate.name}}
77
</a>
88
{{/let}}
9-
<span local-class="version" data-test-version>v{{@crate.max_version}}</span>
10-
<CopyButton
11-
@copyText='{{@crate.name}} = "{{@crate.max_version}}"'
12-
title="Copy Cargo.toml snippet to clipboard"
13-
local-class="copy-button"
14-
>
15-
{{svg-jar "copy" alt="Copy Cargo.toml snippet to clipboard"}}
16-
</CopyButton>
9+
{{#if @crate.defaultVersion}}
10+
<span local-class="version" data-test-version>v{{@crate.defaultVersion}}</span>
11+
<CopyButton
12+
@copyText='{{@crate.name}} = "{{@crate.defaultVersion}}"'
13+
title="Copy Cargo.toml snippet to clipboard"
14+
local-class="copy-button"
15+
data-test-copy-toml-button
16+
>
17+
{{svg-jar "copy" alt="Copy Cargo.toml snippet to clipboard"}}
18+
</CopyButton>
19+
{{/if}}
1720
</div>
1821
<div local-class="description" data-test-description>
1922
{{ truncate-text @crate.description }}

tests/components/crate-row-test.js

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { render } from '@ember/test-helpers';
2+
import { setupRenderingTest } from 'ember-qunit';
3+
import { module, test } from 'qunit';
4+
5+
import { hbs } from 'ember-cli-htmlbars';
6+
7+
import setupMirage from '../helpers/setup-mirage';
8+
9+
module('Component | CrateRow', function (hooks) {
10+
setupRenderingTest(hooks);
11+
setupMirage(hooks);
12+
13+
test('shows crate name and highest stable version', async function (assert) {
14+
let crate = this.server.create('crate', { name: 'foo' });
15+
this.server.create('version', { crate, num: '1.0.0' });
16+
this.server.create('version', { crate, num: '1.2.3', yanked: true });
17+
this.server.create('version', { crate, num: '2.0.0-beta.1' });
18+
this.server.create('version', { crate, num: '1.1.2' });
19+
20+
let store = this.owner.lookup('service:store');
21+
this.crate = await store.findRecord('crate', crate.name);
22+
23+
await render(hbs`<CrateRow @crate={{this.crate}} />`);
24+
assert.dom('[data-test-crate-link]').hasText('foo');
25+
assert.dom('[data-test-version]').hasText('v1.1.2');
26+
assert.dom('[data-test-copy-toml-button]').exists();
27+
});
28+
29+
test('shows crate name and highest version, if there is no stable version available', async function (assert) {
30+
let crate = this.server.create('crate', { name: 'foo' });
31+
this.server.create('version', { crate, num: '1.0.0-beta.1' });
32+
this.server.create('version', { crate, num: '1.0.0-beta.3' });
33+
this.server.create('version', { crate, num: '1.0.0-beta.2' });
34+
35+
let store = this.owner.lookup('service:store');
36+
this.crate = await store.findRecord('crate', crate.name);
37+
38+
await render(hbs`<CrateRow @crate={{this.crate}} />`);
39+
assert.dom('[data-test-crate-link]').hasText('foo');
40+
assert.dom('[data-test-version]').hasText('v1.0.0-beta.3');
41+
assert.dom('[data-test-copy-toml-button]').exists();
42+
});
43+
44+
test('shows crate name and no version if all versions are yanked', async function (assert) {
45+
let crate = this.server.create('crate', { name: 'foo' });
46+
this.server.create('version', { crate, num: '1.0.0', yanked: true });
47+
this.server.create('version', { crate, num: '1.2.3', yanked: true });
48+
49+
let store = this.owner.lookup('service:store');
50+
this.crate = await store.findRecord('crate', crate.name);
51+
52+
await render(hbs`<CrateRow @crate={{this.crate}} />`);
53+
assert.dom('[data-test-crate-link]').hasText('foo');
54+
assert.dom('[data-test-version]').doesNotExist();
55+
assert.dom('[data-test-copy-toml-button]').doesNotExist();
56+
});
57+
});

0 commit comments

Comments
 (0)