mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-02-19 22:27:51 +01:00
121 lines
4.0 KiB
Rust
121 lines
4.0 KiB
Rust
use assert_cmd::cargo::cargo_bin_cmd;
|
|
use assert_cmd::Command;
|
|
use predicates::str::contains;
|
|
use std::path::Path;
|
|
use tempfile::TempDir;
|
|
use yaak_models::models::{HttpRequest, Workspace};
|
|
use yaak_models::util::UpdateSource;
|
|
|
|
fn cli_cmd(data_dir: &Path) -> Command {
|
|
let mut cmd = cargo_bin_cmd!("yaakcli");
|
|
cmd.arg("--data-dir").arg(data_dir);
|
|
cmd
|
|
}
|
|
|
|
fn seed_workspace(data_dir: &Path, workspace_id: &str) {
|
|
let db_path = data_dir.join("db.sqlite");
|
|
let blob_path = data_dir.join("blobs.sqlite");
|
|
let (query_manager, _blob_manager, _rx) =
|
|
yaak_models::init_standalone(&db_path, &blob_path).expect("Failed to initialize DB");
|
|
|
|
let workspace = Workspace {
|
|
id: workspace_id.to_string(),
|
|
name: "Test Workspace".to_string(),
|
|
description: "Integration test workspace".to_string(),
|
|
..Default::default()
|
|
};
|
|
|
|
query_manager
|
|
.connect()
|
|
.upsert_workspace(&workspace, &UpdateSource::Sync)
|
|
.expect("Failed to seed workspace");
|
|
}
|
|
|
|
fn seed_request(data_dir: &Path, workspace_id: &str, request_id: &str) {
|
|
let db_path = data_dir.join("db.sqlite");
|
|
let blob_path = data_dir.join("blobs.sqlite");
|
|
let (query_manager, _blob_manager, _rx) =
|
|
yaak_models::init_standalone(&db_path, &blob_path).expect("Failed to initialize DB");
|
|
|
|
let request = HttpRequest {
|
|
id: request_id.to_string(),
|
|
workspace_id: workspace_id.to_string(),
|
|
name: "Seeded Request".to_string(),
|
|
method: "GET".to_string(),
|
|
url: "https://example.com".to_string(),
|
|
..Default::default()
|
|
};
|
|
|
|
query_manager
|
|
.connect()
|
|
.upsert_http_request(&request, &UpdateSource::Sync)
|
|
.expect("Failed to seed request");
|
|
}
|
|
|
|
#[test]
|
|
fn request_show_and_delete_yes_round_trip() {
|
|
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
let data_dir = temp_dir.path();
|
|
seed_workspace(data_dir, "wk_test");
|
|
|
|
let create_assert = cli_cmd(data_dir)
|
|
.args([
|
|
"request",
|
|
"create",
|
|
"wk_test",
|
|
"--name",
|
|
"Smoke Test",
|
|
"--url",
|
|
"https://example.com",
|
|
])
|
|
.assert()
|
|
.success();
|
|
|
|
let create_stdout = String::from_utf8_lossy(&create_assert.get_output().stdout).to_string();
|
|
let request_id = create_stdout
|
|
.trim()
|
|
.split_once(": ")
|
|
.map(|(_, id)| id.to_string())
|
|
.expect("Expected request id in create output");
|
|
|
|
cli_cmd(data_dir)
|
|
.args(["request", "show", &request_id])
|
|
.assert()
|
|
.success()
|
|
.stdout(contains(format!("\"id\": \"{request_id}\"")))
|
|
.stdout(contains("\"workspaceId\": \"wk_test\""));
|
|
|
|
cli_cmd(data_dir)
|
|
.args(["request", "delete", &request_id, "--yes"])
|
|
.assert()
|
|
.success()
|
|
.stdout(contains(format!("Deleted request: {request_id}")));
|
|
|
|
let db_path = data_dir.join("db.sqlite");
|
|
let blob_path = data_dir.join("blobs.sqlite");
|
|
let (query_manager, _blob_manager, _rx) =
|
|
yaak_models::init_standalone(&db_path, &blob_path).expect("Failed to initialize DB");
|
|
assert!(query_manager.connect().get_http_request(&request_id).is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn request_delete_without_yes_fails_in_non_interactive_mode() {
|
|
let temp_dir = TempDir::new().expect("Failed to create temp dir");
|
|
let data_dir = temp_dir.path();
|
|
seed_workspace(data_dir, "wk_test");
|
|
seed_request(data_dir, "wk_test", "rq_seed_delete_noninteractive");
|
|
|
|
cli_cmd(data_dir)
|
|
.args(["request", "delete", "rq_seed_delete_noninteractive"])
|
|
.assert()
|
|
.failure()
|
|
.code(1)
|
|
.stderr(contains("Refusing to delete in non-interactive mode without --yes"));
|
|
|
|
let db_path = data_dir.join("db.sqlite");
|
|
let blob_path = data_dir.join("blobs.sqlite");
|
|
let (query_manager, _blob_manager, _rx) =
|
|
yaak_models::init_standalone(&db_path, &blob_path).expect("Failed to initialize DB");
|
|
assert!(query_manager.connect().get_http_request("rq_seed_delete_noninteractive").is_ok());
|
|
}
|