From 8df75df8587e31db3c5c5d4c14ce1c92c5ccae3f Mon Sep 17 00:00:00 2001 From: dashevchenko Date: Fri, 7 Mar 2025 14:11:10 +0200 Subject: [PATCH] fixed repository settings deletion --- .../DefaultEntitiesVersionControlService.java | 2 + .../controller/RepositorySettingsTest.java | 79 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java diff --git a/application/src/main/java/org/thingsboard/server/service/sync/vc/DefaultEntitiesVersionControlService.java b/application/src/main/java/org/thingsboard/server/service/sync/vc/DefaultEntitiesVersionControlService.java index 89b51ce84a..8ef6465d4b 100644 --- a/application/src/main/java/org/thingsboard/server/service/sync/vc/DefaultEntitiesVersionControlService.java +++ b/application/src/main/java/org/thingsboard/server/service/sync/vc/DefaultEntitiesVersionControlService.java @@ -529,6 +529,8 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont @Override public ListenableFuture deleteVersionControlSettings(TenantId tenantId) { + log.debug("[{}] Deleting version control settings", tenantId); + repositorySettingsService.delete(tenantId); return gitServiceQueue.clearRepository(tenantId); } diff --git a/application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java b/application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java new file mode 100644 index 0000000000..9cd75e9a3c --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/controller/RepositorySettingsTest.java @@ -0,0 +1,79 @@ +/** + * Copyright © 2016-2025 The Thingsboard Authors + * + * 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 org.thingsboard.server.controller; + +import com.google.common.util.concurrent.SettableFuture; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.thingsboard.server.common.data.sync.vc.RepositoryAuthMethod; +import org.thingsboard.server.common.data.sync.vc.RepositorySettings; +import org.thingsboard.server.dao.service.DaoSqlTest; +import org.thingsboard.server.service.sync.vc.GitVersionControlQueueService; + +import static org.hamcrest.Matchers.is; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@Slf4j +@DaoSqlTest +public class RepositorySettingsTest extends AbstractControllerTest { + + @MockBean + private GitVersionControlQueueService gitVersionControlQueueService; + + @Test + public void testFindRepositorySettings() throws Exception { + loginTenantAdmin(); + doGet("/api/admin/repositorySettings") + .andExpect(status().isNotFound()); + + String testRepositoryUri = "https://github.com/test/version-control-test-repository.git"; + + SettableFuture successFuture = SettableFuture.create(); + successFuture.set(null); + when(gitVersionControlQueueService.initRepository(any(), any())) + .thenReturn(successFuture); + + RepositorySettings repositorySettings = new RepositorySettings(); + repositorySettings.setPassword("test"); + repositorySettings.setAuthMethod(RepositoryAuthMethod.USERNAME_PASSWORD); + repositorySettings.setRepositoryUri(testRepositoryUri); + repositorySettings.setDefaultBranch("main"); + doPost("/api/admin/repositorySettings", repositorySettings) + .andExpect(status().isOk()); + + // check repository settings + doGet("/api/admin/repositorySettings") + .andExpect(status().isOk()) + .andExpect(content().contentType(contentType)) + .andExpect(jsonPath("$.repositoryUri", is(testRepositoryUri))); + + // delete settings + when(gitVersionControlQueueService.clearRepository(any())) + .thenReturn(successFuture); + doDelete("/api/admin/repositorySettings") + .andExpect(status().isOk()); + + // check repository settings + doGet("/api/admin/repositorySettings") + .andExpect(status().isNotFound()); + } + +}