wilayah 0.6.1

Location lookup for Indonesian villages by GPS coordinates or name
use wilayah::builder::PipelineError;

#[test]
fn test_pipeline_error_new() {
    let err = PipelineError::new("something failed");
    assert_eq!(format!("{err}"), "something failed");
}

#[test]
fn test_pipeline_error_context() {
    let err = PipelineError::new("inner").context("outer");
    assert_eq!(format!("{err}"), "outer");
    assert!(
        std::error::Error::source(&err).is_some(),
        "context should preserve source"
    );
}

#[test]
fn test_pipeline_error_from_io() {
    let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "file missing");
    let err = PipelineError::from(io_err);
    let msg = format!("{err}");
    assert!(msg.contains("file missing"), "msg: {msg}");
    assert!(std::error::Error::source(&err).is_some());
}

#[test]
fn test_pipeline_error_from_rusqlite() {
    let sqlite_err = rusqlite::Error::InvalidColumnIndex(99);
    let err = PipelineError::from(sqlite_err);
    assert!(std::error::Error::source(&err).is_some());
}

#[test]
fn test_pipeline_error_from_json() {
    let json_err = serde_json::from_str::<i32>("not a number").unwrap_err();
    let err = PipelineError::from(json_err);
    assert!(std::error::Error::source(&err).is_some());
}

#[test]
fn test_pipeline_error_source_chain() {
    let err = PipelineError::new("root").context("middle").context("top");
    assert_eq!(format!("{err}"), "top");
    let src = std::error::Error::source(&err).unwrap();
    assert_eq!(format!("{src}"), "middle");
    let src2 = std::error::Error::source(src).unwrap();
    assert_eq!(format!("{src2}"), "root");
    assert!(std::error::Error::source(src2).is_none());
}