minco-test 1.0.0

In-process HTTP clients, deterministic fixtures, and command evidence for Minco applications
Documentation
use minco_test::FixtureSequence;

#[derive(Debug, PartialEq, Eq)]
struct OrderFixture {
    id: String,
    customer: &'static str,
}

#[test]
fn fixture_builders_are_repeatable_and_orm_independent() {
    let build = || {
        let mut fixtures = FixtureSequence::new("orders").expect("valid fixture namespace");
        let first = fixtures
            .build("order", |identity| OrderFixture {
                id: identity.stable_id,
                customer: "Ada",
            })
            .expect("build first fixture");
        let second = fixtures
            .build("order", |identity| OrderFixture {
                id: identity.stable_id,
                customer: "Grace",
            })
            .expect("build second fixture");
        (first, second)
    };

    let first_run = build();
    let second_run = build();
    assert_eq!(first_run, second_run);
    assert_eq!(first_run.0.id, "orders:order:00000001");
    assert_eq!(first_run.1.id, "orders:order:00000002");
}

#[test]
fn invalid_fixture_identity_parts_fail_closed_without_advancing_the_sequence() {
    let mut fixtures = FixtureSequence::new("orders").expect("valid fixture namespace");
    let error = fixtures
        .next("Order Item")
        .expect_err("invalid fixture kind");
    assert!(error.to_string().contains("fixture kind"));

    let identity = fixtures.next("order-item").expect("valid fixture kind");
    assert_eq!(identity.ordinal, 1);
    assert_eq!(identity.stable_id, "orders:order-item:00000001");
}