Skip to content

Commit 5aebcda

Browse files
committed
add yarn3 fixtures & mocks, and add volta pin tests
1 parent 44affa8 commit 5aebcda

File tree

13 files changed

+278
-71
lines changed

13 files changed

+278
-71
lines changed

crates/volta-core/src/tool/yarn/fetch.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use std::env;
44
use std::fs::File;
5-
use std::path::{Path, PathBuf};
5+
use std::path::Path;
66

77
use super::super::download_tool_error;
88
use super::super::registry::{find_unpack_dir, public_registry_package};
@@ -155,7 +155,7 @@ fn fetch_remote_distro(
155155
))
156156
}
157157

158-
fn ensure_bin_is_executable(unpack_dir: &PathBuf, tool: &str) -> Fallible<()> {
158+
fn ensure_bin_is_executable(unpack_dir: &Path, tool: &str) -> Fallible<()> {
159159
let exec_path = unpack_dir.join("bin").join(tool);
160160
set_executable(&exec_path).with_context(|| ErrorKind::SetToolExecutable { tool: tool.into() })
161161
}

tests/acceptance/corrupted_download.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, YarnFixture};
1+
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, Yarn1Fixture};
22
use hamcrest2::assert_that;
33
use hamcrest2::prelude::*;
44
use semver::Version;
@@ -25,7 +25,7 @@ const NODE_VERSION_FIXTURES: [DistroMetadata; 2] = [
2525
},
2626
];
2727

28-
const YARN_VERSION_INFO: &str = r#"{
28+
const YARN_1_VERSION_INFO: &str = r#"{
2929
"name":"yarn",
3030
"dist-tags": { "latest": "1.2.42" },
3131
"versions": {
@@ -34,7 +34,7 @@ const YARN_VERSION_INFO: &str = r#"{
3434
}
3535
}"#;
3636

