diff options
author | Matt Mastracci <matthew@mastracci.com> | 2024-02-10 13:22:13 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-10 20:22:13 +0000 |
commit | f5e46c9bf2f50d66a953fa133161fc829cecff06 (patch) | |
tree | 8faf2f5831c1c7b11d842cd9908d141082c869a5 /tests/integration/jsr_tests.rs | |
parent | d2477f780630a812bfd65e3987b70c0d309385bb (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.rs | 183 |
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(®istry_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); +} |