@@ -64,17 +64,86 @@ def test_eventing_app(self):
6464 self .assertEqual (state .title , "eventing_app" )
6565
6666 jobs = self .service .jobs
67+ stream = jobs .oneshot (
68+ 'search index="_internal" | fields status | head 4000 | eventingcsc status=200 | head 10' ,
69+ output_mode = 'json' ,
70+ )
71+ reader = results .JSONResultsReader (stream )
72+ items = list (reader )
73+
74+ actual_results = [item for item in items if isinstance (item , dict )]
75+ informational_messages = [
76+ item for item in items if isinstance (item , results .Message )
77+ ]
78+
79+ self .assertTrue (
80+ len (actual_results ) > 0 , "Should have actual search results (dicts)"
81+ )
82+
83+ fatal_messages = [
84+ msg for msg in informational_messages if msg .type in ['FATAL' , 'ERROR' ]
85+ ]
86+ self .assertEqual (
87+ len (fatal_messages ),
88+ 0 ,
89+ f"Should not have FATAL/ERROR messages, but got: { [msg .message for msg in fatal_messages ]} " ,
90+ )
91+
92+ first_result = actual_results [0 ]
93+ self .assertIn ('status' , first_result , "Result should contain 'status' field" )
94+ self .assertEqual (first_result ['status' ], '200' , "Status should be '200'" )
95+
96+ def test_eventing_app_malformed_query_missing_field (self ):
97+ app_name = "eventing_app"
98+ # Fetch the app
99+ app = self .service .apps [app_name ]
100+ app .refresh ()
101+
102+ jobs = self .service .jobs
103+ # wrong search query because `status` field is not being passed to eventing app
67104 stream = jobs .oneshot (
68105 'search index="_internal" | head 4000 | eventingcsc status=200 | head 10' ,
69- output_mode = "json" ,
106+ output_mode = 'json' ,
107+ )
108+ reader = results .JSONResultsReader (stream )
109+ items = list (reader )
110+
111+ self .assertTrue (len (items ) > 0 , "Should have at least one item (error message)" )
112+
113+ actual_results = [item for item in items if isinstance (item , dict )]
114+ informational_messages = [
115+ item for item in items if isinstance (item , results .Message )
116+ ]
117+
118+ self .assertTrue (len (informational_messages ) > 0 , "Should have message results" )
119+
120+ error_messages = [
121+ msg for msg in informational_messages if msg .type in ['FATAL' , 'ERROR' ]
122+ ]
123+ self .assertTrue (
124+ len (error_messages ) > 0 , "Should have at least one FATAL or ERROR message"
125+ )
126+
127+ error_message = error_messages [0 ]
128+ self .assertIn (
129+ 'eventingcsc' ,
130+ error_message .message ,
131+ "Error should mention the failing command" ,
132+ )
133+ self .assertIn (
134+ 'status' ,
135+ error_message .message ,
136+ "Error should mention the missing 'status' field" ,
137+ )
138+ self .assertIn (
139+ 'KeyError' , error_message .message , "Should be a KeyError for missing field"
70140 )
71- result = results .JSONResultsReader (stream )
72- ds = list (result )
73141
74- self .assertEqual (result .is_preview , False )
75- self .assertTrue (isinstance (ds [0 ], (dict , results .Message )))
76- nonmessages = [d for d in ds if isinstance (d , dict )]
77- self .assertTrue (len (nonmessages ) <= 10 )
142+ self .assertEqual (
143+ len (actual_results ),
144+ 0 ,
145+ f"Should not have actual results, but got: { actual_results } " ,
146+ )
78147
79148 def test_generating_app (self ):
80149 app_name = "generating_app"
0 commit comments