From 0a994e5d12a2d0810f49b96938ce2130cfd867c0 Mon Sep 17 00:00:00 2001 From: Miroslav Kramolinski Date: Fri, 16 Jan 2026 16:32:48 +0200 Subject: [PATCH 1/4] Add support for DELETE /2.0/reports/{reportId} --- .../com/smartsheet/api/ReportResources.java | 19 +++++++++++++++++++ .../api/internal/ReportResourcesImpl.java | 4 ++++ .../api/internal/ReportResourcesImplTest.java | 6 ++++++ src/test/resources/deleteReport.json | 1 + 4 files changed, 30 insertions(+) create mode 100644 src/test/resources/deleteReport.json diff --git a/src/main/java/com/smartsheet/api/ReportResources.java b/src/main/java/com/smartsheet/api/ReportResources.java index 973ed7039..c82cb178a 100644 --- a/src/main/java/com/smartsheet/api/ReportResources.java +++ b/src/main/java/com/smartsheet/api/ReportResources.java @@ -218,4 +218,23 @@ Report getReport( * @return the created ShareResources object */ ShareResources shareResources(); + + /** + *

Delete a report.

+ * + *

It mirrors to the following Smartsheet REST API method: DELETE /report{id}

+ *

+ * Parameters: - id : the ID of the report + *

+ * Returns: None + * + * @param id the id + * @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 1951411c1..5e62b0361 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 b417003e2..aa6eabcd3 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 ShartsheetException, IOException { + server.setResponseBody(new File("src/test/resources/deleteReport.json")); + assertThatCode(() -> reportResources.deleteReport(1122334L)).doesNotThrowAnyException(); + } } diff --git a/src/test/resources/deleteReport.json b/src/test/resources/deleteReport.json new file mode 100644 index 000000000..04deda864 --- /dev/null +++ b/src/test/resources/deleteReport.json @@ -0,0 +1 @@ +{"resultCode":0,"message":"SUCCESS"} \ No newline at end of file From 20bc5df84eefe8f99428bdf17a25af4d1554f96e Mon Sep 17 00:00:00 2001 From: Miroslav Kramolinski Date: Fri, 16 Jan 2026 16:58:08 +0200 Subject: [PATCH 2/4] Fix javadoc --- src/main/java/com/smartsheet/api/ReportResources.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/smartsheet/api/ReportResources.java b/src/main/java/com/smartsheet/api/ReportResources.java index c82cb178a..38540df20 100644 --- a/src/main/java/com/smartsheet/api/ReportResources.java +++ b/src/main/java/com/smartsheet/api/ReportResources.java @@ -220,15 +220,11 @@ Report getReport( ShareResources shareResources(); /** - *

Delete a report.

+ *

Deletes a report.

* - *

It mirrors to the following Smartsheet REST API method: DELETE /report{id}

- *

- * Parameters: - id : the ID of the report - *

- * Returns: None + *

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

* - * @param id the id + * @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) From b6a069c29548e288985cbf2141c4672e39c39d50 Mon Sep 17 00:00:00 2001 From: Miroslav Kramolinski Date: Wed, 21 Jan 2026 15:07:15 +0200 Subject: [PATCH 3/4] Add mock API tests --- .../api/internal/ReportResourcesImplTest.java | 2 +- .../smartsheet/api/sdktest/ReportsTests.java | 78 +++++++++++++++++++ .../api/sdktest/{users => }/Utils.java | 2 +- .../api/sdktest/users/TestDeactivateUser.java | 1 + .../api/sdktest/users/TestListUserPlans.java | 1 + .../api/sdktest/users/TestListUsers.java | 1 + .../api/sdktest/users/TestReactivateUser.java | 1 + .../sdktest/users/TestRemoveUserFromPlan.java | 1 + .../users/TestUserUpgradeDowngrade.java | 1 + 9 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/smartsheet/api/sdktest/ReportsTests.java rename src/test/java/com/smartsheet/api/sdktest/{users => }/Utils.java (96%) diff --git a/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java b/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java index aa6eabcd3..d31fdb2eb 100644 --- a/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java +++ b/src/test/java/com/smartsheet/api/internal/ReportResourcesImplTest.java @@ -133,7 +133,7 @@ void testGetReportAsCsv() throws SmartsheetException, IOException { } @Test - void testDeleteReport() throws ShartsheetException, IOException { + 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 000000000..94203e2aa --- /dev/null +++ b/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java @@ -0,0 +1,78 @@ +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 29416a2b9..8d570c095 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 e1f6b82aa..d5a3790c7 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 4c0b97bf7..99f450b35 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 9758c69e3..8715ab59f 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 cdb4f45c7..f87f21939 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 f503a6010..0c42c1117 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 d4c33c085..18793634b 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; From 6513f61880d4a58db800f8ee0d2cd9058a3fe6e2 Mon Sep 17 00:00:00 2001 From: Miroslav Kramolinski Date: Wed, 21 Jan 2026 15:11:45 +0200 Subject: [PATCH 4/4] Add file header --- .../com/smartsheet/api/sdktest/ReportsTests.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java b/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java index 94203e2aa..4cc0eed04 100644 --- a/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java +++ b/src/test/java/com/smartsheet/api/sdktest/ReportsTests.java @@ -1,3 +1,19 @@ +/* + * 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;