37-
const YARN_VERSION_FIXTURES: [DistroMetadata; 2] = [
37+
const YARN_1_VERSION_FIXTURES: [DistroMetadata; 2] = [
3838
DistroMetadata {
3939
version: "0.0.1",
4040
compressed_size: 10,
@@ -81,9 +81,9 @@ fn install_valid_node_saves_to_inventory() {
8181
fn install_corrupted_yarn_leaves_inventory_unchanged() {
8282
let s = sandbox()
8383
.node_available_versions(NODE_VERSION_INFO)
84-
.yarn_available_versions(YARN_VERSION_INFO)
84+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
8585
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
86-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
86+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
8787
.build();
8888

8989
assert_that!(
@@ -99,9 +99,9 @@ fn install_valid_yarn_saves_to_inventory() {
9999
let s = sandbox()
100100
.platform(r#"{ "node": { "runtime": "1.2.3", "npm": null }, "yarn": null }"#)
101101
.node_available_versions(NODE_VERSION_INFO)
102-
.yarn_available_versions(YARN_VERSION_INFO)
102+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
103103
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
104-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
104+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
105105
.build();
106106

107107
assert_that!(

tests/acceptance/direct_install.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, NpmFixture, YarnFixture};
1+
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, NpmFixture, Yarn1Fixture};
22
use hamcrest2::assert_that;
33
use hamcrest2::prelude::*;
44
use test_support::matchers::execs;
@@ -114,15 +114,15 @@ cfg_if::cfg_if! {
114114
}
115115
}
116116

117-
const YARN_VERSION_INFO: &str = r#"[
117+
const YARN_1_VERSION_INFO: &str = r#"[
118118
{"tag_name":"v1.2.42","assets":[{"name":"yarn-v1.2.42.tar.gz"}]},
119119
{"tag_name":"v1.3.1","assets":[{"name":"yarn-v1.3.1.msi"}]},
120120
{"tag_name":"v1.4.159","assets":[{"name":"yarn-v1.4.159.tar.gz"}]},
121121
{"tag_name":"v1.7.71","assets":[{"name":"yarn-v1.7.71.tar.gz"}]},
122122
{"tag_name":"v1.12.99","assets":[{"name":"yarn-v1.12.99.tar.gz"}]}
123123
]"#;
124124

125-
const YARN_VERSION_FIXTURES: [DistroMetadata; 4] = [
125+
const YARN_1_VERSION_FIXTURES: [DistroMetadata; 4] = [
126126
DistroMetadata {
127127
version: "1.12.99",
128128
compressed_size: 178,
@@ -257,8 +257,8 @@ fn npm_global_install_yarn_intercepts() {
257257
.platform(&platform_with_node("10.99.1040"))
258258
.node_available_versions(NODE_VERSION_INFO)
259259
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
260-
.yarn_available_versions(YARN_VERSION_INFO)
261-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
260+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
261+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
262262
.env("VOLTA_LOGLEVEL", "info")
263263
.build();
264264

@@ -277,8 +277,8 @@ fn yarn_global_add_yarn_intercepts() {
277277
.platform(&platform_with_node("10.99.1040"))
278278
.node_available_versions(NODE_VERSION_INFO)
279279
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
280-
.yarn_available_versions(YARN_VERSION_INFO)
281-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
280+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
281+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
282282
.env("VOLTA_LOGLEVEL", "info")
283283
.build();
284284

@@ -299,8 +299,8 @@ fn npm_global_install_supports_multiples() {
299299
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
300300
.npm_available_versions(NPM_VERSION_INFO)
301301
.distro_mocks::<NpmFixture>(&NPM_VERSION_FIXTURES)
302-
.yarn_available_versions(YARN_VERSION_INFO)
303-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
302+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
303+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
304304
.env("VOLTA_LOGLEVEL", "info")
305305
.build();
306306

@@ -341,8 +341,8 @@ fn yarn_global_add_supports_multiples() {
341341
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
342342
.npm_available_versions(NPM_VERSION_INFO)
343343
.distro_mocks::<NpmFixture>(&NPM_VERSION_FIXTURES)
344-
.yarn_available_versions(YARN_VERSION_INFO)
345-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
344+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
345+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
346346
.env("VOLTA_LOGLEVEL", "info")
347347
.build();
348348

@@ -364,8 +364,8 @@ fn yarn_global_add_without_packages_is_treated_as_not_global() {
364364
.platform(&platform_with_node_yarn("10.99.1040", "1.2.42"))
365365
.node_available_versions(NODE_VERSION_INFO)
366366
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
367-
.yarn_available_versions(YARN_VERSION_INFO)
368-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
367+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
368+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
369369
.env("VOLTA_LOGLEVEL", "info")
370370
.build();
371371

@@ -399,7 +399,7 @@ fn yarn_global_with_override_does_not_intercept() {
399399
let s = sandbox()
400400
.platform(&platform_with_node_yarn("10.99.1040", "1.12.99"))
401401
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
402-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
402+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
403403
.env("VOLTA_LOGLEVEL", "info")
404404
.env("VOLTA_UNSAFE_GLOBAL", "1")
405405
.build();

tests/acceptance/direct_uninstall.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, Sandbox, YarnFixture};
1+
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, Sandbox, Yarn1Fixture};
22
use hamcrest2::assert_that;
33
use hamcrest2::prelude::*;
44
use test_support::matchers::execs;
@@ -106,7 +106,7 @@ cfg_if::cfg_if! {
106106
}
107107
}
108108

109-
const YARN_VERSION_FIXTURES: [DistroMetadata; 1] = [DistroMetadata {
109+
const YARN_1_VERSION_FIXTURES: [DistroMetadata; 1] = [DistroMetadata {
110110
version: "1.2.42",
111111
compressed_size: 174,
112112
uncompressed_size: Some(0x0028_0000),
@@ -295,7 +295,7 @@ fn yarn_remove_without_packages_skips_volta_logic() {
295295
let s = sandbox()
296296
.platform(&platform_with_node_yarn("10.99.1040", "1.2.42"))
297297
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
298-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
298+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
299299
.env("VOLTA_LOGLEVEL", "info")
300300
.build();
301301

tests/acceptance/merged_platform.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, NpmFixture, YarnFixture};
1+
use crate::support::sandbox::{sandbox, DistroMetadata, NodeFixture, NpmFixture, Yarn1Fixture};
22
use hamcrest2::assert_that;
33
use hamcrest2::prelude::*;
44
use test_support::matchers::execs;
@@ -108,7 +108,7 @@ const NPM_VERSION_FIXTURES: [DistroMetadata; 2] = [
108108
},
109109
];
110110

111-
const YARN_VERSION_FIXTURES: [DistroMetadata; 2] = [
111+
const YARN_1_VERSION_FIXTURES: [DistroMetadata; 2] = [
112112
DistroMetadata {
113113
version: "1.12.99",
114114
compressed_size: 178,
@@ -201,7 +201,7 @@ fn uses_project_yarn_if_available() {
201201
.platform(PLATFORM_WITH_YARN)
202202
.package_json(PACKAGE_JSON_WITH_YARN)
203203
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
204-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
204+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
205205
.env("VOLTA_LOGLEVEL", "debug")
206206
.build();
207207

@@ -221,7 +221,7 @@ fn uses_default_yarn_in_project_without_yarn() {
221221
.platform(PLATFORM_WITH_YARN)
222222
.package_json(PACKAGE_JSON_NODE_ONLY)
223223
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
224-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
224+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
225225
.env("VOLTA_LOGLEVEL", "debug")
226226
.build();
227227

@@ -240,7 +240,7 @@ fn uses_default_yarn_outside_project() {
240240
let s = sandbox()
241241
.platform(PLATFORM_WITH_YARN)
242242
.distro_mocks::<NodeFixture>(&NODE_VERSION_FIXTURES)
243-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
243+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
244244
.env("VOLTA_LOGLEVEL", "debug")
245245
.build();
246246

tests/acceptance/support/sandbox.rs

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,11 @@ pub struct NpmFixture {
136136
pub metadata: DistroMetadata,
137137
}
138138

139-
pub struct YarnFixture {
139+
pub struct Yarn1Fixture {
140+
pub metadata: DistroMetadata,
141+
}
142+
143+
pub struct YarnBerryFixture {
140144
pub metadata: DistroMetadata,
141145
}
142146

@@ -152,7 +156,13 @@ impl From<DistroMetadata> for NpmFixture {
152156
}
153157
}
154158

155-
impl From<DistroMetadata> for YarnFixture {
159+
impl From<DistroMetadata> for Yarn1Fixture {
160+
fn from(metadata: DistroMetadata) -> Self {
161+
Self { metadata }
162+
}
163+
}
164+
165+
impl From<DistroMetadata> for YarnBerryFixture {
156166
fn from(metadata: DistroMetadata) -> Self {
157167
Self { metadata }
158168
}
@@ -194,7 +204,7 @@ impl DistroFixture for NpmFixture {
194204
}
195205
}
196206

197-
impl DistroFixture for YarnFixture {
207+
impl DistroFixture for Yarn1Fixture {
198208
fn server_path(&self) -> String {
199209
format!("/yarn/-/yarn-{}.tgz", self.metadata.version)
200210
}
@@ -208,6 +218,23 @@ impl DistroFixture for YarnFixture {
208218
}
209219
}
210220

221+
impl DistroFixture for YarnBerryFixture {
222+
fn server_path(&self) -> String {
223+
format!(
224+
"/@yarnpkg/cli-dist/-/cli-dist-{}.tgz",
225+
self.metadata.version
226+
)
227+
}
228+
229+
fn fixture_path(&self) -> String {
230+
format!("tests/fixtures/cli-dist-{}.tgz", self.metadata.version)
231+
}
232+
233+
fn metadata(&self) -> &DistroMetadata {
234+
&self.metadata
235+
}
236+
}
237+
211238
impl SandboxBuilder {
212239
/// Root of the project, ex: `/path/to/cargo/target/integration_test/t0/foo`
213240
pub fn root(&self) -> PathBuf {
@@ -285,8 +312,8 @@ impl SandboxBuilder {
285312
self
286313
}
287314

288-
/// Setup mock to return the available yarn versions (chainable)
289-
pub fn yarn_available_versions(mut self, body: &str) -> Self {
315+
/// Setup mock to return the available Yarn@1 versions (chainable)
316+
pub fn yarn_1_available_versions(mut self, body: &str) -> Self {
290317
let mock = mock("GET", "/yarn")
291318
.with_status(200)
292319
.with_header("content-type", "application/json")
@@ -296,6 +323,17 @@ impl SandboxBuilder {
296323
self
297324
}
298325

326+
/// Setup mock to return the available Yarn@2+ versions (chainable)
327+
pub fn yarn_berry_available_versions(mut self, body: &str) -> Self {
328+
let mock = mock("GET", "/@yarnpkg/cli-dist")
329+
.with_status(200)
330+
.with_header("content-type", "application/json")
331+
.with_body(body)
332+
.create();
333+
self.root.mocks.push(mock);
334+
self
335+
}
336+
299337
/// Setup mock to return the available npm versions (chainable)
300338
pub fn npm_available_versions(mut self, body: &str) -> Self {
301339
let mock = mock("GET", "/npm")

tests/acceptance/volta_install.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::support::sandbox::{
2-
sandbox, DistroMetadata, NodeFixture, NpmFixture, Sandbox, YarnFixture,
2+
sandbox, DistroMetadata, NodeFixture, NpmFixture, Sandbox, Yarn1Fixture,
33
};
44
use hamcrest2::assert_that;
55
use hamcrest2::prelude::*;
@@ -116,15 +116,15 @@ cfg_if::cfg_if! {
116116
}
117117
}
118118

119-
const YARN_VERSION_INFO: &str = r#"[
119+
const YARN_1_VERSION_INFO: &str = r#"[
120120
{"tag_name":"v1.2.42","assets":[{"name":"yarn-v1.2.42.tar.gz"}]},
121121
{"tag_name":"v1.3.1","assets":[{"name":"yarn-v1.3.1.msi"}]},
122122
{"tag_name":"v1.4.159","assets":[{"name":"yarn-v1.4.159.tar.gz"}]},
123123
{"tag_name":"v1.7.71","assets":[{"name":"yarn-v1.7.71.tar.gz"}]},
124124
{"tag_name":"v1.12.99","assets":[{"name":"yarn-v1.12.99.tar.gz"}]}
125125
]"#;
126126

127-
const YARN_VERSION_FIXTURES: [DistroMetadata; 4] = [
127+
const YARN_1_VERSION_FIXTURES: [DistroMetadata; 4] = [
128128
DistroMetadata {
129129
version: "1.12.99",
130130
compressed_size: 178,
@@ -266,8 +266,8 @@ fn install_npm_without_node_errors() {
266266
#[test]
267267
fn install_yarn_without_node_errors() {
268268
let s = sandbox()
269-
.yarn_available_versions(YARN_VERSION_INFO)
270-
.distro_mocks::<YarnFixture>(&YARN_VERSION_FIXTURES)
269+
.yarn_1_available_versions(YARN_1_VERSION_INFO)
270+
.distro_mocks::<Yarn1Fixture>(&YARN_1_VERSION_FIXTURES)
271271
.build();
272272

273273
assert_that!(

0 commit comments

Comments
 (0)