Skip to content

Commit

Permalink
Delete application created during git import for empty repo (appsmith…
Browse files Browse the repository at this point in the history
  • Loading branch information
AnaghHegde committed May 10, 2022
1 parent c75e330 commit ab3d1d9
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1936,6 +1936,12 @@ public Mono<ApplicationImportDTO> importApplicationFromGit(String organizationId
List<Datasource> datasourceList = data.getT2();
List<Plugin> pluginList = data.getT3();

if(Optional.ofNullable(applicationJson.getExportedApplication()).isEmpty()
|| applicationJson.getPageList().isEmpty()) {
return deleteApplicationCreatedFromGitImport(application.getId(), application.getOrganizationId(), gitApplicationMetadata.getRepoName())
.then(Mono.error(new AppsmithException(AppsmithError.GIT_ACTION_FAILED, "import", "Cannot import app from an empty repo")));
}

// If there is an existing datasource with the same name but a different type from that in the repo, the import api should fail
if(checkIsDatasourceNameConflict(datasourceList, applicationJson.getDatasourceList(), pluginList)) {
return deleteApplicationCreatedFromGitImport(application.getId(), application.getOrganizationId(), gitApplicationMetadata.getRepoName())
Expand All @@ -1945,11 +1951,6 @@ public Mono<ApplicationImportDTO> importApplicationFromGit(String organizationId
);
}

if(Optional.ofNullable(applicationJson.getExportedApplication()).isEmpty()
|| applicationJson.getPageList().isEmpty()) {
return Mono.error(new AppsmithException(AppsmithError.GIT_ACTION_FAILED, "import", "Cannot import app from an empty repo"));
}

applicationJson.getExportedApplication().setGitApplicationMetadata(gitApplicationMetadata);
return importExportApplicationService
.importApplicationInOrganization(organizationId, applicationJson, application.getId(), defaultBranch)
Expand Down Expand Up @@ -2150,27 +2151,6 @@ public Mono<Application> discardChanges(String defaultApplicationId, String bran
);
}

private Mono<List<Datasource>> findNonConfiguredDatasourceByApplicationId(String applicationId,
List<Datasource> datasourceList) {
return newActionService.findAllByApplicationIdAndViewMode(applicationId, false, AclPermission.READ_ACTIONS, null)
.collectList()
.flatMap(actionList -> {
List<String> usedDatasource = actionList.stream()
.map(newAction -> newAction.getUnpublishedAction().getDatasource().getId())
.collect(Collectors.toList());

datasourceList.removeIf(datasource -> !usedDatasource.contains(datasource.getId()));

return Mono.just(datasourceList);
})
.map(datasources -> {
for (Datasource datasource:datasources) {
datasource.setIsConfigured(Optional.ofNullable(datasource.getDatasourceConfiguration()).isEmpty());
}
return datasources;
});
}

private Mono<Application> deleteApplicationCreatedFromGitImport(String applicationId, String organizationId, String repoName) {
Path repoSuffix = Paths.get(organizationId, applicationId, repoName);
return fileUtils.deleteLocalRepo(repoSuffix)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2491,6 +2491,29 @@ public void importApplicationFromGit_validRequestWithDuplicateDatasourceOfDiffer
.verify();
}

@Test
@WithUserDetails(value = "api_user")
public void importApplicationFromGit_validRequestWithEmptyRepo_ThrowError() {
GitConnectDTO gitConnectDTO = getConnectRequest("[email protected]:test/emptyRepo.git", testUserProfile);
GitAuth gitAuth = gitService.generateSSHKey().block();

ApplicationJson applicationJson =new ApplicationJson();

Mockito.when(gitExecutor.cloneApplication(Mockito.any(Path.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
.thenReturn(Mono.just("defaultBranch"));
Mockito.when(gitFileUtils.reconstructApplicationJsonFromGitRepo(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
.thenReturn(Mono.just(applicationJson));
Mockito.when(gitFileUtils.detachRemote(Mockito.any(Path.class))).thenReturn(Mono.just(true));

Mono<ApplicationImportDTO> applicationMono = gitService.importApplicationFromGit(orgId, gitConnectDTO);

StepVerifier
.create(applicationMono)
.expectErrorMatches(throwable -> throwable instanceof AppsmithException
&& throwable.getMessage().contains("Cannot import app from an empty repo"))
.verify();
}

// TODO TCs for merge is pending

@Test
Expand Down

0 comments on commit ab3d1d9

Please sign in to comment.