@@ -113,6 +113,121 @@ async def test_list_dispatches(
113113 assert dispatch == service_side_dispatch
114114
115115
116+ # pylint: disable-next=too-many-locals
117+ async def test_list_filter_queries (
118+ client : FakeClient , generator : DispatchGenerator
119+ ) -> None :
120+ """Test listing dispatches with filter queries."""
121+ microgrid_id = MicrogridId (1 )
122+
123+ all_dispatches = [generator .generate_dispatch () for _ in range (100 )]
124+ client .set_dispatches (
125+ microgrid_id = microgrid_id ,
126+ value = all_dispatches ,
127+ )
128+
129+ # Filter by type
130+ filter_type = all_dispatches [0 ].type
131+ dispatches = client .list (
132+ microgrid_id = microgrid_id ,
133+ filter_queries = iter ([filter_type ]),
134+ )
135+ async for page in dispatches :
136+ for dispatch in page :
137+ assert dispatch .type == filter_type
138+
139+ # Filter by id (needs to prefix with #)
140+ filter_target_id = all_dispatches [0 ].id
141+ dispatches = client .list (
142+ microgrid_id = microgrid_id ,
143+ filter_queries = iter ([f"#{ int (filter_target_id )} " ]),
144+ )
145+ async for page in dispatches :
146+ for dispatch in page :
147+ assert dispatch .id == filter_target_id
148+
149+ # Mixed filter - validate OR behavior with type and id
150+ filter_mixed = [all_dispatches [3 ].type , f"#{ int (all_dispatches [4 ].id )} " ]
151+ dispatches = client .list (
152+ microgrid_id = microgrid_id ,
153+ filter_queries = iter (filter_mixed ),
154+ )
155+ async for page in dispatches :
156+ for dispatch in page :
157+ assert (
158+ dispatch .type == all_dispatches [3 ].type
159+ or dispatch .id == all_dispatches [4 ].id
160+ )
161+
162+ # Test OR behavior with multiple types - validate both dispatches are found
163+ type1 = all_dispatches [5 ].type
164+ type2 = all_dispatches [6 ].type
165+ dispatches = client .list (
166+ microgrid_id = microgrid_id ,
167+ filter_queries = iter ([type1 , type2 ]),
168+ )
169+ found_dispatches = []
170+ async for page in dispatches :
171+ for dispatch in page :
172+ assert dispatch .type in (type1 , type2 )
173+ found_dispatches .append (dispatch )
174+
175+ # Verify both dispatches with the specified types are found
176+ assert len (found_dispatches ) == 2
177+ assert any (dispatch .type == type1 for dispatch in found_dispatches )
178+ assert any (dispatch .type == type2 for dispatch in found_dispatches )
179+
180+ # Test OR behavior with multiple IDs - validate both dispatches are found
181+ id1 = all_dispatches [7 ].id
182+ id2 = all_dispatches [8 ].id
183+ # Use numeric part only for ID queries (fake service expects just the number)
184+ dispatches = client .list (
185+ microgrid_id = microgrid_id ,
186+ filter_queries = iter ([f"#{ int (id1 )} " , f"#{ int (id2 )} " ]),
187+ )
188+ found_dispatches = []
189+ async for page in dispatches :
190+ for dispatch in page :
191+ assert dispatch .id in (id1 , id2 )
192+ found_dispatches .append (dispatch )
193+
194+ # Verify both dispatches with the specified IDs are found
195+ assert len (found_dispatches ) == 2
196+ assert any (dispatch .id == id1 for dispatch in found_dispatches )
197+ assert any (dispatch .id == id2 for dispatch in found_dispatches )
198+
199+ # Test OR behavior with mixed types and IDs - validate all dispatches are found
200+ mixed_filter = [
201+ all_dispatches [9 ].type ,
202+ f"#{ int (all_dispatches [10 ].id )} " ,
203+ all_dispatches [11 ].type ,
204+ f"#{ int (all_dispatches [12 ].id )} " ,
205+ ]
206+ dispatches = client .list (
207+ microgrid_id = microgrid_id ,
208+ filter_queries = iter (mixed_filter ),
209+ )
210+ found_dispatches = []
211+ async for page in dispatches :
212+ for dispatch in page :
213+ assert (
214+ dispatch .type == all_dispatches [9 ].type
215+ or dispatch .id == all_dispatches [10 ].id
216+ or dispatch .type == all_dispatches [11 ].type
217+ or dispatch .id == all_dispatches [12 ].id
218+ )
219+ found_dispatches .append (dispatch )
220+
221+ # Verify all four dispatches with the specified types/IDs are found
222+ assert len (found_dispatches ) == 4
223+ assert any (dispatch .type == all_dispatches [9 ].type for dispatch in found_dispatches )
224+ assert any (dispatch .id == all_dispatches [10 ].id for dispatch in found_dispatches )
225+ assert any (
226+ dispatch .type == all_dispatches [11 ].type for dispatch in found_dispatches
227+ )
228+ assert any (dispatch .id == all_dispatches [12 ].id for dispatch in found_dispatches )
229+
230+
116231async def test_list_dispatches_no_duration (
117232 client : FakeClient , generator : DispatchGenerator
118233) -> None :
0 commit comments