fabro/lib/apps/fabro-cli/tests/it/cmd/repo_init.rs
2026-09-01 16:14:34 -04:00

139 lines
3.9 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#![expect(
clippy::disallowed_methods,
reason = "integration tests stage fixtures with sync std::fs; test infrastructure, not Tokio-hot path"
)]
use fabro_test::{fabro_snapshot, test_context};
use insta::assert_snapshot;
#[test]
fn help() {
let context = test_context!();
let mut cmd = context.command();
cmd.args(["repo", "init", "--help"]);
fabro_snapshot!(context.filters(), cmd, @"
success: true
exit_code: 0
----- stdout -----
Initialize a new project
Usage: fabro repo init [OPTIONS]
Options:
--json Output as JSON [env: FABRO_JSON=]
--server <SERVER> Fabro server target: http(s) URL or absolute Unix socket path [env: FABRO_SERVER=]
--debug Enable DEBUG-level logging (default is INFO) [env: FABRO_DEBUG=]
--no-upgrade-check Disable automatic upgrade check [env: FABRO_NO_UPGRADE_CHECK=true]
--quiet Suppress non-essential output [env: FABRO_QUIET=]
--verbose Enable verbose output [env: FABRO_VERBOSE=]
-h, --help Print help
----- stderr -----
");
}
#[test]
fn repo_init_creates_project_toml_and_hello_workflow() {
let context = test_context!();
context.git_init();
let mut cmd = context.command();
cmd.args(["repo", "init"]);
fabro_snapshot!(context.filters(), cmd, @"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
✔ .fabro/project.toml
✔ .fabro/workflows/hello/workflow.fabro
✔ .fabro/workflows/hello/workflow.toml
Project initialized! Run a workflow with:
fabro run hello
! No git remote found — skipping GitHub check
Run `git remote add origin <url>`, then `gh auth login` or `fabro install` to configure GitHub access
");
assert_snapshot!(
std::fs::read_to_string(context.temp_dir.join(".fabro/project.toml")).unwrap(),
@r###"
# Fabro project configuration
# https://docs.fabro.computer/getting-started/quick-start
_version = 1
"###
);
assert_snapshot!(
std::fs::read_to_string(context.temp_dir.join(".fabro/workflows/hello/workflow.fabro"))
.unwrap(),
@r###"
digraph Hello {
graph [goal="Say hello and demonstrate a basic Fabro workflow"]
rankdir=LR
start [shape=Mdiamond, label="Start"]
exit [shape=Msquare, label="Exit"]
greet [label="Greet", prompt="Say hello! Introduce yourself and explain that this is a test of the Fabro workflow engine."]
start -> greet -> exit
}
"###
);
assert_snapshot!(
std::fs::read_to_string(context.temp_dir.join(".fabro/workflows/hello/workflow.toml"))
.unwrap(),
@r###"
_version = 1
[workflow]
graph = "workflow.fabro"
# Auto-create pull requests on successful workflow runs.
[run.pull_request]
enabled = true
draft = true
# auto_merge = true
"###
);
}
#[test]
fn repo_init_rejects_already_initialized_repo() {
let context = test_context!();
context.git_init();
std::fs::create_dir_all(context.temp_dir.join(".fabro")).unwrap();
std::fs::write(
context.temp_dir.join(".fabro/project.toml"),
"_version = 1\n",
)
.unwrap();
let mut cmd = context.command();
cmd.args(["repo", "init"]);
fabro_snapshot!(context.filters(), cmd, @"
success: false
exit_code: 1
----- stdout -----
----- stderr -----
× already initialized — .fabro/project.toml exists at [TEMP_DIR]/.fabro/project.toml
");
}
#[test]
fn repo_init_errors_outside_git_repo() {
let context = test_context!();
let mut cmd = context.command();
cmd.args(["repo", "init"]);
fabro_snapshot!(context.filters(), cmd, @"
success: false
exit_code: 1
----- stdout -----
----- stderr -----
× not a git repository — run `git init` first
");
}