Skip to content

Commit 4c9accf

Browse files
author
Cecylia Borek
committed
fix csc apps test
1 parent 99168f6 commit 4c9accf

File tree

1 file changed

+76
-7
lines changed

1 file changed

+76
-7
lines changed

tests/searchcommands/test_csc_apps.py

Lines changed: 76 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)