Skip to content

Commit 8e20dbf

Browse files
committed
Auto merge of #3274 - Turbo87:yanked-release-track, r=locks
models/version: Ignore yanked versions in `isHighestOfReleaseTrack` property if there is 0.4.0, 0.4.1 and 0.4.2, and 0.4.2 is yanked then the highest of the release track should be 0.4.1.
2 parents 7c1afff + 6ddd1a4 commit 8e20dbf

File tree

2 files changed

+64
-80
lines changed

2 files changed

+64
-80
lines changed

app/models/version.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ export default class Version extends Model {
6464
let { crate, semver, releaseTrack } = this;
6565
let { versions } = crate;
6666
// find all other non-prerelease versions on the same release track
67-
let sameTrackVersions = versions.filter(it => it !== this && !it.isPrerelease && it.releaseTrack === releaseTrack);
67+
let sameTrackVersions = versions.filter(
68+
it => it !== this && !it.yanked && !it.isPrerelease && it.releaseTrack === releaseTrack,
69+
);
6870
// check if we're the "highest"
6971
return sameTrackVersions.every(it => it.semver.compare(semver) === -1);
7072
}

tests/models/version-test.js

Lines changed: 61 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -80,88 +80,70 @@ module('Model | Version', function (hooks) {
8080
});
8181
});
8282

83-
test('isHighestOfReleaseTrack', async function (assert) {
84-
let nums = [
85-
'0.4.0-rc.1',
86-
'0.3.23',
87-
'0.3.22',
88-
'0.3.21-pre.0',
89-
'0.3.20',
90-
'0.3.3',
91-
'0.3.2',
92-
'0.3.1',
93-
'0.3.0',
94-
'0.2.1',
95-
'0.2.0',
96-
'0.1.2',
97-
'0.1.1',
98-
];
83+
module('isHighestOfReleaseTrack', function () {
84+
test('happy path', async function (assert) {
85+
let nums = [
86+
'0.4.0-rc.1',
87+
'0.3.23',
88+
'0.3.22',
89+
'0.3.21-pre.0',
90+
'0.3.20',
91+
'0.3.3',
92+
'0.3.2',
93+
'0.3.1',
94+
'0.3.0',
95+
'0.2.1',
96+
'0.2.0',
97+
'0.1.2',
98+
'0.1.1',
99+
];
100+
101+
let crate = this.server.create('crate');
102+
for (let num of nums) {
103+
this.server.create('version', { crate, num });
104+
}
105+
106+
let crateRecord = await this.store.findRecord('crate', crate.id);
107+
let versions = (await crateRecord.versions).toArray();
99108

100-
let crate = this.server.create('crate');
101-
for (let num of nums) {
102-
this.server.create('version', { crate, num });
103-
}
109+
assert.deepEqual(
110+
versions.map(it => ({ num: it.num, isHighestOfReleaseTrack: it.isHighestOfReleaseTrack })),
111+
[
112+
{ num: '0.4.0-rc.1', isHighestOfReleaseTrack: false },
113+
{ num: '0.3.23', isHighestOfReleaseTrack: true },
114+
{ num: '0.3.22', isHighestOfReleaseTrack: false },
115+
{ num: '0.3.21-pre.0', isHighestOfReleaseTrack: false },
116+
{ num: '0.3.20', isHighestOfReleaseTrack: false },
117+
{ num: '0.3.3', isHighestOfReleaseTrack: false },
118+
{ num: '0.3.2', isHighestOfReleaseTrack: false },
119+
{ num: '0.3.1', isHighestOfReleaseTrack: false },
120+
{ num: '0.3.0', isHighestOfReleaseTrack: false },
121+
{ num: '0.2.1', isHighestOfReleaseTrack: true },
122+
{ num: '0.2.0', isHighestOfReleaseTrack: false },
123+
{ num: '0.1.2', isHighestOfReleaseTrack: true },
124+
{ num: '0.1.1', isHighestOfReleaseTrack: false },
125+
],
126+
);
127+
});
104128

105-
let crateRecord = await this.store.findRecord('crate', crate.id);
106-
let versions = (await crateRecord.versions).toArray();
129+
test('ignores yanked versions', async function (assert) {
130+
let crate = this.server.create('crate');
131+
this.server.create('version', { crate, num: '0.4.0' });
132+
this.server.create('version', { crate, num: '0.4.1' });
133+
this.server.create('version', { crate, num: '0.4.2', yanked: true });
107134

108-
assert.deepEqual(
109-
versions.map(it => ({ num: it.num, isHighestOfReleaseTrack: it.isHighestOfReleaseTrack })),
110-
[
111-
{
112-
isHighestOfReleaseTrack: false,
113-
num: '0.4.0-rc.1',
114-
},
115-
{
116-
isHighestOfReleaseTrack: true,
117-
num: '0.3.23',
118-
},
119-
{
120-
isHighestOfReleaseTrack: false,
121-
num: '0.3.22',
122-
},
123-
{
124-
isHighestOfReleaseTrack: false,
125-
num: '0.3.21-pre.0',
126-
},
127-
{
128-
isHighestOfReleaseTrack: false,
129-
num: '0.3.20',
130-
},
131-
{
132-
isHighestOfReleaseTrack: false,
133-
num: '0.3.3',
134-
},
135-
{
136-
isHighestOfReleaseTrack: false,
137-
num: '0.3.2',
138-
},
139-
{
140-
isHighestOfReleaseTrack: false,
141-
num: '0.3.1',
142-
},
143-
{
144-
isHighestOfReleaseTrack: false,
145-
num: '0.3.0',
146-
},
147-
{
148-
isHighestOfReleaseTrack: true,
149-
num: '0.2.1',
150-
},
151-
{
152-
isHighestOfReleaseTrack: false,
153-
num: '0.2.0',
154-
},
155-
{
156-
isHighestOfReleaseTrack: true,
157-
num: '0.1.2',
158-
},
159-
{
160-
isHighestOfReleaseTrack: false,
161-
num: '0.1.1',
162-
},
163-
],
164-
);
135+
let crateRecord = await this.store.findRecord('crate', crate.id);
136+
let versions = (await crateRecord.versions).toArray();
137+
138+
assert.deepEqual(
139+
versions.map(it => ({ num: it.num, isHighestOfReleaseTrack: it.isHighestOfReleaseTrack })),
140+
[
141+
{ num: '0.4.0', isHighestOfReleaseTrack: false },
142+
{ num: '0.4.1', isHighestOfReleaseTrack: true },
143+
{ num: '0.4.2', isHighestOfReleaseTrack: true },
144+
],
145+
);
146+
});
165147
});
166148

167149
module('featuresList', function () {

0 commit comments

Comments
 (0)