diff --git a/src/cot/draws/circle.rs b/src/cot/draws/circle.rs
index ff76dc7..26a2457 100644
--- a/src/cot/draws/circle.rs
+++ b/src/cot/draws/circle.rs
@@ -124,3 +124,40 @@ impl ShapeCircleCoT {
)
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::CircleCoTPayload;
+ use arma_rs::FromArma;
+
+ #[test]
+ fn parses_circle_payload_maps_shape_and_serializes_cot() {
+ let payload = CircleCoTPayload::from_arma(
+ r#"["circle-1",-30.1,-51.2,20,100,50,30,"Area Alpha","creator-1","Falcon"]"#
+ .to_string(),
+ )
+ .expect("circle payload should parse");
+
+ assert_eq!(payload.uuid, "circle-1");
+ assert_eq!(payload.center_lat, -30.1);
+ assert_eq!(payload.center_lon, -51.2);
+ assert_eq!(payload.center_hae, 20.0);
+ assert_eq!(payload.major, 100.0);
+ assert_eq!(payload.minor, 50.0);
+ assert_eq!(payload.angle, 30.0);
+
+ let shape = payload.to_cot();
+ assert_eq!(shape.uid, "circle-1");
+ assert_eq!(shape.callsign, "Area Alpha");
+ assert_eq!(shape.creator_uid, "creator-1");
+ assert_eq!(shape.creator_callsign, "Falcon");
+
+ let xml = shape.to_xml("2026-08-07T17:00:00.000Z", "2026-08-07T18:00:00.000Z");
+ assert!(xml.contains("uid=\"circle-1\" type=\"u-d-c-c\""));
+ assert!(xml.contains(""));
+ assert!(xml.contains(""));
+ assert!(xml.contains(""));
+ assert!(xml.contains("