#![cfg(feature = "integration")]
mod test_helpers;
use assert_cmd::Command;
use std::fs;
use tempfile::TempDir;
#[allow(deprecated)] fn aperture_cmd() -> Command {
Command::cargo_bin("aperture").unwrap()
}
fn create_minimal_spec(temp_dir: &TempDir) -> std::path::PathBuf {
let spec_content = r#"
openapi: "3.0.0"
info:
title: "Test API"
version: "1.0.0"
servers:
- url: https://{region}.api.example.com
variables:
region:
default: us
enum: [us, eu]
paths:
/users:
get:
operationId: listUsers
summary: List all users
tags:
- users
responses:
"200":
description: Success
content:
application/json:
schema:
type: object
properties:
users:
type: array
items:
type: object
properties:
id:
type: integer
name:
type: string
"#;
let spec_file = temp_dir.path().join("spec.yaml");
fs::write(&spec_file, spec_content).unwrap();
spec_file
}
#[test]
fn test_global_flags_visible_in_main_help() {
let output = aperture_cmd().args(["--help"]).assert().success();
let stdout = String::from_utf8_lossy(&output.get_output().stdout);
assert!(
stdout.contains("--jq"),
"Expected --jq to be visible in main help"
);
assert!(
stdout.contains("--format"),
"Expected --format to be visible in main help"
);
}
#[test]
fn test_hidden_flags_still_functional() {
let temp_dir = TempDir::new().unwrap();
let spec_file = create_minimal_spec(&temp_dir);
aperture_cmd()
.env("APERTURE_CONFIG_DIR", temp_dir.path())
.args([
"--quiet",
"config",
"add",
"test-api",
spec_file.to_str().unwrap(),
])
.assert()
.success();
aperture_cmd()
.env("APERTURE_CONFIG_DIR", temp_dir.path())
.args([
"api",
"test-api",
"--describe-json",
"--format",
"json", ])
.assert()
.success();
}
#[test]
fn test_global_flags_hidden_from_dynamic_command_tree() {
let temp_dir = TempDir::new().unwrap();
let spec_file = create_minimal_spec(&temp_dir);
aperture_cmd()
.env("APERTURE_CONFIG_DIR", temp_dir.path())
.args([
"--quiet",
"config",
"add",
"test-api",
spec_file.to_str().unwrap(),
])
.assert()
.success();
let output = aperture_cmd()
.env("APERTURE_CONFIG_DIR", temp_dir.path())
.args(["api", "test-api", "users", "list-users", "--help"])
.output()
.expect("Failed to execute command");
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("Options:") || stderr.contains("-h, --help"),
"Expected help output to contain Options section"
);
assert!(
!stderr.contains("--jq"),
"Expected --jq to be hidden from dynamic command help"
);
assert!(
!stderr.contains("--format ") && !stderr.contains("--format\n"),
"Expected --format to be hidden from dynamic command help"
);
assert!(
!stderr.contains("--server-var"),
"Expected --server-var to be hidden from dynamic command help"
);
}
#[test]
fn test_hidden_flags_work_at_operation_level() {
let temp_dir = TempDir::new().unwrap();
let spec_file = create_minimal_spec(&temp_dir);
aperture_cmd()
.env("APERTURE_CONFIG_DIR", temp_dir.path())
.args([
"--quiet",
"config",
"add",
"test-api",
spec_file.to_str().unwrap(),
])
.assert()
.success();
let output = aperture_cmd()
.env("APERTURE_CONFIG_DIR", temp_dir.path())
.args(["api", "test-api", "--describe-json"])
.assert()
.success();
let stdout = String::from_utf8_lossy(&output.get_output().stdout);
assert!(stdout.contains("listUsers") || stdout.contains("list-users"));
assert!(stdout.contains("commands"));
}