@@ -854,6 +854,155 @@ mod tests {
854854 srv. await . unwrap ( ) ;
855855 }
856856
857+ // ---- ready-field projection on status patch ----
858+
859+ #[ tokio:: test]
860+ async fn test_update_phase_active_sets_ready_true ( ) {
861+ let ( client, handle) = mock_client_pair ( ) ;
862+ let ctx = make_test_context ( client) ;
863+
864+ let srv = tokio:: spawn ( async move {
865+ let mut h = pin ! ( handle) ;
866+ let ( _req, send) = h. next_request ( ) . await . expect ( "events call" ) ;
867+ send. send_response (
868+ Response :: builder ( )
869+ . status ( 201 )
870+ . header ( "content-type" , "application/json" )
871+ . body ( Body :: from ( k8s_event_response_body ( ) ) )
872+ . unwrap ( ) ,
873+ ) ;
874+ let ( req, send) = h. next_request ( ) . await . expect ( "patch_status call" ) ;
875+ let body = collect_json_body ( req. into_body ( ) ) . await ;
876+ assert_eq ! ( body[ "status" ] [ "phase" ] , "Active" ) ;
877+ assert_eq ! (
878+ body[ "status" ] [ "ready" ] , true ,
879+ "ready must be True when phase is Active"
880+ ) ;
881+ send. send_response (
882+ Response :: builder ( )
883+ . status ( 200 )
884+ . header ( "content-type" , "application/json" )
885+ . body ( Body :: from ( sm_response_body ( "test-sm" , "default" , "Active" ) ) )
886+ . unwrap ( ) ,
887+ ) ;
888+ } ) ;
889+
890+ update_phase (
891+ & ctx,
892+ "default" ,
893+ "test-sm" ,
894+ Some ( "Pending" ) ,
895+ "Active" ,
896+ None ,
897+ None ,
898+ true ,
899+ )
900+ . await
901+ . expect ( "update_phase should succeed" ) ;
902+
903+ srv. await . unwrap ( ) ;
904+ }
905+
906+ #[ tokio:: test]
907+ async fn test_update_phase_inactive_sets_ready_false ( ) {
908+ let ( client, handle) = mock_client_pair ( ) ;
909+ let ctx = make_test_context ( client) ;
910+
911+ let srv = tokio:: spawn ( async move {
912+ let mut h = pin ! ( handle) ;
913+ let ( _req, send) = h. next_request ( ) . await . expect ( "events call" ) ;
914+ send. send_response (
915+ Response :: builder ( )
916+ . status ( 201 )
917+ . header ( "content-type" , "application/json" )
918+ . body ( Body :: from ( k8s_event_response_body ( ) ) )
919+ . unwrap ( ) ,
920+ ) ;
921+ let ( req, send) = h. next_request ( ) . await . expect ( "patch_status call" ) ;
922+ let body = collect_json_body ( req. into_body ( ) ) . await ;
923+ assert_eq ! ( body[ "status" ] [ "phase" ] , "Inactive" ) ;
924+ assert_eq ! (
925+ body[ "status" ] [ "ready" ] , false ,
926+ "ready must be False for any non-Active phase"
927+ ) ;
928+ send. send_response (
929+ Response :: builder ( )
930+ . status ( 200 )
931+ . header ( "content-type" , "application/json" )
932+ . body ( Body :: from ( sm_response_body (
933+ "test-sm" , "default" , "Inactive" ,
934+ ) ) )
935+ . unwrap ( ) ,
936+ ) ;
937+ } ) ;
938+
939+ update_phase (
940+ & ctx,
941+ "default" ,
942+ "test-sm" ,
943+ Some ( "Active" ) ,
944+ "Inactive" ,
945+ None ,
946+ None ,
947+ false ,
948+ )
949+ . await
950+ . expect ( "update_phase should succeed" ) ;
951+
952+ srv. await . unwrap ( ) ;
953+ }
954+
955+ #[ tokio:: test]
956+ async fn test_update_phase_with_grace_period_shutting_down_sets_ready_false ( ) {
957+ let ( client, handle) = mock_client_pair ( ) ;
958+ let ctx = make_test_context ( client) ;
959+
960+ let srv = tokio:: spawn ( async move {
961+ let mut h = pin ! ( handle) ;
962+ let ( _req, send) = h. next_request ( ) . await . expect ( "events call" ) ;
963+ send. send_response (
964+ Response :: builder ( )
965+ . status ( 201 )
966+ . header ( "content-type" , "application/json" )
967+ . body ( Body :: from ( k8s_event_response_body ( ) ) )
968+ . unwrap ( ) ,
969+ ) ;
970+ let ( req, send) = h. next_request ( ) . await . expect ( "patch_status call" ) ;
971+ let body = collect_json_body ( req. into_body ( ) ) . await ;
972+ assert_eq ! ( body[ "status" ] [ "phase" ] , "ShuttingDown" ) ;
973+ assert_eq ! (
974+ body[ "status" ] [ "ready" ] , false ,
975+ "ready must be False during ShuttingDown"
976+ ) ;
977+ send. send_response (
978+ Response :: builder ( )
979+ . status ( 200 )
980+ . header ( "content-type" , "application/json" )
981+ . body ( Body :: from ( sm_response_body (
982+ "test-sm" ,
983+ "default" ,
984+ "ShuttingDown" ,
985+ ) ) )
986+ . unwrap ( ) ,
987+ ) ;
988+ } ) ;
989+
990+ update_phase_with_grace_period (
991+ & ctx,
992+ "default" ,
993+ "test-sm" ,
994+ Some ( "Active" ) ,
995+ "ShuttingDown" ,
996+ None ,
997+ None ,
998+ false ,
999+ )
1000+ . await
1001+ . expect ( "grace period update should succeed" ) ;
1002+
1003+ srv. await . unwrap ( ) ;
1004+ }
1005+
8571006 // ---- Context::new — unit tests ----
8581007
8591008 #[ tokio:: test]
0 commit comments