33from locust import events , tag , task
44from locust .env import Environment
55
6+ import logging
7+
68from common import data , db_idr
79from common .bfd_user_base import BFDUserBase
810from common .locust_utils import is_distributed , is_locust_master
911
1012master_bene_sks : Collection [str ] = []
13+ master_bene_sks_part_a : Collection [str ] = []
14+ master_bene_sks_part_b : Collection [str ] = []
1115master_bene_mbis : Collection [str ] = []
16+ master_claim_ids : Collection [str ] = []
1217
1318
1419@events .test_start .add_listener
@@ -29,13 +34,35 @@ def _(environment: Environment, **kwargs):
2934 data_type_name = "bene_ids" ,
3035 )
3136
37+ global master_bene_sks_part_a
38+ master_bene_sks_part_a = data .load_from_parsed_opts (
39+ environment .parsed_options ,
40+ db_idr .get_regression_current_part_a_bene_sks ,
41+ data_type_name = "bene_ids_part_a" ,
42+ )
43+
44+ global master_bene_sks_part_b
45+ master_bene_sks_part_b = data .load_from_parsed_opts (
46+ environment .parsed_options ,
47+ db_idr .get_regression_current_part_b_bene_sks ,
48+ data_type_name = "bene_ids_part_b" ,
49+ )
50+
3251 global master_bene_mbis
3352 master_bene_mbis = data .load_from_parsed_opts (
3453 environment .parsed_options ,
3554 db_idr .get_regression_bene_mbis ,
3655 data_type_name = "bene_mbis" ,
3756 )
3857
58+ global master_claim_ids
59+ master_claim_ids = data .load_from_parsed_opts (
60+ environment .parsed_options ,
61+ db_idr .get_regression_claim_ids ,
62+ data_type_name = "claim_ids" ,
63+ )
64+
65+ logger = logging .getLogger (__name__ )
3966
4067class RegressionV3User (BFDUserBase ):
4168 """Regression test suite for V3 BFD Server endpoints.
@@ -47,12 +74,22 @@ class RegressionV3User(BFDUserBase):
4774
4875 # Do we terminate the tests when a test runs out of data and paginated URLs?
4976 END_ON_NO_DATA = False
50- BENE_LAST_UPDATED = {"_lastUpdated" : "gt2020-05-05" }
77+ LAST_UPDATED_FILTER = {"_lastUpdated" : "gt2020-05-05" }
78+ SERVICE_DATE_RANGE = {"service-date" : "ge2020-01-01" }
5179
5280 def __init__ (self , * args , ** kwargs ):
5381 super ().__init__ (* args , ** kwargs )
82+ logger .info (f"Loaded { len (master_bene_sks )} bene_sks." )
83+ logger .info (f"Loaded { len (master_bene_sks_part_a )} bene_sks_part_a." )
84+ logger .info (f"Loaded { len (master_bene_sks_part_b )} bene_sks_part_b." )
85+ logger .info (f"Loaded { len (master_bene_mbis )} bene_mbis." )
86+ logger .info (f"Loaded { len (master_claim_ids )} claim_ids." )
87+
5488 self .bene_sks = itertools .cycle (list (master_bene_sks ))
89+ self .bene_sks_part_a = itertools .cycle (list (master_bene_sks_part_a ))
90+ self .bene_sks_part_b = itertools .cycle (list (master_bene_sks_part_b ))
5591 self .bene_mbis = itertools .cycle (list (master_bene_mbis ))
92+ self .claim_ids = itertools .cycle (list (master_claim_ids ))
5693
5794 @tag ("patient" , "patient_read_id" )
5895 @task
@@ -114,7 +151,7 @@ def patient_search_mbi_last_updated(self):
114151 "identifier" : f"http://hl7.org/fhir/sid/us-mbi|{ next (self .bene_mbis )} " ,
115152 "_format" : "application/fhir+json" ,
116153 }
117- | self .BENE_LAST_UPDATED ,
154+ | self .LAST_UPDATED_FILTER ,
118155 name = "/v3/fhir/Patient search by mbi with last updated" ,
119156 )
120157
@@ -129,3 +166,156 @@ def patient_search_mbi_post(self):
129166 },
130167 name = "/v3/fhir/Patient search by mbi (POST)" ,
131168 )
169+
170+
171+ # ==========================================================
172+ # Coverage Endpoint Tests
173+ # ==========================================================
174+
175+ @tag ("coverage" , "coverage_read_id_part_a" )
176+ @task
177+ def coverage_read_id_part_a (self ):
178+ """Coverage read by composite ID for Part A"""
179+ coverage_id = f"part-a-{ next (self .bene_sks_part_a )} "
180+
181+ self .run_task_by_parameters (
182+ base_path = f"/v3/fhir/Coverage/{ coverage_id } " ,
183+ params = {
184+ "_format" : "application/fhir+json" ,
185+ },
186+ name = "/v3/fhir/Coverage read part A" ,
187+ )
188+
189+ @tag ("coverage" , "coverage_read_id_part_b" )
190+ @task
191+ def coverage_read_id_part_b (self ):
192+ """Coverage read by composite ID for Part B"""
193+ coverage_id = f"part-b-{ next (self .bene_sks_part_b )} "
194+
195+ self .run_task_by_parameters (
196+ base_path = f"/v3/fhir/Coverage/{ coverage_id } " ,
197+ params = {
198+ "_format" : "application/fhir+json" ,
199+ },
200+ name = "/v3/fhir/Coverage read Part B" ,
201+ )
202+
203+ @tag ("coverage" , "coverage_search_id" )
204+ @task
205+ def coverage_search_id_part_b (self ):
206+ """Coverage search by composite ID for Part B"""
207+ bene_sk = next (self .bene_sks )
208+ coverage_id = f"part-b-{ bene_sk } "
209+ self .run_task_by_parameters (
210+ base_path = "/v3/fhir/Coverage" ,
211+ params = {
212+ "_id" : coverage_id ,
213+ "_format" : "application/fhir+json" ,
214+ },
215+ name = "/v3/fhir/Coverage search by id" ,
216+ )
217+
218+ @tag ("coverage" , "coverage_search_beneficiary" )
219+ @task
220+ def coverage_search_by_beneficiary (self ):
221+ """Coverage search by beneficiary ID"""
222+ self .run_task_by_parameters (
223+ base_path = "/v3/fhir/Coverage" ,
224+ params = {
225+ "beneficiary" : f"Patient/{ next (self .bene_sks )} " ,
226+ "_format" : "application/fhir+json" ,
227+ },
228+ name = "/v3/fhir/Coverage search by beneficiary" ,
229+ )
230+
231+ @tag ("coverage" , "coverage_search_beneficiary_post" )
232+ @task
233+ def coverage_search_by_beneficiary_post (self ):
234+ self .run_task_by_parameters (
235+ base_path = "/v3/fhir/Coverage/_search" ,
236+ body = {
237+ "beneficiary" : f"Patient/{ next (self .bene_sks )} " ,
238+ },
239+ name = "/v3/fhir/Coverage search by beneficiary (POST)" ,
240+ )
241+
242+
243+ @tag ("coverage" , "coverage_search_last_updated" )
244+ @task
245+ def coverage_search_last_updated (self ):
246+ """Coverage search by beneficiary with _lastUpdated filter."""
247+ self .run_task_by_parameters (
248+ base_path = "/v3/fhir/Coverage" ,
249+ params = {
250+ "beneficiary" : f"Patient/{ next (self .bene_sks )} " ,
251+ "_format" : "application/fhir+json" ,
252+ } | self .LAST_UPDATED_FILTER ,
253+ name = "/v3/fhir/Coverage search by beneficiary with last updated" ,
254+ )
255+
256+ # ==========================================================
257+ # ExplanationOfBenefit (EOB) Endpoint Tests
258+ # ==========================================================
259+
260+ @tag ("eob" , "eob_read" )
261+ @task
262+ def eob_read (self ):
263+ """ExplanationOfBenefit read by its unique claim ID."""
264+
265+ self .run_task_by_parameters (
266+ base_path = f"/v3/fhir/ExplanationOfBenefit/{ next (self .claim_ids )} " ,
267+ params = {
268+ "_format" : "application/fhir+json"
269+ },
270+ name = "/v3/fhir/ExplanationOfBenefit read" ,
271+ )
272+
273+
274+ @tag ("eob" , "eob_search_id" )
275+ @task
276+ def eob_search_id (self ):
277+ """ExplanationOfBenefit search by its unique claim ID."""
278+ claim_id = next (self .claim_ids )
279+
280+ self .run_task_by_parameters (
281+ base_path = "/v3/fhir/ExplanationOfBenefit" ,
282+ params = {"_id" : claim_id , "_format" : "application/fhir+json" },
283+ name = "/v3/fhir/ExplanationOfBenefit search by id" ,
284+ )
285+
286+ @tag ("eob" , "eob_search_patient" )
287+ @task
288+ def eob_search_patient (self ):
289+ """ExplanationOfBenefit search by patient ID (bene_sk)."""
290+
291+ self .run_task_by_parameters (
292+ base_path = "/v3/fhir/ExplanationOfBenefit" ,
293+ params = {"patient" : next (self .bene_sks ), "_format" : "application/fhir+json" },
294+ name = "/v3/fhir/ExplanationOfBenefit search by patient" ,
295+ )
296+
297+ @tag ("eob" , "eob_search_service_date" )
298+ @task
299+ def eob_search_service_date (self ):
300+ """ExplanationOfBenefit search by patient and service-date."""
301+ self .run_task_by_parameters (
302+ base_path = "/v3/fhir/ExplanationOfBenefit" ,
303+ params = {
304+ "patient" : next (self .bene_sks ),
305+ "_format" : "application/fhir+json" ,
306+ } | self .SERVICE_DATE_RANGE ,
307+ name = "/v3/fhir/ExplanationOfBenefit search by service-date" ,
308+ )
309+
310+ @tag ("eob" , "eob_search_last_updated" )
311+ @task
312+ def eob_search_last_updated (self ):
313+ """ExplanationOfBenefit search by patient with _lastUpdated."""
314+ self .run_task_by_parameters (
315+ base_path = "/v3/fhir/ExplanationOfBenefit" ,
316+ params = {
317+ "patient" : next (self .bene_sks ),
318+ "_format" : "application/fhir+json" ,
319+ } | self .LAST_UPDATED_FILTER ,
320+ name = "/v3/fhir/ExplanationOfBenefit search by patient with last updated" ,
321+ )
0 commit comments