Skip to content

Commit 123d6bb

Browse files
committed
modesl/version: Refresh releaseTracks after yanking/unyanking
1 parent 92f573e commit 123d6bb

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

Diff for: app/models/version.js

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
2+
import { service } from '@ember/service';
23
import { waitForPromise } from '@ember/test-waiters';
34
import { cached } from '@glimmer/tracking';
45

@@ -12,6 +13,8 @@ import ajax from '../utils/ajax';
1213
const EIGHT_DAYS = 8 * 24 * 60 * 60 * 1000;
1314

1415
export default class Version extends Model {
16+
@service releaseTracks;
17+
1518
@attr num;
1619
@attr dl_path;
1720
@attr readme_path;
@@ -188,11 +191,13 @@ export default class Version extends Model {
188191
let data = { version: { yanked: true } };
189192
let payload = await waitForPromise(apiAction(this, { method: 'PATCH', data }));
190193
this.store.pushPayload(payload);
194+
await waitForPromise(this.releaseTracks.refreshTask.perform(this.crateName, true));
191195
});
192196

193197
unyankTask = keepLatestTask(async () => {
194198
let data = { version: { yanked: false } };
195199
let payload = await waitForPromise(apiAction(this, { method: 'PATCH', data }));
196200
this.store.pushPayload(payload);
201+
await waitForPromise(this.releaseTracks.refreshTask.perform(this.crateName, false));
197202
});
198203
}

Diff for: e2e/acceptance/versions.spec.ts

+42
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,46 @@ test.describe('Acceptance | crate versions page', { tag: '@acceptance' }, () =>
2424
versions = await page.locator('[data-test-version]').evaluateAll(el => el.map(it => it.dataset.testVersion));
2525
expect(versions).toEqual(['0.3.0', '0.2.1', '0.2.0', '0.1.0']);
2626
});
27+
28+
test('shows correct release tracks label after yanking/unyanking', async ({ page, msw, percy }) => {
29+
let user = msw.db.user.create();
30+
await msw.authenticateAs(user);
31+
32+
let crate = msw.db.crate.create({ name: 'nanomsg' });
33+
msw.db.crateOwnership.create({ crate, user });
34+
35+
msw.db.version.create({ crate, num: '0.1.0', created_at: '2017-01-01' });
36+
msw.db.version.create({ crate, num: '0.2.0', created_at: '2018-01-01' });
37+
msw.db.version.create({ crate, num: '0.3.0', created_at: '2019-01-01', rust_version: '1.69' });
38+
msw.db.version.create({ crate, num: '0.2.1', created_at: '2020-01-01' });
39+
40+
await page.goto('/crates/nanomsg/versions');
41+
await expect(page).toHaveURL('/crates/nanomsg/versions');
42+
43+
await expect(page.locator('[data-test-version]')).toHaveCount(4);
44+
let versions = await page.locator('[data-test-version]').evaluateAll(el => el.map(it => it.dataset.testVersion));
45+
expect(versions).toEqual(['0.2.1', '0.3.0', '0.2.0', '0.1.0']);
46+
47+
let v021 = page.locator('[data-test-version="0.2.1"]');
48+
let v020 = page.locator('[data-test-version="0.2.0"]');
49+
50+
await expect(v021).toHaveClass(/.*latest/);
51+
await expect(v021).not.toHaveClass(/.yanked/);
52+
await expect(v020).not.toHaveClass(/.*latest/);
53+
await expect(v020).not.toHaveClass(/.yanked/);
54+
55+
// yanking
56+
await page.locator('[data-test-version-yank-button="0.2.1"]').click();
57+
await expect(v021).not.toHaveClass(/.*latest/);
58+
await expect(v021).toHaveClass(/.yanked/);
59+
await expect(v020).toHaveClass(/.*latest/);
60+
await expect(v020).not.toHaveClass(/.yanked/);
61+
62+
// unyanking
63+
await page.locator('[data-test-version-unyank-button="0.2.1"]').click();
64+
await expect(v021).toHaveClass(/.*latest/);
65+
await expect(v021).not.toHaveClass(/.yanked/);
66+
await expect(v020).not.toHaveClass(/.*latest/);
67+
await expect(v020).not.toHaveClass(/.yanked/);
68+
});
2769
});

Diff for: tests/acceptance/versions-test.js

+50
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,54 @@ module('Acceptance | crate versions page', function (hooks) {
2929
versions = findAll('[data-test-version]').map(it => it.dataset.testVersion);
3030
assert.deepEqual(versions, ['0.3.0', '0.2.1', '0.2.0', '0.1.0']);
3131
});
32+
33+
test('shows correct release tracks label after yanking/unyanking', async function (assert) {
34+
let user = this.db.user.create();
35+
this.authenticateAs(user);
36+
37+
let crate = this.db.crate.create({ name: 'nanomsg' });
38+
this.db.crateOwnership.create({ crate, user });
39+
40+
this.db.version.create({ crate, num: '0.1.0', created_at: '2017-01-01' });
41+
this.db.version.create({ crate, num: '0.2.0', created_at: '2018-01-01' });
42+
this.db.version.create({ crate, num: '0.3.0', created_at: '2019-01-01', rust_version: '1.69' });
43+
this.db.version.create({ crate, num: '0.2.1', created_at: '2020-01-01' });
44+
45+
await visit('/crates/nanomsg/versions');
46+
assert.strictEqual(currentURL(), '/crates/nanomsg/versions');
47+
48+
let versions = findAll('[data-test-version]').map(it => it.dataset.testVersion);
49+
assert.deepEqual(versions, ['0.2.1', '0.3.0', '0.2.0', '0.1.0']);
50+
51+
assert
52+
.dom('[data-test-version="0.2.1"]')
53+
.hasClass(/.*latest/)
54+
.hasNoClass(/.yanked/);
55+
assert
56+
.dom('[data-test-version="0.2.0"]')
57+
.hasNoClass(/.*latest/)
58+
.hasNoClass(/.yanked/);
59+
60+
// yanking
61+
await click('[data-test-version-yank-button="0.2.1"]');
62+
assert
63+
.dom('[data-test-version="0.2.1"]')
64+
.hasNoClass(/.*latest/)
65+
.hasClass(/.*yanked/);
66+
assert
67+
.dom('[data-test-version="0.2.0"]')
68+
.hasClass(/.*latest/)
69+
.hasNoClass(/.*yanked/);
70+
71+
// unyanking
72+
await click('[data-test-version-unyank-button="0.2.1"]');
73+
assert
74+
.dom('[data-test-version="0.2.1"]')
75+
.hasClass(/.*latest/)
76+
.hasNoClass(/.yanked/);
77+
assert
78+
.dom('[data-test-version="0.2.0"]')
79+
.hasNoClass(/.*latest/)
80+
.hasNoClass(/.yanked/);
81+
});
3282
});

0 commit comments

Comments
 (0)