fmq 0.0.2

FrontMatter querying made easy
Documentation
use std::path::PathBuf;

use assert_cmd::Command;

pub enum File {
    Full,
    Partial,
    None,
    Missing,
    Invalid,
}

fn path(file: File) -> PathBuf {
    match file {
        File::Full => "./tests/fixtures/full.md".try_into().unwrap(),
        File::Partial => "./tests/fixtures/partial.md".try_into().unwrap(),
        File::None => "./tests/fixtures/no-fm.md".try_into().unwrap(),
        File::Missing => "./tests/fixtures/missing.md".try_into().unwrap(),
        File::Invalid => "./tests/fixtures/invalid.md".try_into().unwrap(),
    }
}

#[test]
fn dry_run() {
    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd.assert();
    assert.failure();
}

#[test]
fn happy() {
    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd.arg(path(File::Full)).assert();
    assert
        .success()
        .stdout(predicates::str::contains("file: ./tests/fixtures/full.md"))
        .stdout(predicates::str::contains("date: 2023-09-26"))
        .stdout(predicates::str::contains("title: Lorem Ipsum"))
        .stdout(predicates::str::contains("extra: asdf jkl"))
        .stdout(predicates::str::contains("number: 0"));
}

#[test]
fn select() {
    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd
        .args(&["-s", "title date missing"])
        .arg(path(File::Full))
        .assert();
    assert
        .success()
        .stdout("./tests/fixtures/full.md, Lorem Ipsum, 2023-09-26, null\n");
}

#[test]
fn sort() {
    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd
        .args(&["-s", "title date", "-o", "title"])
        .arg(path(File::Full))
        .arg(path(File::Partial))
        .assert();
    assert
        .success()
        .stdout("./tests/fixtures/partial.md, Another Title, 2023-09-27\n./tests/fixtures/full.md, Lorem Ipsum, 2023-09-26\n");
}

#[test]
fn other_sort() {
    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd
        .args(&["-s", "title date", "-o", "date"])
        .arg(path(File::Full))
        .arg(path(File::Partial))
        .assert();
    assert
        .success()
        .stdout("./tests/fixtures/full.md, Lorem Ipsum, 2023-09-26\n./tests/fixtures/partial.md, Another Title, 2023-09-27\n");
}

#[test]
fn condition() {
    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd
        .args(&["-s", "title date", "-c", "date == 2023-09-26"])
        .arg(path(File::Full))
        .arg(path(File::Partial))
        .arg(path(File::Invalid))
        .arg(path(File::None))
        .assert();
    assert
        .success()
        .stdout("./tests/fixtures/full.md, Lorem Ipsum, 2023-09-26\n");
}

#[test]
fn no_args() {
    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd.arg(path(File::Full)).assert();
    assert.success();

    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd.arg(path(File::Partial)).assert();
    assert.success();

    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd.arg(path(File::Missing)).assert();
    assert.failure();

    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd.arg(path(File::None)).assert();
    assert.success();

    let mut cmd = Command::cargo_bin("fmq").unwrap();
    let assert = cmd.arg(path(File::Invalid)).assert();
    assert.success();
}