use std::fs; use insta::{assert_yaml_snapshot, with_settings}; use tempfile::tempdir; use crate::rojo_test::{internable::InternAndRedact, serve_util::run_serve_test}; #[test] fn empty() { run_serve_test("empty", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("empty_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "empty_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn scripts() { run_serve_test("scripts", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("scripts_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); with_settings!({ sort_maps => true }, { assert_yaml_snapshot!( "scripts_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); fs::write(session.path().join("src/foo.lua"), "Updated foo!").unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "scripts_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); with_settings!({ sort_maps => true }, { assert_yaml_snapshot!( "scripts_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); }); } #[test] fn add_folder() { run_serve_test("add_folder", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("add_folder_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "add_folder_all", read_response.intern_and_redact(&mut redactions, root_id) ); fs::create_dir(session.path().join("src/my-new-folder")).unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "add_folder_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "add_folder_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn remove_file() { run_serve_test("remove_file", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("remove_file_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "remove_file_all", read_response.intern_and_redact(&mut redactions, root_id) ); fs::remove_file(session.path().join("src/hello.txt")).unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "remove_file_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "remove_file_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn edit_init() { run_serve_test("edit_init", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("edit_init_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "edit_init_all", read_response.intern_and_redact(&mut redactions, root_id) ); fs::write(session.path().join("src/init.lua"), b"-- Edited contents").unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "edit_init_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "edit_init_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn move_folder_of_stuff() { run_serve_test("move_folder_of_stuff", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("move_folder_of_stuff_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "move_folder_of_stuff_all", read_response.intern_and_redact(&mut redactions, root_id) ); // Create a directory full of stuff we can move in let src_dir = tempdir().unwrap(); let stuff_path = src_dir.path().join("new-stuff"); fs::create_dir(&stuff_path).unwrap(); // Make a bunch of random files in our stuff folder for i in 0..10 { let file_name = stuff_path.join(format!("{}.txt", i)); let file_contents = format!("File #{}", i); fs::write(file_name, file_contents).unwrap(); } // We're hoping that this rename gets picked up as one event. This test // will fail otherwise. fs::rename(stuff_path, session.path().join("src/new-stuff")).unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "move_folder_of_stuff_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "move_folder_of_stuff_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn empty_json_model() { run_serve_test("empty_json_model", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("empty_json_model_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "empty_json_model_all", read_response.intern_and_redact(&mut redactions, root_id) ); fs::write( session.path().join("src/test.model.json"), r#"{"ClassName": "Model"}"#, ) .unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "empty_json_model_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "empty_json_model_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] #[ignore = "Rojo does not watch missing, optional files for changes."] fn add_optional_folder() { run_serve_test("add_optional_folder", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("add_optional_folder", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "add_optional_folder_all", read_response.intern_and_redact(&mut redactions, root_id) ); fs::create_dir(session.path().join("create-later")).unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "add_optional_folder_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "add_optional_folder_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn sync_rule_alone() { run_serve_test("sync_rule_alone", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("sync_rule_alone_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "sync_rule_alone_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn sync_rule_complex() { run_serve_test("sync_rule_complex", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("sync_rule_complex_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "sync_rule_complex_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn sync_rule_no_extension() { run_serve_test("sync_rule_no_extension", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!( "sync_rule_no_extension_info", redactions.redacted_yaml(info) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "sync_rule_no_extension_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn no_name_default_project() { run_serve_test("no_name_default_project", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!( "no_name_default_project_info", redactions.redacted_yaml(info) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "no_name_default_project_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn no_name_project() { run_serve_test("no_name_project", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("no_name_project_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "no_name_project_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn no_name_top_level_project() { run_serve_test("no_name_top_level_project", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!( "no_name_top_level_project_info", redactions.redacted_yaml(info) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "no_name_top_level_project_all", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn ref_properties() { run_serve_test("ref_properties", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("ref_properties_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "ref_properties_all", read_response.intern_and_redact(&mut redactions, root_id) ); fs::write( session.path().join("ModelTarget.model.json"), r#"{ "className": "Folder", "attributes": { "Rojo_Id": "model target 2" }, "children": [ { "name": "ModelPointer", "className": "Model", "attributes": { "Rojo_Target_PrimaryPart": "model target 2" } }, { "name": "ProjectPointer", "className": "Model", "attributes": { "Rojo_Target_PrimaryPart": "project target" } } ] }"#, ) .unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "ref_properties_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "ref_properties_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); } #[test] fn ref_properties_remove() { run_serve_test("ref_properties_remove", |session, mut redactions| { let info = session.get_api_rojo().unwrap(); let root_id = info.root_instance_id; assert_yaml_snapshot!("ref_properties_remove_info", redactions.redacted_yaml(info)); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "ref_properties_remove_all", read_response.intern_and_redact(&mut redactions, root_id) ); fs::remove_file(session.path().join("src/target.model.json")).unwrap(); let subscribe_response = session.get_api_subscribe(0).unwrap(); assert_yaml_snapshot!( "ref_properties_remove_subscribe", subscribe_response.intern_and_redact(&mut redactions, ()) ); let read_response = session.get_api_read(root_id).unwrap(); assert_yaml_snapshot!( "ref_properties_remove_all-2", read_response.intern_and_redact(&mut redactions, root_id) ); }); }