working on workflows
This commit is contained in:
@@ -4,6 +4,11 @@
|
||||
|
||||
use assert_cmd::Command;
|
||||
use predicates::prelude::*;
|
||||
use serde_json::json;
|
||||
use wiremock::{
|
||||
matchers::{body_json, method, path},
|
||||
Mock, ResponseTemplate,
|
||||
};
|
||||
|
||||
mod common;
|
||||
use common::*;
|
||||
@@ -222,6 +227,231 @@ async fn test_pack_get_json_output() {
|
||||
.stdout(predicate::str::contains(r#""ref": "core""#));
|
||||
}
|
||||
|
||||
// ── pack create tests ──────────────────────────────────────────────────
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_create_non_interactive() {
|
||||
let fixture = TestFixture::new().await;
|
||||
fixture.write_authenticated_config("valid_token", "refresh_token");
|
||||
|
||||
mock_pack_create(&fixture.mock_server).await;
|
||||
|
||||
let mut cmd = Command::cargo_bin("attune").unwrap();
|
||||
cmd.env("XDG_CONFIG_HOME", fixture.config_dir_path())
|
||||
.env("HOME", fixture.config_dir_path())
|
||||
.arg("--api-url")
|
||||
.arg(fixture.server_url())
|
||||
.arg("pack")
|
||||
.arg("create")
|
||||
.arg("--ref")
|
||||
.arg("my_pack")
|
||||
.arg("--label")
|
||||
.arg("My Pack")
|
||||
.arg("--description")
|
||||
.arg("A test pack")
|
||||
.arg("--pack-version")
|
||||
.arg("0.1.0")
|
||||
.arg("--tags")
|
||||
.arg("test");
|
||||
|
||||
cmd.assert()
|
||||
.success()
|
||||
.stdout(predicate::str::contains("my_pack"))
|
||||
.stdout(predicate::str::contains("created successfully"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_create_json_output() {
|
||||
let fixture = TestFixture::new().await;
|
||||
fixture.write_authenticated_config("valid_token", "refresh_token");
|
||||
|
||||
mock_pack_create(&fixture.mock_server).await;
|
||||
|
||||
let mut cmd = Command::cargo_bin("attune").unwrap();
|
||||
cmd.env("XDG_CONFIG_HOME", fixture.config_dir_path())
|
||||
.env("HOME", fixture.config_dir_path())
|
||||
.arg("--api-url")
|
||||
.arg(fixture.server_url())
|
||||
.arg("--json")
|
||||
.arg("pack")
|
||||
.arg("create")
|
||||
.arg("--ref")
|
||||
.arg("my_pack");
|
||||
|
||||
cmd.assert()
|
||||
.success()
|
||||
.stdout(predicate::str::contains(r#""ref": "my_pack""#))
|
||||
.stdout(predicate::str::contains(r#""id": 42"#));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_create_conflict() {
|
||||
let fixture = TestFixture::new().await;
|
||||
fixture.write_authenticated_config("valid_token", "refresh_token");
|
||||
|
||||
mock_pack_create_conflict(&fixture.mock_server).await;
|
||||
|
||||
let mut cmd = Command::cargo_bin("attune").unwrap();
|
||||
cmd.env("XDG_CONFIG_HOME", fixture.config_dir_path())
|
||||
.env("HOME", fixture.config_dir_path())
|
||||
.arg("--api-url")
|
||||
.arg(fixture.server_url())
|
||||
.arg("pack")
|
||||
.arg("create")
|
||||
.arg("--ref")
|
||||
.arg("my_pack");
|
||||
|
||||
cmd.assert()
|
||||
.failure()
|
||||
.stderr(predicate::str::contains("already exists"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_create_missing_ref() {
|
||||
let fixture = TestFixture::new().await;
|
||||
fixture.write_authenticated_config("valid_token", "refresh_token");
|
||||
|
||||
let mut cmd = Command::cargo_bin("attune").unwrap();
|
||||
cmd.env("XDG_CONFIG_HOME", fixture.config_dir_path())
|
||||
.env("HOME", fixture.config_dir_path())
|
||||
.arg("--api-url")
|
||||
.arg(fixture.server_url())
|
||||
.arg("pack")
|
||||
.arg("create");
|
||||
|
||||
cmd.assert()
|
||||
.failure()
|
||||
.stderr(predicate::str::contains("Pack ref is required"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_create_default_label_from_ref() {
|
||||
let fixture = TestFixture::new().await;
|
||||
fixture.write_authenticated_config("valid_token", "refresh_token");
|
||||
|
||||
// Use a custom mock that validates the request body contains the derived label
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/api/v1/packs"))
|
||||
.and(body_json(json!({
|
||||
"ref": "my_cool_pack",
|
||||
"label": "My Cool Pack",
|
||||
"version": "0.1.0",
|
||||
"tags": []
|
||||
})))
|
||||
.respond_with(ResponseTemplate::new(201).set_body_json(json!({
|
||||
"data": {
|
||||
"id": 99,
|
||||
"ref": "my_cool_pack",
|
||||
"label": "My Cool Pack",
|
||||
"version": "0.1.0",
|
||||
"enabled": true,
|
||||
"created": "2024-01-01T00:00:00Z",
|
||||
"updated": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
})))
|
||||
.mount(&fixture.mock_server)
|
||||
.await;
|
||||
|
||||
let mut cmd = Command::cargo_bin("attune").unwrap();
|
||||
cmd.env("XDG_CONFIG_HOME", fixture.config_dir_path())
|
||||
.env("HOME", fixture.config_dir_path())
|
||||
.arg("--api-url")
|
||||
.arg(fixture.server_url())
|
||||
.arg("pack")
|
||||
.arg("create")
|
||||
.arg("--ref")
|
||||
.arg("my_cool_pack");
|
||||
|
||||
cmd.assert()
|
||||
.success()
|
||||
.stdout(predicate::str::contains("my_cool_pack"))
|
||||
.stdout(predicate::str::contains("created successfully"));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_create_default_version() {
|
||||
let fixture = TestFixture::new().await;
|
||||
fixture.write_authenticated_config("valid_token", "refresh_token");
|
||||
|
||||
// Verify the default version "0.1.0" is sent when --pack-version is not specified
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/api/v1/packs"))
|
||||
.and(body_json(json!({
|
||||
"ref": "versioned_pack",
|
||||
"label": "Versioned Pack",
|
||||
"version": "0.1.0",
|
||||
"tags": []
|
||||
})))
|
||||
.respond_with(ResponseTemplate::new(201).set_body_json(json!({
|
||||
"data": {
|
||||
"id": 7,
|
||||
"ref": "versioned_pack",
|
||||
"label": "Versioned Pack",
|
||||
"version": "0.1.0",
|
||||
"enabled": true,
|
||||
"created": "2024-01-01T00:00:00Z",
|
||||
"updated": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
})))
|
||||
.mount(&fixture.mock_server)
|
||||
.await;
|
||||
|
||||
let mut cmd = Command::cargo_bin("attune").unwrap();
|
||||
cmd.env("XDG_CONFIG_HOME", fixture.config_dir_path())
|
||||
.env("HOME", fixture.config_dir_path())
|
||||
.arg("--api-url")
|
||||
.arg(fixture.server_url())
|
||||
.arg("pack")
|
||||
.arg("create")
|
||||
.arg("--ref")
|
||||
.arg("versioned_pack");
|
||||
|
||||
cmd.assert().success();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_create_with_tags() {
|
||||
let fixture = TestFixture::new().await;
|
||||
fixture.write_authenticated_config("valid_token", "refresh_token");
|
||||
|
||||
Mock::given(method("POST"))
|
||||
.and(path("/api/v1/packs"))
|
||||
.and(body_json(json!({
|
||||
"ref": "tagged",
|
||||
"label": "Tagged",
|
||||
"version": "0.1.0",
|
||||
"tags": ["networking", "monitoring"]
|
||||
})))
|
||||
.respond_with(ResponseTemplate::new(201).set_body_json(json!({
|
||||
"data": {
|
||||
"id": 10,
|
||||
"ref": "tagged",
|
||||
"label": "Tagged",
|
||||
"version": "0.1.0",
|
||||
"tags": ["networking", "monitoring"],
|
||||
"enabled": true,
|
||||
"created": "2024-01-01T00:00:00Z",
|
||||
"updated": "2024-01-01T00:00:00Z"
|
||||
}
|
||||
})))
|
||||
.mount(&fixture.mock_server)
|
||||
.await;
|
||||
|
||||
let mut cmd = Command::cargo_bin("attune").unwrap();
|
||||
cmd.env("XDG_CONFIG_HOME", fixture.config_dir_path())
|
||||
.env("HOME", fixture.config_dir_path())
|
||||
.arg("--api-url")
|
||||
.arg(fixture.server_url())
|
||||
.arg("pack")
|
||||
.arg("create")
|
||||
.arg("--ref")
|
||||
.arg("tagged")
|
||||
.arg("--tags")
|
||||
.arg("networking,monitoring");
|
||||
|
||||
cmd.assert().success();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_pack_list_empty_result() {
|
||||
let fixture = TestFixture::new().await;
|
||||
|
||||
Reference in New Issue
Block a user