@@ -781,6 +781,34 @@ def test_template_update_preserves_enabled_value(client: TestClient) -> None:
781781 assert data ["scope" ]["step_names" ] == ["updated-step" ]
782782
783783
784+ def test_template_update_preview_matches_persisted_rendered_control (client : TestClient ) -> None :
785+ # Given: an existing template-backed control and updated template values
786+ control_id = _create_template_control (client )
787+ updated_payload = _template_payload ()
788+ updated_payload ["template_values" ] = {
789+ "pattern" : "updated" ,
790+ "step_name" : "updated-step" ,
791+ }
792+
793+ # When: previewing the updated template render and then persisting the update
794+ preview_response = client .post ("/api/v1/control-templates/render" , json = updated_payload )
795+ assert preview_response .status_code == 200 , preview_response .text
796+ preview_control = preview_response .json ()["control" ]
797+
798+ put_response = client .put (
799+ f"/api/v1/controls/{ control_id } /data" ,
800+ json = {"data" : updated_payload },
801+ )
802+ assert put_response .status_code == 200 , put_response .text
803+
804+ get_response = client .get (f"/api/v1/controls/{ control_id } /data" )
805+
806+ # Then: the persisted rendered control matches the preview output
807+ assert get_response .status_code == 200 , get_response .text
808+ persisted_control = get_response .json ()["data" ]
809+ assert persisted_control == preview_control
810+
811+
784812def test_template_update_accepts_different_template_structure (client : TestClient ) -> None :
785813 # Given: an attached template-backed control using the regex template shape
786814 control_id , _ = _create_template_control_with_name (client )
0 commit comments