deno/tests/integration/pm_tests.rs
Bartek Iwańczuk 6b95c53e48
feat(add): always produce multiline config file (#23077)
This commit changes `deno add` to always produce a multiline config
file.

In v1.41.3:
```
$ mkdir foo
$ cd foo
$ deno add @std/assert
Created deno.json configuration file.
Add @std/assert - jsr:@std/assert@^0.220.0

$ cat deno.json
{ "imports": { "@std/assert": "jsr:@std/assert@^0.220.0" } }
```

Now:
```
$ mkdir foo
$ cd foo
$ deno add @std/assert
Created deno.json configuration file.
Add @std/assert - jsr:@std/assert@^0.220.0

$ cat deno.json
{ 
  "imports": {
    "@std/assert": "jsr:@std/assert@^0.220.0"
  }
}
```
2024-03-26 17:40:24 -04:00

135 lines
3.7 KiB
Rust

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use deno_core::serde_json::json;
use test_util::assert_contains;
use test_util::env_vars_for_jsr_npm_tests;
use test_util::TestContextBuilder;
#[test]
fn add_basic() {
let starting_deno_json = json!({
"name": "@foo/bar",
"version": "1.0.0",
"exports": "./mod.ts",
});
let context = pm_context_builder().build();
let temp_dir = context.temp_dir().path();
temp_dir.join("deno.json").write_json(&starting_deno_json);
let output = context.new_command().args("add @denotest/add").run();
output.assert_exit_code(0);
let output = output.combined_output();
assert_contains!(output, "Add @denotest/add");
temp_dir.join("deno.json").assert_matches_json(json!({
"name": "@foo/bar",
"version": "1.0.0",
"exports": "./mod.ts",
"imports": {
"@denotest/add": "jsr:@denotest/add@^1.0.0"
}
}));
}
#[test]
fn add_basic_no_deno_json() {
let context = pm_context_builder().build();
let temp_dir = context.temp_dir().path();
let output = context.new_command().args("add @denotest/add").run();
output.assert_exit_code(0);
let output = output.combined_output();
assert_contains!(output, "Add @denotest/add");
// Don't use `assert_matches_json` to ensure the file is properly formatted.
let expected = r#"{
"imports": {
"@denotest/add": "jsr:@denotest/add@^1.0.0"
}
}
"#;
temp_dir.join("deno.json").assert_matches_text(expected);
}
#[test]
fn add_version_contraint() {
let context = pm_context_builder().build();
let temp_dir = context.temp_dir().path();
let output = context.new_command().args("add @denotest/add@1").run();
output.assert_exit_code(0);
let output = output.combined_output();
assert_contains!(output, "Add @denotest/add");
temp_dir.join("deno.json").assert_matches_json(json!({
"imports": {
"@denotest/add": "jsr:@denotest/add@^1.0.0"
}
}));
}
#[test]
fn add_tilde() {
let context = pm_context_builder().build();
let temp_dir = context.temp_dir().path();
let output = context.new_command().args("add @denotest/add@~1").run();
output.assert_exit_code(0);
let output = output.combined_output();
assert_contains!(output, "Add @denotest/add");
temp_dir.join("deno.json").assert_matches_json(json!({
"imports": {
"@denotest/add": "jsr:@denotest/add@~1.0.0"
}
}));
}
#[test]
fn add_multiple() {
let starting_deno_json = json!({
"name": "@foo/bar",
"version": "1.0.0",
"exports": "./mod.ts",
});
let context = pm_context_builder().build();
let temp_dir = context.temp_dir().path();
temp_dir.join("deno.json").write_json(&starting_deno_json);
let output = context
.new_command()
.args("add @denotest/add @denotest/subset-type-graph")
.run();
output.assert_exit_code(0);
let output = output.combined_output();
assert_contains!(output, "Add @denotest/add");
temp_dir.join("deno.json").assert_matches_json(json!({
"name": "@foo/bar",
"version": "1.0.0",
"exports": "./mod.ts",
"imports": {
"@denotest/add": "jsr:@denotest/add@^1.0.0",
"@denotest/subset-type-graph": "jsr:@denotest/subset-type-graph@^0.1.0"
}
}));
}
#[test]
fn add_npm() {
let context = pm_context_builder().build();
let temp_dir = context.temp_dir().path();
let output = context.new_command().args("add npm:chalk@4.1").run();
output.assert_exit_code(0);
let output = output.combined_output();
assert_contains!(output, "Add chalk");
temp_dir.join("deno.json").assert_matches_json(json!({
"imports": {
"chalk": "npm:chalk@^4.1.2"
}
}));
}
fn pm_context_builder() -> TestContextBuilder {
TestContextBuilder::new()
.use_http_server()
.envs(env_vars_for_jsr_npm_tests())
.use_temp_cwd()
}