Skip to content

Commit eb20155

Browse files
committed
prevent default dataset type from being deleted #10517
1 parent 2fb4fa6 commit eb20155

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/main/java/edu/harvard/iq/dataverse/api/Datasets.java

+9
Original file line numberDiff line numberDiff line change
@@ -5178,6 +5178,15 @@ public Response deleteDatasetType(@Context ContainerRequestContext crc, @PathPar
51785178
throw new IllegalArgumentException("ID must be a number");
51795179
}
51805180

5181+
DatasetType datasetTypeToDelete = datasetTypeSvc.getById(idToDelete);
5182+
if (datasetTypeToDelete == null) {
5183+
return error(BAD_REQUEST, "Could not find dataset type with id " + idToDelete);
5184+
}
5185+
5186+
if (DatasetType.DEFAULT_DATASET_TYPE.equals(datasetTypeToDelete.getName())) {
5187+
return error(Status.FORBIDDEN, "You cannot delete the default dataset type: " + DatasetType.DEFAULT_DATASET_TYPE);
5188+
}
5189+
51815190
try {
51825191
int numDeleted = datasetTypeSvc.deleteById(idToDelete);
51835192
if (numDeleted == 1) {

src/test/java/edu/harvard/iq/dataverse/api/DatasetTypesIT.java

+23
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import jakarta.json.Json;
88
import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST;
99
import static jakarta.ws.rs.core.Response.Status.CREATED;
10+
import static jakarta.ws.rs.core.Response.Status.FORBIDDEN;
1011
import static jakarta.ws.rs.core.Response.Status.OK;
1112
import java.util.UUID;
1213
import org.hamcrest.CoreMatchers;
@@ -182,6 +183,28 @@ public void testGetDefaultDatasetType() {
182183
.body("data.name", equalTo(DatasetType.DEFAULT_DATASET_TYPE));
183184
}
184185

186+
@Test
187+
public void testDeleteDefaultDatasetType() {
188+
Response getType = UtilIT.getDatasetType(DatasetType.DEFAULT_DATASET_TYPE);
189+
getType.prettyPrint();
190+
getType.then().assertThat()
191+
.statusCode(OK.getStatusCode())
192+
.body("data.name", equalTo(DatasetType.DEFAULT_DATASET_TYPE));
193+
194+
Long doomed = JsonPath.from(getType.getBody().asString()).getLong("data.id");
195+
196+
Response createUser = UtilIT.createRandomUser();
197+
createUser.then().assertThat().statusCode(OK.getStatusCode());
198+
String username = UtilIT.getUsernameFromResponse(createUser);
199+
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
200+
UtilIT.setSuperuserStatus(username, true).then().assertThat().statusCode(OK.getStatusCode());
201+
202+
Response deleteType = UtilIT.deleteDatasetTypes(doomed, apiToken);
203+
deleteType.prettyPrint();
204+
deleteType.then().assertThat()
205+
.statusCode(FORBIDDEN.getStatusCode());
206+
}
207+
185208
@Test
186209
public void testAddAndDeleteDatasetType() {
187210
Response createUser = UtilIT.createRandomUser();

0 commit comments

Comments
 (0)