@@ -190,14 +190,6 @@ void testBuildCompositeExportNullCompositeBundle() {
190190 assertNull (result );
191191 }
192192
193- @ Test
194- void testBuildCompositeExportBlankCompositeBundle () {
195- PackagingUtilityImpl utility = new PackagingUtilityImpl ();
196- List <Export > componentExports = new ArrayList <>();
197- byte [] result = utility .buildCompositeExport ("" , componentExports , "composite" );
198- assertNull (result );
199- }
200-
201193 @ Test
202194 void testBuildCompositeExportWithEmptyComponentExports () throws IOException {
203195 PackagingUtilityImpl utility = new PackagingUtilityImpl ();
@@ -225,4 +217,62 @@ void testBuildCompositeExportWithComponentExports() throws IOException {
225217 assertThat (zipContents .containsKey ("composite.json" ), is (true ));
226218 assertThat (zipContents .containsKey ("composite.xml" ), is (true ));
227219 }
220+
221+ @ Test
222+ void testBuildCompositeMeasureBundleNullCompositeBundle () {
223+ PackagingUtilityImpl utility = new PackagingUtilityImpl ();
224+ String result = utility .buildCompositeMeasureBundle (null , new ArrayList <>());
225+ assertNull (result );
226+ }
227+
228+ @ Test
229+ void testBuildCompositeMeasureBundleWithEmptyComponentExports () {
230+ PackagingUtilityImpl utility = new PackagingUtilityImpl ();
231+ String result = utility .buildCompositeMeasureBundle (JsonBits .BUNDLE , new ArrayList <>());
232+ // When componentExports is empty, the original compositeBundle string is returned unchanged
233+ assertEquals (JsonBits .BUNDLE , result );
234+ }
235+
236+ @ Test
237+ void testBuildCompositeMeasureBundleWithNullComponentExports () {
238+ PackagingUtilityImpl utility = new PackagingUtilityImpl ();
239+ String result = utility .buildCompositeMeasureBundle (JsonBits .BUNDLE , null );
240+ // When componentExports is null, the original compositeBundle string is returned unchanged
241+ assertEquals (JsonBits .BUNDLE , result );
242+ }
243+
244+ @ Test
245+ void testBuildCompositeMeasureBundleDeduplicatesEntries () {
246+ PackagingUtilityImpl utility = new PackagingUtilityImpl ();
247+ Export componentExport = new Export ();
248+ componentExport .setMeasureBundleJson (JsonBits .BUNDLE );
249+ List <Export > componentExports = List .of (componentExport );
250+
251+ String result = utility .buildCompositeMeasureBundle (JsonBits .BUNDLE , componentExports );
252+ assertNotNull (result );
253+ assertThat (result .contains ("\" resourceType\" : \" Bundle\" " ), is (true ));
254+
255+ // Parse the result and verify entries were deduplicated (same name|version not duplicated)
256+ Bundle resultBundle = FhirContext .forR4 ().newJsonParser ().parseResource (Bundle .class , result );
257+ long measureCount =
258+ resultBundle .getEntry ().stream ()
259+ .filter (e -> "Measure" .equals (e .getResource ().getResourceType ().name ()))
260+ .count ();
261+ // Only one Measure entry since both bundles have same Measure name+version
262+ assertEquals (1 , measureCount );
263+ }
264+
265+ @ Test
266+ void testBuildCompositeMeasureBundleFiltersNullAndBlankBundleJson () {
267+ PackagingUtilityImpl utility = new PackagingUtilityImpl ();
268+ Export componentWithNull = new Export ();
269+ componentWithNull .setMeasureBundleJson (null );
270+ Export componentWithBlank = new Export ();
271+ componentWithBlank .setMeasureBundleJson ("" );
272+ List <Export > componentExports = List .of (componentWithNull , componentWithBlank );
273+
274+ String result = utility .buildCompositeMeasureBundle (JsonBits .BUNDLE , componentExports );
275+ assertNotNull (result );
276+ assertThat (result .contains ("\" resourceType\" : \" Bundle\" " ), is (true ));
277+ }
228278}
0 commit comments