@@ -846,9 +846,6 @@ void putItems__whenSameItemInMultipleVersions__thenStableIdsAcrossVersions() {
846846 // 2. Items carried over from v1 to v2 have stable IDs (not regenerated per version)
847847 assertThat (v2ItemIds ).containsAll (v1ItemIds )
848848 .as ("Version 2 should contain all item IDs from version 1 (stable across versions)" );
849-
850- // 3. Version 2 has one additional item
851- assertThat (v2ItemIds ).hasSize (3 );
852849 }
853850 }
854851
@@ -1412,6 +1409,33 @@ void deleteItems__whenDeleteByFilters__thenCreateNewVersionWithoutMatchingItems(
14121409 datasetId , 1 , 10 , "v1" , API_KEY , TEST_WORKSPACE ).content ();
14131410 assertThat (v1ItemsAfter ).hasSize (3 );
14141411 }
1412+
1413+ @ Test
1414+ @ DisplayName ("Error: Delete with item IDs from different datasets returns 400" )
1415+ void deleteItems__whenItemIdsSpanMultipleDatasets__thenReturn400 () {
1416+ var dataset1Id = createDataset (UUID .randomUUID ().toString ());
1417+ createDatasetItems (dataset1Id , 2 );
1418+ var dataset1Items = datasetResourceClient .getDatasetItems (
1419+ dataset1Id , 1 , 10 , DatasetVersionService .LATEST_TAG , API_KEY , TEST_WORKSPACE ).content ();
1420+
1421+ var dataset2Id = createDataset (UUID .randomUUID ().toString ());
1422+ createDatasetItems (dataset2Id , 2 );
1423+ var dataset2Items = datasetResourceClient .getDatasetItems (
1424+ dataset2Id , 1 , 10 , DatasetVersionService .LATEST_TAG , API_KEY , TEST_WORKSPACE ).content ();
1425+
1426+ var mixedIds = Set .of (dataset1Items .getFirst ().id (), dataset2Items .getFirst ().id ());
1427+
1428+ var deleteRequest = DatasetItemsDelete .builder ()
1429+ .itemIds (mixedIds )
1430+ .batchGroupId (UUID .randomUUID ())
1431+ .build ();
1432+ try (var response = datasetResourceClient .callDeleteDatasetItems (deleteRequest , TEST_WORKSPACE , API_KEY )) {
1433+ assertThat (response .getStatusInfo ().getStatusCode ()).isEqualTo (HttpStatus .SC_BAD_REQUEST );
1434+ assertThat (response .readEntity (io .dropwizard .jersey .errors .ErrorMessage .class ))
1435+ .isEqualTo (new io .dropwizard .jersey .errors .ErrorMessage (HttpStatus .SC_BAD_REQUEST ,
1436+ "Cannot operate on items across multiple datasets" ));
1437+ }
1438+ }
14151439 }
14161440
14171441 @ Nested
@@ -1702,6 +1726,7 @@ void getItemById__whenUsingIdFromApiResponse__thenReturnsItem() {
17021726 // Then - Verify item is returned correctly
17031727 assertThat (fetchedItem ).isNotNull ();
17041728 assertThat (fetchedItem .id ()).isEqualTo (itemId );
1729+ assertThat (fetchedItem .datasetItemId ()).isEqualTo (fetchedItem .id ());
17051730 assertThat (fetchedItem .datasetId ()).isEqualTo (datasetId );
17061731 }
17071732
@@ -2211,6 +2236,34 @@ void batchUpdateByEmptyFilters__shouldUpdateAllItems() {
22112236 assertThat (itemsWithTag3 ).hasSize (1 );
22122237 assertThat (itemsWithTag3 .get (0 ).tags ()).containsExactlyInAnyOrder ("tag3" , newTag );
22132238 }
2239+
2240+ @ Test
2241+ @ DisplayName ("Error: Batch update with item IDs from different datasets returns 400" )
2242+ void batchUpdate__whenItemIdsSpanMultipleDatasets__thenReturn400 () {
2243+ var dataset1Id = createDataset (UUID .randomUUID ().toString ());
2244+ createDatasetItems (dataset1Id , 2 );
2245+ var dataset1Items = datasetResourceClient .getDatasetItems (
2246+ dataset1Id , 1 , 10 , DatasetVersionService .LATEST_TAG , API_KEY , TEST_WORKSPACE ).content ();
2247+
2248+ var dataset2Id = createDataset (UUID .randomUUID ().toString ());
2249+ createDatasetItems (dataset2Id , 2 );
2250+ var dataset2Items = datasetResourceClient .getDatasetItems (
2251+ dataset2Id , 1 , 10 , DatasetVersionService .LATEST_TAG , API_KEY , TEST_WORKSPACE ).content ();
2252+
2253+ var mixedIds = Set .of (dataset1Items .getFirst ().id (), dataset2Items .getFirst ().id ());
2254+
2255+ var batchUpdate = DatasetItemBatchUpdate .builder ()
2256+ .ids (mixedIds )
2257+ .update (DatasetItemUpdate .builder ().tags (Set .of ("test" )).build ())
2258+ .build ();
2259+ try (var response = datasetResourceClient .callBatchUpdateDatasetItems (batchUpdate , API_KEY ,
2260+ TEST_WORKSPACE )) {
2261+ assertThat (response .getStatusInfo ().getStatusCode ()).isEqualTo (HttpStatus .SC_BAD_REQUEST );
2262+ assertThat (response .readEntity (io .dropwizard .jersey .errors .ErrorMessage .class ))
2263+ .isEqualTo (new io .dropwizard .jersey .errors .ErrorMessage (HttpStatus .SC_BAD_REQUEST ,
2264+ "Cannot operate on items across multiple datasets" ));
2265+ }
2266+ }
22142267 }
22152268
22162269 @ Nested
0 commit comments