@@ -84,14 +84,46 @@ def _one_decision(**outputs: Any) -> dict[str, Any]:
8484class TestRunContext :
8585 @pytest .mark .parametrize (
8686 "rule_name" ,
87- ["" , " " , "a/b" , "a\\ b" , "a..b" , "a%20b" , "a\n b" , "x" * 257 ],
87+ [
88+ "" ,
89+ " " ,
90+ "a/b" ,
91+ "a\\ b" ,
92+ "a..b" ,
93+ "a%20b" ,
94+ "a\n b" ,
95+ "a\x00 b" ,
96+ "a\x7f b" ,
97+ "x" * 257 ,
98+ ],
8899 )
89100 def test_rejects_unsafe_rule_names (
90101 self , service : BusinessRulesService , rule_name : str
91102 ) -> None :
92103 with pytest .raises (ValueError , match = "name" ):
93104 service .run (rule_name , {}, folder_key = FOLDER_KEY )
94105
106+ @pytest .mark .parametrize (
107+ "rule_name" ,
108+ ["Loan\u00a0 Pricing" , "Loan\u200b Pricing" , "Préstamo Tarifa" , "贷款定价" ],
109+ )
110+ def test_accepts_names_the_dotnet_client_accepts (
111+ self ,
112+ httpx_mock : HTTPXMock ,
113+ service : BusinessRulesService ,
114+ evaluate_url : str ,
115+ rule_name : str ,
116+ ) -> None :
117+ # Only control characters are refused, as in the .NET client: a
118+ # non-breaking space pasted into a name is not one.
119+ httpx_mock .add_response (url = evaluate_url , json = _response ())
120+
121+ service .run (rule_name , {}, folder_key = FOLDER_KEY )
122+
123+ request = httpx_mock .get_request ()
124+ assert request is not None
125+ assert json .loads (request .content )["businessRuleName" ] == rule_name
126+
95127 @pytest .mark .parametrize ("value" , [["age" , 14 ], "age=14" , 14 ])
96128 def test_rejects_non_mapping_input (
97129 self , httpx_mock : HTTPXMock , service : BusinessRulesService , value : Any
0 commit comments