use cartulary::infra::driven::fs::config::CURRENT_SCHEMA_VERSION;
use std::fs;
use cucumber::{given, when};
use indoc::formatdoc;
use crate::CartularyWorld;
#[given(expr = "a cartulary workspace with source {string}")]
async fn workspace_with_source(world: &mut CartularyWorld, source_name: String) {
let dir = tempfile::TempDir::new().expect("failed to create temp dir");
let toml = formatdoc! {r#"
version = {CURRENT_SCHEMA_VERSION}
[decisions]
types = ["adr"]
[decisions.adr]
dir = "docs/adr"
[issues]
dir = "docs/issues"
[sources.{source_name}]
type = "gitlab"
url = "https://gitlab.example"
project = "g/p"
token_env = "GITLAB_TOKEN"
"#};
fs::write(dir.path().join("cartulary.toml"), toml).expect("failed to write cartulary.toml");
world.workspace = Some(dir);
}
#[when(expr = "I run {string} without GITLAB_TOKEN set")]
async fn run_command_no_token(world: &mut CartularyWorld, command: String) {
let dir = world.workspace.as_ref().expect("workspace not initialized");
let mut parts = command.split_whitespace();
let bin = assert_cmd::cargo_bin!("cartu");
let args: Vec<&str> = parts.by_ref().skip(1).collect();
let output = std::process::Command::new(bin)
.args(&args)
.current_dir(dir.path())
.env_remove("GITLAB_TOKEN")
.output()
.expect("failed to run cartu");
world.last_output = Some(output);
}