use super::*;
#[test]
fn test_insert_suggestion_from_app_when_query_none() {
let mut app = test_app(r#"{"test": true}"#);
app.query = None;
let suggestion = test_suggestion("test");
insert_suggestion_from_app(&mut app, &suggestion);
assert!(app.query.is_none());
}
#[test]
fn test_nested_array_bracket_handling() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".services[].capacityProviderStrategy[]");
query_state.base_query_for_suggestions = Some(".services[]".to_string());
query_state.base_type_for_suggestions = Some(ResultType::DestructuredObjects);
let suggestion = test_suggestion("[].capacityProviderStrategy");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("capacityProviderStrategy"));
}
#[test]
fn test_open_paren_trigger() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".items | map(.");
query_state.base_query_for_suggestions = Some(".items".to_string());
query_state.base_type_for_suggestions = Some(ResultType::ArrayOfObjects);
let suggestion = test_suggestion("id");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("map("));
assert!(result.contains("id"));
}
#[test]
fn test_open_bracket_trigger() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".items[.");
query_state.base_query_for_suggestions = Some(".items".to_string());
query_state.base_type_for_suggestions = Some(ResultType::Array);
let suggestion = test_suggestion("0");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains(".items["));
}
#[test]
fn test_open_brace_trigger() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str("{name:.");
query_state.base_query_for_suggestions = Some(".".to_string());
query_state.base_type_for_suggestions = Some(ResultType::Object);
let suggestion = test_suggestion("name");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("name"));
}
#[test]
fn test_question_mark_trigger() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".field?.");
query_state.base_query_for_suggestions = Some(".field".to_string());
query_state.base_type_for_suggestions = Some(ResultType::Object);
let suggestion = test_suggestion("subfield");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains(".field?"));
assert!(result.contains("subfield"));
}
#[test]
fn test_dot_trigger() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".user..");
query_state.base_query_for_suggestions = Some(".user".to_string());
query_state.base_type_for_suggestions = Some(ResultType::Object);
let suggestion = test_suggestion("profile");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("profile"));
}
#[test]
fn test_close_paren_trigger() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".items | map(.id).");
query_state.base_query_for_suggestions = Some(".items | map(.id)".to_string());
query_state.base_type_for_suggestions = Some(ResultType::Array);
let suggestion = test_suggestion("length");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("map(.id)"));
assert!(result.contains("length"));
}
#[test]
fn test_close_brace_trigger() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str("{name:.name}.");
query_state.base_query_for_suggestions = Some("{name:.name}".to_string());
query_state.base_type_for_suggestions = Some(ResultType::Object);
let suggestion = test_suggestion("name");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("{name:.name}"));
}
#[test]
fn test_base_query_fallback_when_none() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".test");
query_state.base_query_for_suggestions = None;
let suggestion = test_suggestion("field");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("field"));
}
#[test]
fn test_array_iteration_when_cursor_at_partial_start() {
let (mut textarea, mut query_state) = setup_insertion_test("");
textarea.delete_line_by_head();
textarea.insert_str(".a");
query_state.base_query_for_suggestions = Some(".".to_string());
query_state.base_type_for_suggestions = Some(ResultType::Array);
let suggestion = test_suggestion("[].items");
insert_suggestion(&mut textarea, &mut query_state, &suggestion);
let result: &str = textarea.lines()[0].as_ref();
assert!(result.contains("[].items"));
}