diff --git a/src/main/java/com/smartsheet/api/ReportResources.java b/src/main/java/com/smartsheet/api/ReportResources.java index 973ed703..38540df2 100644 --- a/src/main/java/com/smartsheet/api/ReportResources.java +++ b/src/main/java/com/smartsheet/api/ReportResources.java @@ -218,4 +218,19 @@ Report getReport( * @return the created ShareResources object */ ShareResources shareResources(); + + /** + *

Deletes a report.

+ * + *

Mirrors the following Smartsheet REST API method: DELETE /reports/{reportId}

+ * + * @param id the id of the report + * @throws IllegalArgumentException if any argument is null or empty string + * @throws InvalidRequestException if there is any problem with the REST API request + * @throws AuthorizationException if there is any problem with the REST API authorization (access token) + * @throws ResourceNotFoundException if the resource cannot be found + * @throws ServiceUnavailableException if the REST API service is not available (possibly due to rate limiting) + * @throws SmartsheetException if there is any other error during the operation + */ + void deleteReport(long id) throws SmartsheetException; } diff --git a/src/main/java/com/smartsheet/api/internal/ReportResourcesImpl.java b/src/main/java/com/smartsheet/api/internal/ReportResourcesImpl.java index 1951411c..5e62b036 100644 --- a/src/main/java/com/smartsheet/api/internal/ReportResourcesImpl.java +++ b/src/main/java/com/smartsheet/api/internal/ReportResourcesImpl.java @@ -313,4 +313,8 @@ public ReportPublish updatePublishStatus(long id, ReportPublish reportPublish) t public ShareResources shareResources() { return this.shares; } + + public void deleteReport(long id) throws SmartsheetException { + this.deleteResource(REPORTS_PATH + id, Report.class); + } } diff --git a/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java b/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java index b417003e..d31fdb2e 100644 --- a/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java +++ b/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java @@ -131,4 +131,10 @@ void testGetReportAsCsv() throws SmartsheetException, IOException { byte[] data = Files.readAllBytes(Paths.get(file.getPath())); assertThat(output.toByteArray()).hasSameSizeAs(data); } + + @Test + void testDeleteReport() throws IOException { + server.setResponseBody(new File("src/test/resources/deleteReport.json")); + assertThatCode(() -> reportResources.deleteReport(1122334L)).doesNotThrowAnyException(); + } } diff --git a/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java b/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java new file mode 100644 index 00000000..4cc0eed0 --- /dev/null +++ b/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2025 Smartsheet + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.smartsheet.api.sdktest; + +import com.github.tomakehurst.wiremock.verification.LoggedRequest; +import com.smartsheet.api.Smartsheet; +import com.smartsheet.api.SmartsheetException; +import com.smartsheet.api.WiremockClient; +import com.smartsheet.api.WiremockClientWrapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.net.URI; +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ReportsTests { + + private static final long TEST_REPORT_ID = 1123581321L; + + @Test + void testDeleteReportGeneratedUrlIsCorrect() throws SmartsheetException { + String requestId = UUID.randomUUID().toString(); + WiremockClientWrapper wrapper = Utils.createWiremockSmartsheetClient( + "/reports/delete-report/all-response-body-properties", + requestId + ); + Smartsheet smartsheet = wrapper.getSmartsheet(); + WiremockClient wiremockClient = wrapper.getWiremockClient(); + + smartsheet.reportResources().deleteReport(TEST_REPORT_ID); + LoggedRequest wiremockRequest = wiremockClient.findWiremockRequest(requestId); + String path = URI.create(wiremockRequest.getUrl()).getPath(); + + assertThat(path).isEqualTo("/2.0/reports/" + TEST_REPORT_ID); + assertThat(wiremockRequest.getMethod().getName()).isEqualTo("DELETE"); + } + + @Test + void testRemoveUserFromPlanAllResponseBodyProperties() throws SmartsheetException { + String requestId = UUID.randomUUID().toString(); + WiremockClientWrapper wrapper = Utils.createWiremockSmartsheetClient( + "/reports/delete-report/all-response-body-properties", + requestId + ); + Smartsheet smartsheet = wrapper.getSmartsheet(); + + Assertions.assertDoesNotThrow(() -> { + smartsheet.reportResources().deleteReport(TEST_REPORT_ID); + }); + } + + @Test + void testUpgradeUserError500Response() { + String requestId = UUID.randomUUID().toString(); + WiremockClientWrapper wrapper = Utils.createWiremockSmartsheetClient("/errors/500-response", requestId); + Smartsheet smartsheet = wrapper.getSmartsheet(); + + SmartsheetException exception = Assertions.assertThrows(SmartsheetException.class, () -> { + smartsheet.reportResources().deleteReport(TEST_REPORT_ID); + }); + + assertThat(exception.getMessage()).contains("Internal Server Error"); + } + + @Test + void testUpgradeUserError400Response() { + String requestId = UUID.randomUUID().toString(); + WiremockClientWrapper wrapper = Utils.createWiremockSmartsheetClient("/errors/400-response", requestId); + Smartsheet smartsheet = wrapper.getSmartsheet(); + + SmartsheetException exception = Assertions.assertThrows(SmartsheetException.class, () -> { + smartsheet.reportResources().deleteReport(TEST_REPORT_ID); + }); + + assertThat(exception.getMessage()).contains("Malformed Request"); + } + +} diff --git a/src/test/java/com/smartsheet/api/sdktest/users/Utils.java b/src/test/java/com/smartsheet/api/sdktest/Utils.java similarity index 96% rename from src/test/java/com/smartsheet/api/sdktest/users/Utils.java rename to src/test/java/com/smartsheet/api/sdktest/Utils.java index 29416a2b..8d570c09 100644 --- a/src/test/java/com/smartsheet/api/sdktest/users/Utils.java +++ b/src/test/java/com/smartsheet/api/sdktest/Utils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.smartsheet.api.sdktest.users; +package com.smartsheet.api.sdktest; import com.smartsheet.api.Smartsheet; import com.smartsheet.api.WiremockClient; diff --git a/src/test/java/com/smartsheet/api/sdktest/users/TestDeactivateUser.java b/src/test/java/com/smartsheet/api/sdktest/users/TestDeactivateUser.java index e1f6b82a..d5a3790c 100644 --- a/src/test/java/com/smartsheet/api/sdktest/users/TestDeactivateUser.java +++ b/src/test/java/com/smartsheet/api/sdktest/users/TestDeactivateUser.java @@ -21,6 +21,7 @@ import com.smartsheet.api.SmartsheetException; import com.smartsheet.api.WiremockClient; import com.smartsheet.api.WiremockClientWrapper; +import com.smartsheet.api.sdktest.Utils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/smartsheet/api/sdktest/users/TestListUserPlans.java b/src/test/java/com/smartsheet/api/sdktest/users/TestListUserPlans.java index 4c0b97bf..99f450b3 100644 --- a/src/test/java/com/smartsheet/api/sdktest/users/TestListUserPlans.java +++ b/src/test/java/com/smartsheet/api/sdktest/users/TestListUserPlans.java @@ -25,6 +25,7 @@ import com.smartsheet.api.models.TokenPaginatedResult; import com.smartsheet.api.models.UserPlan; import com.smartsheet.api.models.enums.SeatType; +import com.smartsheet.api.sdktest.Utils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/smartsheet/api/sdktest/users/TestListUsers.java b/src/test/java/com/smartsheet/api/sdktest/users/TestListUsers.java index 9758c69e..8715ab59 100644 --- a/src/test/java/com/smartsheet/api/sdktest/users/TestListUsers.java +++ b/src/test/java/com/smartsheet/api/sdktest/users/TestListUsers.java @@ -27,6 +27,7 @@ import com.smartsheet.api.models.User; import com.smartsheet.api.models.enums.SeatType; import com.smartsheet.api.models.enums.UserStatus; +import com.smartsheet.api.sdktest.Utils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/smartsheet/api/sdktest/users/TestReactivateUser.java b/src/test/java/com/smartsheet/api/sdktest/users/TestReactivateUser.java index cdb4f45c..f87f2193 100644 --- a/src/test/java/com/smartsheet/api/sdktest/users/TestReactivateUser.java +++ b/src/test/java/com/smartsheet/api/sdktest/users/TestReactivateUser.java @@ -21,6 +21,7 @@ import com.smartsheet.api.SmartsheetException; import com.smartsheet.api.WiremockClient; import com.smartsheet.api.WiremockClientWrapper; +import com.smartsheet.api.sdktest.Utils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/smartsheet/api/sdktest/users/TestRemoveUserFromPlan.java b/src/test/java/com/smartsheet/api/sdktest/users/TestRemoveUserFromPlan.java index f503a601..0c42c111 100644 --- a/src/test/java/com/smartsheet/api/sdktest/users/TestRemoveUserFromPlan.java +++ b/src/test/java/com/smartsheet/api/sdktest/users/TestRemoveUserFromPlan.java @@ -21,6 +21,7 @@ import com.smartsheet.api.SmartsheetException; import com.smartsheet.api.WiremockClient; import com.smartsheet.api.WiremockClientWrapper; +import com.smartsheet.api.sdktest.Utils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/smartsheet/api/sdktest/users/TestUserUpgradeDowngrade.java b/src/test/java/com/smartsheet/api/sdktest/users/TestUserUpgradeDowngrade.java index d4c33c08..18793634 100644 --- a/src/test/java/com/smartsheet/api/sdktest/users/TestUserUpgradeDowngrade.java +++ b/src/test/java/com/smartsheet/api/sdktest/users/TestUserUpgradeDowngrade.java @@ -25,6 +25,7 @@ import com.smartsheet.api.WiremockClientWrapper; import com.smartsheet.api.models.enums.DowngradeSeatType; import com.smartsheet.api.models.enums.UpgradeSeatType; +import com.smartsheet.api.sdktest.Utils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/src/test/resources/deleteReport.json b/src/test/resources/deleteReport.json new file mode 100644 index 00000000..04deda86 --- /dev/null +++ b/src/test/resources/deleteReport.json @@ -0,0 +1 @@ +{"resultCode":0,"message":"SUCCESS"} \ No newline at end of file