#![allow(
clippy::unwrap_used,
clippy::expect_used,
reason = "test code: unwrap/expect on assert_cmd assertions is the expected diagnostic"
)]
mod common;
use predicates::prelude::*;
use predicates::str::contains;
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};
use common::aviso;
#[tokio::test]
async fn wipe_stream_success_path() {
let server = MockServer::start().await;
Mock::given(method("DELETE"))
.and(path("/api/v1/admin/wipe/stream"))
.respond_with(ResponseTemplate::new(204))
.mount(&server)
.await;
aviso()
.args([
"--base-url",
&server.uri(),
"admin",
"wipe-stream",
"mars",
"--yes",
])
.assert()
.success()
.stdout(contains("ok"))
.stdout(contains("wipe_stream"));
}
#[tokio::test]
async fn wipe_all_success_path() {
let server = MockServer::start().await;
Mock::given(method("DELETE"))
.and(path("/api/v1/admin/wipe/all"))
.respond_with(ResponseTemplate::new(204))
.mount(&server)
.await;
aviso()
.args(["--base-url", &server.uri(), "admin", "wipe-all", "--yes"])
.assert()
.success()
.stdout(contains("ok"))
.stdout(contains("wipe_all"));
}
#[tokio::test]
async fn delete_success_path() {
let server = MockServer::start().await;
Mock::given(method("DELETE"))
.and(path("/api/v1/admin/notification/mars@42"))
.respond_with(ResponseTemplate::new(204))
.mount(&server)
.await;
aviso()
.args([
"--base-url",
&server.uri(),
"admin",
"delete",
"mars@42",
"--yes",
])
.assert()
.success()
.stdout(contains("ok"))
.stdout(contains("delete_notification"));
}
#[tokio::test]
async fn wipe_stream_401_includes_credentials_message() {
let server = MockServer::start().await;
Mock::given(method("DELETE"))
.and(path("/api/v1/admin/wipe/stream"))
.respond_with(ResponseTemplate::new(401))
.mount(&server)
.await;
aviso()
.args([
"--base-url",
&server.uri(),
"admin",
"wipe-stream",
"mars",
"--yes",
])
.assert()
.failure()
.code(1)
.stderr(contains("auth failed").or(contains("credentials")));
}
#[tokio::test]
async fn wipe_stream_403_includes_admin_role_message() {
let server = MockServer::start().await;
Mock::given(method("DELETE"))
.and(path("/api/v1/admin/wipe/stream"))
.respond_with(ResponseTemplate::new(403))
.mount(&server)
.await;
aviso()
.args([
"--base-url",
&server.uri(),
"admin",
"wipe-stream",
"mars",
"--yes",
])
.assert()
.failure()
.code(1)
.stderr(contains("admin role").or(contains("forbidden")));
}
#[tokio::test]
async fn wipe_all_json_output_form() {
let server = MockServer::start().await;
Mock::given(method("DELETE"))
.and(path("/api/v1/admin/wipe/all"))
.respond_with(ResponseTemplate::new(204))
.mount(&server)
.await;
aviso()
.args([
"--base-url",
&server.uri(),
"--json",
"admin",
"wipe-all",
"--yes",
])
.assert()
.success()
.stdout(contains("\"status\":\"ok\""))
.stdout(contains("\"operation\":\"wipe_all\""));
}