wit 0.16.0

A tool for building and publishing WIT packages to a registry.
Documentation
use std::{fs, path::Path};

use anyhow::Result;
use assert_cmd::prelude::*;
use predicates::str::contains;
use tempfile::TempDir;

use crate::support::*;

mod support;

#[test]
fn help() {
    for arg in ["help init", "init -h", "init --help"] {
        wit(arg.split_whitespace())
            .assert()
            .stdout(contains("Initialize a new WIT package"))
            .success();
    }
}

#[test]
fn it_creates_the_expected_files() -> Result<()> {
    let dir = TempDir::new()?;

    wit(["init", "foo"])
        .current_dir(dir.path())
        .assert()
        .stderr(contains(format!(
            "Created configuration file `{path}`",
            path = Path::new("foo").join("wit.toml").display()
        )))
        .success();

    let proj_dir = dir.path().join("foo");
    assert!(proj_dir.join("wit.toml").is_file());

    Ok(())
}

#[test]
fn it_supports_registry_option() -> Result<()> {
    let dir = TempDir::new()?;

    wit(["init", "bar", "--registry", "https://example.com"])
        .current_dir(dir.path())
        .assert()
        .stderr(contains(format!(
            "Created configuration file `{path}`",
            path = Path::new("bar").join("wit.toml").display()
        )))
        .success();

    let proj_dir = dir.path().join("bar");
    assert!(fs::read_to_string(proj_dir.join("wit.toml"))?
        .contains("default = \"https://example.com/\""));

    Ok(())
}