summaryrefslogtreecommitdiff
path: root/tests/integration/jsr_tests.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-02-10 13:22:13 -0700
committerGitHub <noreply@github.com>2024-02-10 20:22:13 +0000
commitf5e46c9bf2f50d66a953fa133161fc829cecff06 (patch)
tree8faf2f5831c1c7b11d842cd9908d141082c869a5 /tests/integration/jsr_tests.rs
parentd2477f780630a812bfd65e3987b70c0d309385bb (diff)
chore: move cli/tests/ -> tests/ (#22369)
This looks like a massive PR, but it's only a move from cli/tests -> tests, and updates of relative paths for files. This is the first step towards aggregate all of the integration test files under tests/, which will lead to a set of integration tests that can run without the CLI binary being built. While we could leave these tests under `cli`, it would require us to keep a more complex directory structure for the various test runners. In addition, we have a lot of complexity to ignore various test files in the `cli` project itself (cargo publish exclusion rules, autotests = false, etc). And finally, the `tests/` folder will eventually house the `test_ffi`, `test_napi` and other testing code, reducing the size of the root repo directory. For easier review, the extremely large and noisy "move" is in the first commit (with no changes -- just a move), while the remainder of the changes to actual files is in the second commit.
Diffstat (limited to 'tests/integration/jsr_tests.rs')
-rw-r--r--tests/integration/jsr_tests.rs183
1 files changed, 183 insertions, 0 deletions
diff --git a/tests/integration/jsr_tests.rs b/tests/integration/jsr_tests.rs
new file mode 100644
index 000000000..2de4f0056
--- /dev/null
+++ b/tests/integration/jsr_tests.rs
@@ -0,0 +1,183 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+use deno_core::serde_json::Value;
+use deno_lockfile::Lockfile;
+use test_util as util;
+use url::Url;
+use util::env_vars_for_jsr_tests;
+use util::TestContextBuilder;
+
+itest!(no_module_graph_run {
+ args: "run jsr/no_module_graph/main.ts",
+ output: "jsr/no_module_graph/main.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+});
+
+itest!(no_module_graph_info {
+ args: "info jsr/no_module_graph/main.ts",
+ output: "jsr/no_module_graph/main_info.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+});
+
+itest!(same_package_multiple_versions {
+ args: "run --quiet jsr/no_module_graph/multiple.ts",
+ output: "jsr/no_module_graph/multiple.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+});
+
+itest!(module_graph_run {
+ args: "run jsr/module_graph/main.ts",
+ output: "jsr/module_graph/main.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+});
+
+itest!(module_graph_info {
+ args: "info jsr/module_graph/main.ts",
+ output: "jsr/module_graph/main_info.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+});
+
+itest!(deps_run {
+ args: "run jsr/deps/main.ts",
+ output: "jsr/deps/main.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+});
+
+itest!(deps_info {
+ args: "info jsr/deps/main.ts",
+ output: "jsr/deps/main_info.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+});
+
+itest!(subset_type_graph {
+ args: "check --all jsr/subset_type_graph/main.ts",
+ output: "jsr/subset_type_graph/main.check.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+ exit_code: 1,
+});
+
+itest!(version_not_found {
+ args: "run jsr/version_not_found/main.ts",
+ output: "jsr/version_not_found/main.out",
+ envs: env_vars_for_jsr_tests(),
+ http_server: true,
+ exit_code: 1,
+});
+
+#[test]
+fn specifiers_in_lockfile() {
+ let test_context = TestContextBuilder::for_jsr().use_temp_cwd().build();
+ let temp_dir = test_context.temp_dir();
+
+ temp_dir.write(
+ "main.ts",
+ r#"import version from "jsr:@denotest/no_module_graph@0.1";
+
+console.log(version);"#,
+ );
+ temp_dir.write("deno.json", "{}"); // to automatically create a lockfile
+
+ test_context
+ .new_command()
+ .args("run --quiet main.ts")
+ .run()
+ .assert_matches_text("0.1.1\n");
+
+ let lockfile_path = temp_dir.path().join("deno.lock");
+ let mut lockfile = Lockfile::new(lockfile_path.to_path_buf(), false).unwrap();
+ *lockfile
+ .content
+ .packages
+ .specifiers
+ .get_mut("jsr:@denotest/no_module_graph@0.1")
+ .unwrap() = "jsr:@denotest/no_module_graph@0.1.0".to_string();
+ lockfile_path.write(lockfile.as_json_string());
+
+ test_context
+ .new_command()
+ .args("run --quiet main.ts")
+ .run()
+ .assert_matches_text("0.1.0\n");
+}
+
+#[test]
+fn reload_info_not_found_cache_but_exists_remote() {
+ fn remove_version(registry_json: &mut Value, version: &str) {
+ registry_json
+ .as_object_mut()
+ .unwrap()
+ .get_mut("versions")
+ .unwrap()
+ .as_object_mut()
+ .unwrap()
+ .remove(version);
+ }
+
+ fn remove_version_for_package(
+ deno_dir: &util::TempDir,
+ package: &str,
+ version: &str,
+ ) {
+ let specifier =
+ Url::parse(&format!("http://127.0.0.1:4250/{}/meta.json", package))
+ .unwrap();
+ let registry_json_path = deno_dir
+ .path()
+ .join("deps")
+ .join(deno_cache_dir::url_to_filename(&specifier).unwrap());
+ let mut registry_json = registry_json_path.read_json_value();
+ remove_version(&mut registry_json, version);
+ registry_json_path.write_json(&registry_json);
+ }
+
+ // This tests that when a local machine doesn't have a version
+ // specified in a dependency that exists in the npm registry
+ let test_context = TestContextBuilder::for_jsr().use_temp_cwd().build();
+ let deno_dir = test_context.deno_dir();
+ let temp_dir = test_context.temp_dir();
+ temp_dir.write(
+ "main.ts",
+ "import { add } from 'jsr:@denotest/add@1'; console.log(add(1, 2));",
+ );
+
+ // cache successfully to the deno_dir
+ let output = test_context.new_command().args("cache main.ts").run();
+ output.assert_matches_text(concat!(
+ "Download http://127.0.0.1:4250/@denotest/add/meta.json\n",
+ "Download http://127.0.0.1:4250/@denotest/add/1.0.0_meta.json\n",
+ "Download http://127.0.0.1:4250/@denotest/add/1.0.0/mod.ts\n",
+ ));
+
+ // modify the package information in the cache to remove the latest version
+ remove_version_for_package(deno_dir, "@denotest/add", "1.0.0");
+
+ // should error when `--cache-only` is used now because the version is not in the cache
+ let output = test_context
+ .new_command()
+ .args("run --cached-only main.ts")
+ .run();
+ output.assert_exit_code(1);
+ output.assert_matches_text("error: Failed to resolve version constraint. Try running again without --cached-only
+ at file:///[WILDCARD]main.ts:1:21
+");
+
+ // now try running without it, it should download the package now
+ test_context
+ .new_command()
+ .args("run main.ts")
+ .run()
+ .assert_matches_text(concat!(
+ "Download http://127.0.0.1:4250/@denotest/add/meta.json\n",
+ "Download http://127.0.0.1:4250/@denotest/add/1.0.0_meta.json\n",
+ "3\n",
+ ))
+ .assert_exit_code(0);
+}