0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

chore: add lockfile tests (#7816)

Fixes #7653
This commit is contained in:
JavascriptMick 2020-10-05 10:32:18 +11:00 committed by GitHub
parent 3d65177dbc
commit f377b611ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -82,3 +82,148 @@ impl Lockfile {
self.map.insert(specifier.to_string(), checksum);
}
}
#[cfg(test)]
mod tests {
use super::*;
use deno_core::serde_json;
use deno_core::serde_json::json;
use std::fs::File;
use std::io::prelude::*;
use std::io::Write;
use tempfile::TempDir;
fn setup() -> (TempDir, String) {
let temp_dir = TempDir::new().expect("could not create temp dir");
let file_path = temp_dir.path().join("valid_lockfile.json");
let mut file = File::create(file_path).expect("write file fail");
let value: serde_json::Value = json!({
"https://deno.land/std@0.71.0/textproto/mod.ts": "3118d7a42c03c242c5a49c2ad91c8396110e14acca1324e7aaefd31a999b71a4",
"https://deno.land/std@0.71.0/async/delay.ts": "35957d585a6e3dd87706858fb1d6b551cb278271b03f52c5a2cb70e65e00c26a"
});
file.write_all(value.to_string().as_bytes()).unwrap();
let file_path_buf = temp_dir.path().join("valid_lockfile.json");
let file_path = file_path_buf.to_str().expect("file path fail").to_string();
(temp_dir, file_path)
}
fn teardown(temp_dir: TempDir) {
temp_dir.close().expect("file close error");
}
#[test]
fn new_nonexistent_lockfile() {
let file_path = String::from("nonexistent_lock_file.json");
assert!(Lockfile::new(file_path, false).is_err());
}
#[test]
fn new_valid_lockfile() {
let (temp_dir, file_path) = setup();
let result = Lockfile::new(file_path, false).unwrap();
let keys: Vec<String> = result.map.keys().cloned().collect();
let expected_keys = vec![
String::from("https://deno.land/std@0.71.0/async/delay.ts"),
String::from("https://deno.land/std@0.71.0/textproto/mod.ts"),
];
assert_eq!(keys.len(), 2);
assert_eq!(keys, expected_keys);
teardown(temp_dir);
}
#[test]
fn new_lockfile_from_file_and_insert() {
let (temp_dir, file_path) = setup();
let mut lockfile = Lockfile::new(file_path, false).unwrap();
lockfile.insert(
"https://deno.land/std@0.71.0/io/util.ts",
"Here is some source code",
);
let keys: Vec<String> = lockfile.map.keys().cloned().collect();
let expected_keys = vec![
String::from("https://deno.land/std@0.71.0/async/delay.ts"),
String::from("https://deno.land/std@0.71.0/io/util.ts"),
String::from("https://deno.land/std@0.71.0/textproto/mod.ts"),
];
assert_eq!(keys.len(), 3);
assert_eq!(keys, expected_keys);
teardown(temp_dir);
}
#[test]
fn new_lockfile_and_write() {
let (temp_dir, file_path) = setup();
let mut lockfile = Lockfile::new(file_path, true).unwrap();
lockfile.insert(
"https://deno.land/std@0.71.0/textproto/mod.ts",
"Here is some source code",
);
lockfile.insert(
"https://deno.land/std@0.71.0/io/util.ts",
"more source code here",
);
lockfile.insert(
"https://deno.land/std@0.71.0/async/delay.ts",
"this source is really exciting",
);
lockfile.write().expect("unable to write");
let file_path_buf = temp_dir.path().join("valid_lockfile.json");
let file_path = file_path_buf.to_str().expect("file path fail").to_string();
// read the file contents back into a string and check
let mut checkfile = File::open(file_path).expect("Unable to open the file");
let mut contents = String::new();
checkfile
.read_to_string(&mut contents)
.expect("Unable to read the file");
assert!(contents.contains(
"fedebba9bb82cce293196f54b21875b649e457f0eaf55556f1e318204947a28f"
)); // sha-256 hash of the source 'Here is some source code'
teardown(temp_dir);
}
#[test]
fn check_or_insert_lockfile_false() {
let (temp_dir, file_path) = setup();
let mut lockfile = Lockfile::new(file_path, false).unwrap();
lockfile.insert(
"https://deno.land/std@0.71.0/textproto/mod.ts",
"Here is some source code",
);
let check_true = lockfile.check_or_insert(
"https://deno.land/std@0.71.0/textproto/mod.ts",
"Here is some source code",
);
assert!(check_true);
let check_false = lockfile.check_or_insert(
"https://deno.land/std@0.71.0/textproto/mod.ts",
"This is new Source code",
);
assert!(!check_false);
teardown(temp_dir);
}
}