feat: replace Subject retirement with durable explicit deletion
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
use serde_json::json;
|
||||
use server_api::{
|
||||
SubjektivSubjectDeleteRequest, SubjektivSubjectDeleteResponse, SubjektivSubjectState,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn subject_delete_api_replaces_retire_and_requires_operation_identity() {
|
||||
let document: serde_json::Value = serde_json::from_str(
|
||||
&server_api::canonical_openapi_document()
|
||||
.unwrap()
|
||||
.to_json()
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
let paths = &document["paths"];
|
||||
assert!(
|
||||
paths
|
||||
.get("/api/w/{workspace_id}/subjektiv/subjects/{subject_id}/retire")
|
||||
.is_none()
|
||||
);
|
||||
let operation = &paths["/api/w/{workspace_id}/subjektiv/subjects/{subject_id}"]["delete"];
|
||||
assert_eq!(operation["operationId"], "subjektiv_subject_delete");
|
||||
assert_eq!(operation["requestBody"]["required"], true);
|
||||
assert!(serde_json::from_value::<SubjektivSubjectDeleteRequest>(json!({})).is_err());
|
||||
assert!(
|
||||
serde_json::from_value::<SubjektivSubjectDeleteRequest>(
|
||||
json!({"operation_id":"op", "force":true})
|
||||
)
|
||||
.is_err()
|
||||
);
|
||||
for completed in [false, true] {
|
||||
let response = SubjektivSubjectDeleteResponse {
|
||||
subject_id: "subject".into(),
|
||||
operation_id: "op".into(),
|
||||
completed,
|
||||
};
|
||||
assert_eq!(
|
||||
serde_json::to_value(response).unwrap(),
|
||||
json!({"subject_id":"subject", "operation_id":"op", "completed":completed})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn old_subject_state_is_explicit_saved_compatibility_not_a_new_operation() {
|
||||
let state: SubjektivSubjectState = serde_json::from_value(json!("retired")).unwrap();
|
||||
assert_eq!(state, SubjektivSubjectState::LegacyRetired);
|
||||
assert_eq!(serde_json::to_value(state).unwrap(), json!("retired"));
|
||||
}
|
||||
Reference in New Issue
Block a user