yerba 0.1.2

YAML Editing and Refactoring with Better Accuracy
Documentation
use yerba::Document;

#[test]
fn test_find_items_by_equality() {
  let yaml = "- kind: keynote\n  title: Opening\n- kind: talk\n  title: Testing\n- kind: keynote\n  title: Closing\n";
  let document = Document::parse(yaml).unwrap();

  let results = document.find_items("[]", ".kind == keynote");

  assert_eq!(results.len(), 2);
  assert!(results[0].text.contains("Opening"));
  assert!(results[1].text.contains("Closing"));
}

#[test]
fn test_find_items_by_contains() {
  let yaml = "- title: Talk A\n  speakers:\n    - Alice\n    - Bob\n- title: Talk B\n  speakers:\n    - Charlie\n";
  let document = Document::parse(yaml).unwrap();

  let results = document.find_items("[]", ".speakers contains \"Alice\"");

  assert_eq!(results.len(), 1);
  assert!(results[0].text.contains("Talk A"));
}

#[test]
fn test_find_items_no_matches() {
  let yaml = "- kind: talk\n  title: A\n- kind: talk\n  title: B\n";
  let document = Document::parse(yaml).unwrap();

  let results = document.find_items("[]", ".kind == keynote");

  assert!(results.is_empty());
}

#[test]
fn test_find_items_nested_path() {
  let yaml = "conferences:\n  - name: RailsConf\n    year: 2024\n  - name: RubyKaigi\n    year: 2025\n";
  let document = Document::parse(yaml).unwrap();

  let results = document.find_items("conferences.[]", ".year == 2024");

  assert_eq!(results.len(), 1);
  assert!(results[0].text.contains("RailsConf"));
}

#[test]
fn test_find_items_by_not_equals() {
  let yaml = "- kind: keynote\n  title: A\n- kind: talk\n  title: B\n- kind: talk\n  title: C\n";
  let document = Document::parse(yaml).unwrap();

  let results = document.find_items("[]", ".kind != keynote");

  assert_eq!(results.len(), 2);
  assert!(results[0].text.contains("title: B"));
  assert!(results[1].text.contains("title: C"));
}

#[test]
fn test_find_items_returns_line_numbers() {
  let yaml = "- id: first\n  title: A\n- id: second\n  title: B\n- id: third\n  title: C\n";
  let document = Document::parse(yaml).unwrap();

  let results = document.find_items("[]", ".id == second");

  assert_eq!(results.len(), 1);
  assert_eq!(results[0].line, 3);
}

#[test]
fn test_find_all_returns_line_numbers() {
  let yaml = "- id: first\n- id: second\n- id: third\n";
  let document = Document::parse(yaml).unwrap();

  let results = document.find_all("[]");

  assert_eq!(results.len(), 3);
  assert_eq!(results[0].line, 1);
  assert_eq!(results[1].line, 2);
  assert_eq!(results[2].line, 3);
}