use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Debug, Deserialize, Default)]
pub struct ListVariablesQuery {
#[serde(default)]
pub scope: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct CreateVariableRequest {
pub name: String,
pub value: String,
#[serde(default)]
pub scope: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, ToSchema)]
pub struct UpdateVariableRequest {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub value: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_create_request_deserialize_minimum() {
let req: CreateVariableRequest =
serde_json::from_str(r#"{"name":"FOO","value":"bar"}"#).unwrap();
assert_eq!(req.name, "FOO");
assert_eq!(req.value, "bar");
assert!(req.scope.is_none());
}
#[test]
fn test_create_request_deserialize_full() {
let req: CreateVariableRequest =
serde_json::from_str(r#"{"name":"FOO","value":"bar","scope":"proj-1"}"#).unwrap();
assert_eq!(req.name, "FOO");
assert_eq!(req.value, "bar");
assert_eq!(req.scope.as_deref(), Some("proj-1"));
}
#[test]
fn test_update_request_deserialize_partial() {
let req: UpdateVariableRequest = serde_json::from_str("{}").unwrap();
assert!(req.name.is_none());
assert!(req.value.is_none());
let req: UpdateVariableRequest = serde_json::from_str(r#"{"value":"new"}"#).unwrap();
assert!(req.name.is_none());
assert_eq!(req.value.as_deref(), Some("new"));
}
#[test]
fn test_list_query_default_is_empty() {
let q = ListVariablesQuery::default();
assert!(q.scope.is_none());
}
#[test]
fn test_list_query_construct_with_scope() {
let q = ListVariablesQuery {
scope: Some("p1".to_string()),
};
assert_eq!(q.scope.as_deref(), Some("p1"));
}
}