rustainers 0.15.1

A simple, opinionated way to run containers for tests.
Documentation
//! Envorinment variable tests.

use std::collections::HashMap;

use assert2::check;
use rstest::rstest;
use ulid::Ulid;

use rustainers::images::Alpine;
use rustainers::runner::{RunOption, Runner};

mod common;
pub use self::common::*;

#[rstest]
#[tokio::test]
#[allow(clippy::indexing_slicing)]
async fn should_work_with_env(runner: &Runner) -> anyhow::Result<()> {
    let data1 = Ulid::new();
    let data2 = "With space   ";
    let data3 = "with = plop";

    let options = RunOption::builder()
        .with_remove(true)
        .with_env([
            ("TEST_ENV_DATA1", data1.to_string()),
            ("TEST_ENV_DATA2", data2.to_string()),
            ("TEST_ENV_DATA3", data3.to_string()),
        ])
        .build();
    let container = runner.start_with_options(Alpine, options).await?;

    let result = runner.exec(&container, ["env"]).await?;
    let vars = result
        .lines()
        .filter(|line| !line.is_empty())
        .filter_map(|line| line.split_once('='))
        .collect::<HashMap<_, _>>();

    check!(vars["TEST_ENV_DATA1"] == data1.to_string());
    check!(vars["TEST_ENV_DATA2"] == data2);
    check!(vars["TEST_ENV_DATA3"] == data3);

    Ok(())
}