fix: Use Appsmith user profile as a fallback git profile (#9821)
* Added appsmith profile as a fallback value * Modified TC for userData to include git profile TCs * Added check for null value when user want to use repo level profile and provide empty author name or email * Refactor method names
This commit is contained in:
parent
e3732dcb55
commit
5e6e6caedb
|
|
@ -46,7 +46,7 @@ public class GitControllerCE {
|
|||
|
||||
@PostMapping("/profile/default")
|
||||
public Mono<ResponseDTO<Map<String, GitProfile>>> saveGitProfile(@RequestBody GitProfile gitProfile) {
|
||||
//Add to the userData object - git config data
|
||||
log.debug("Going to add default git profile for user");
|
||||
return service.updateOrCreateGitProfileForCurrentUser(gitProfile)
|
||||
.map(response -> new ResponseDTO<>(HttpStatus.OK.value(), response, null));
|
||||
}
|
||||
|
|
@ -54,14 +54,14 @@ public class GitControllerCE {
|
|||
@PutMapping("/profile/{defaultApplicationId}")
|
||||
public Mono<ResponseDTO<Map<String, GitProfile>>> saveGitProfile(@PathVariable String defaultApplicationId,
|
||||
@RequestBody GitProfile gitProfile) {
|
||||
// Add to the userData object - git config data
|
||||
log.debug("Going to add repo specific git profile for application: {}", defaultApplicationId);
|
||||
return service.updateOrCreateGitProfileForCurrentUser(gitProfile, defaultApplicationId)
|
||||
.map(response -> new ResponseDTO<>(HttpStatus.ACCEPTED.value(), response, null));
|
||||
}
|
||||
|
||||
@GetMapping("/profile/default")
|
||||
public Mono<ResponseDTO<GitProfile>> getDefaultGitConfigForUser() {
|
||||
return service.getGitProfileForUser()
|
||||
return service.getDefaultGitProfileOrCreateIfEmpty()
|
||||
.map(gitConfigResponse -> new ResponseDTO<>(HttpStatus.OK.value(), gitConfigResponse, null));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public interface GitServiceCE {
|
|||
|
||||
Mono<Map<String, GitProfile>> updateOrCreateGitProfileForCurrentUser(GitProfile gitProfile, String defaultApplicationId);
|
||||
|
||||
Mono<GitProfile> getGitProfileForUser();
|
||||
Mono<GitProfile> getDefaultGitProfileOrCreateIfEmpty();
|
||||
|
||||
Mono<GitProfile> getGitProfileForUser(String defaultApplicationId);
|
||||
|
||||
|
|
|
|||
|
|
@ -148,24 +148,33 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
@Override
|
||||
public Mono<Map<String, GitProfile>> updateOrCreateGitProfileForCurrentUser(GitProfile gitProfile, String defaultApplicationId) {
|
||||
|
||||
if(gitProfile.getAuthorName() == null || gitProfile.getAuthorName().length() == 0) {
|
||||
// Throw error in following situations:
|
||||
// 1. Updating or creating global git profile (defaultApplicationId = "default") and update is made with empty
|
||||
// authorName or authorEmail
|
||||
// 2. Updating or creating repo specific profile and user want to use repo specific profile but provided empty
|
||||
// values for authorName and email
|
||||
|
||||
if((DEFAULT.equals(defaultApplicationId) || Boolean.FALSE.equals(gitProfile.getUseGlobalProfile()))
|
||||
&& StringUtils.isEmptyOrNull(gitProfile.getAuthorName())
|
||||
) {
|
||||
return Mono.error( new AppsmithException(AppsmithError.INVALID_PARAMETER, "Author Name"));
|
||||
} else if(gitProfile.getAuthorEmail() == null || gitProfile.getAuthorEmail().length() == 0) {
|
||||
} else if((DEFAULT.equals(defaultApplicationId) || Boolean.FALSE.equals(gitProfile.getUseGlobalProfile()))
|
||||
&& StringUtils.isEmptyOrNull(gitProfile.getAuthorEmail())
|
||||
) {
|
||||
return Mono.error( new AppsmithException(AppsmithError.INVALID_PARAMETER, "Author Email"));
|
||||
} else if (StringUtils.isEmptyOrNull(defaultApplicationId)) {
|
||||
return Mono.error( new AppsmithException(AppsmithError.INVALID_PARAMETER, FieldName.APPLICATION_ID));
|
||||
}
|
||||
|
||||
if (StringUtils.equalsIgnoreCase(DEFAULT, defaultApplicationId)) {
|
||||
gitProfile.setUseGlobalProfile(Boolean.TRUE);
|
||||
if (DEFAULT.equals(defaultApplicationId)) {
|
||||
gitProfile.setUseGlobalProfile(null);
|
||||
} else if (!Boolean.TRUE.equals(gitProfile.getUseGlobalProfile())) {
|
||||
gitProfile.setUseGlobalProfile(Boolean.FALSE);
|
||||
}
|
||||
|
||||
return sessionUserService.getCurrentUser()
|
||||
.flatMap(user -> userService.findByEmail(user.getEmail()))
|
||||
.flatMap(user -> userDataService
|
||||
.getForUser(user.getId())
|
||||
.flatMap(user -> userDataService.getForUser(user.getId())
|
||||
.flatMap(userData -> {
|
||||
// GitProfiles will be null if the user has not created any git profile.
|
||||
GitProfile savedProfile = userData.getGitProfileByKey(defaultApplicationId);
|
||||
|
|
@ -179,9 +188,8 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
}
|
||||
return Mono.just(userData.getGitProfiles());
|
||||
})
|
||||
.filter(profiles -> !CollectionUtils.isNullOrEmpty(profiles))
|
||||
.switchIfEmpty(Mono.defer(() -> {
|
||||
// If profiles are empty use Appsmith's user details as git default profile
|
||||
// If profiles are empty use Appsmith's user profile as git default profile
|
||||
GitProfile profile = new GitProfile();
|
||||
String authorName = StringUtils.isEmptyOrNull(user.getName()) ? user.getUsername() : user.getName();
|
||||
|
||||
|
|
@ -194,19 +202,27 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
.map(UserData::getGitProfiles);
|
||||
})
|
||||
)
|
||||
.filter(profiles -> !CollectionUtils.isNullOrEmpty(profiles))
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Map<String, GitProfile>> updateOrCreateGitProfileForCurrentUser(GitProfile gitProfile) {
|
||||
gitProfile.setUseGlobalProfile(true);
|
||||
gitProfile.setUseGlobalProfile(null);
|
||||
return updateOrCreateGitProfileForCurrentUser(gitProfile, DEFAULT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<GitProfile> getGitProfileForUser() {
|
||||
// Get default git profile
|
||||
return getGitProfileForUser(DEFAULT);
|
||||
public Mono<GitProfile> getDefaultGitProfileOrCreateIfEmpty() {
|
||||
// Get default git profile if the default is empty then use Appsmith profile as a fallback value
|
||||
return getGitProfileForUser(DEFAULT)
|
||||
.flatMap(gitProfile -> {
|
||||
if (StringUtils.isEmptyOrNull(gitProfile.getAuthorName()) || StringUtils.isEmptyOrNull(gitProfile.getAuthorEmail())) {
|
||||
return updateGitProfileWithAppsmithProfile(DEFAULT);
|
||||
}
|
||||
gitProfile.setUseGlobalProfile(null);
|
||||
return Mono.just(gitProfile);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -216,11 +232,44 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
GitProfile gitProfile = userData.getGitProfileByKey(defaultApplicationId);
|
||||
if (gitProfile != null && gitProfile.getUseGlobalProfile() == null) {
|
||||
gitProfile.setUseGlobalProfile(true);
|
||||
} else if (gitProfile == null) {
|
||||
// If the profile is requested for repo specific using the applicationId
|
||||
GitProfile gitProfile1 = new GitProfile();
|
||||
gitProfile1.setAuthorName("");
|
||||
gitProfile1.setAuthorEmail("");
|
||||
gitProfile1.setUseGlobalProfile(true);
|
||||
return gitProfile1;
|
||||
}
|
||||
return gitProfile;
|
||||
});
|
||||
}
|
||||
|
||||
private Mono<GitProfile> updateGitProfileWithAppsmithProfile(String key) {
|
||||
return sessionUserService.getCurrentUser()
|
||||
.flatMap(user -> userService.findByEmail(user.getEmail()))
|
||||
.flatMap(currentUser -> {
|
||||
GitProfile gitProfile = new GitProfile();
|
||||
String authorName = StringUtils.isEmptyOrNull(currentUser.getName())
|
||||
? currentUser.getUsername()
|
||||
: currentUser.getName();
|
||||
gitProfile.setAuthorEmail(currentUser.getEmail());
|
||||
gitProfile.setAuthorName(authorName);
|
||||
gitProfile.setUseGlobalProfile(null);
|
||||
return userDataService.getForUser(currentUser)
|
||||
.flatMap(userData -> {
|
||||
UserData updates = new UserData();
|
||||
if (CollectionUtils.isNullOrEmpty(userData.getGitProfiles())) {
|
||||
updates.setGitProfiles(Map.of(key, gitProfile));
|
||||
} else {
|
||||
userData.getGitProfiles().put(key, gitProfile);
|
||||
updates.setGitProfiles(userData.getGitProfiles());
|
||||
}
|
||||
return userDataService.updateForUser(currentUser, updates)
|
||||
.thenReturn(gitProfile);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will make a commit to local repo
|
||||
* @param commitDTO information required for making a commit
|
||||
|
|
@ -322,7 +371,7 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
|
||||
GitProfile authorProfile = currentUserData.getGitProfileByKey(gitApplicationData.getDefaultApplicationId());
|
||||
|
||||
if (authorProfile == null || authorProfile.getUseGlobalProfile()) {
|
||||
if (authorProfile == null || Boolean.TRUE.equals(authorProfile.getUseGlobalProfile())) {
|
||||
// Use default author profile as the fallback value
|
||||
if (currentUserData.getGitProfileByKey(DEFAULT) != null) {
|
||||
authorProfile = currentUserData.getGitProfileByKey(DEFAULT);
|
||||
|
|
@ -426,9 +475,7 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
"Unable to find git author configuration for logged-in user. You can set up a git profile from the user profile section."))
|
||||
);
|
||||
|
||||
Mono<Map<String, GitProfile>> profileMono = Boolean.TRUE.equals(gitConnectDTO.getGitProfile().getUseGlobalProfile())
|
||||
? this.getGitProfileForUser().map(profile -> Map.of(DEFAULT, profile))
|
||||
: updateOrCreateGitProfileForCurrentUser(gitConnectDTO.getGitProfile(), defaultApplicationId);
|
||||
Mono<Map<String, GitProfile>> profileMono = updateOrCreateGitProfileForCurrentUser(gitConnectDTO.getGitProfile(), defaultApplicationId);
|
||||
|
||||
return profileMono
|
||||
.switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.INVALID_GIT_CONFIGURATION,
|
||||
|
|
@ -832,7 +879,7 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
return getApplicationById(defaultApplicationId)
|
||||
.flatMap(application -> {
|
||||
if (isInvalidDefaultApplicationGitMetadata(application.getGitApplicationMetadata())) {
|
||||
throw new AppsmithException(AppsmithError.INVALID_GIT_SSH_CONFIGURATION);
|
||||
return Mono.error(new AppsmithException(AppsmithError.INVALID_GIT_SSH_CONFIGURATION));
|
||||
}
|
||||
return applicationService.findByBranchNameAndDefaultApplicationId(
|
||||
branchName, defaultApplicationId, READ_APPLICATIONS
|
||||
|
|
@ -986,7 +1033,7 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
gitAuth.getPrivateKey(),
|
||||
gitAuth.getPublicKey())
|
||||
.onErrorResume(error -> {
|
||||
if (error.getMessage().contains("Nothing to fetch.")) {
|
||||
if (error.getMessage().contains("Nothing to fetch")) {
|
||||
MergeStatusDTO mergeStatus = new MergeStatusDTO();
|
||||
mergeStatus.setStatus("Nothing to fetch from remote. All changes are up to date.");
|
||||
mergeStatus.setMergeAble(true);
|
||||
|
|
@ -1463,21 +1510,4 @@ public class GitServiceCEImpl implements GitServiceCE {
|
|||
);
|
||||
}
|
||||
|
||||
private Mono<Map<String, GitProfile>> fetchGitProfile(UserData userData, String key) {
|
||||
if (CollectionUtils.isNullOrEmpty(userData.getGitProfiles())) {
|
||||
return sessionUserService.getCurrentUser()
|
||||
.map(currentUser -> {
|
||||
String authorName = StringUtils.isEmptyOrNull(currentUser.getName())
|
||||
? currentUser.getUsername()
|
||||
: currentUser.getName();
|
||||
GitProfile gitProfile = new GitProfile();
|
||||
|
||||
gitProfile.setAuthorEmail(currentUser.getEmail());
|
||||
gitProfile.setAuthorName(authorName);
|
||||
return Map.of();
|
||||
});
|
||||
}
|
||||
return Mono.just(userData.getGitProfiles());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import com.appsmith.server.domains.Organization;
|
|||
import com.appsmith.server.domains.User;
|
||||
import com.appsmith.server.domains.UserData;
|
||||
import com.appsmith.server.dtos.GitConnectDTO;
|
||||
import com.appsmith.server.dtos.GitMergeDTO;
|
||||
import com.appsmith.server.dtos.GitPullDTO;
|
||||
import com.appsmith.server.dtos.PageDTO;
|
||||
import com.appsmith.server.exceptions.AppsmithError;
|
||||
|
|
@ -44,7 +43,6 @@ import java.nio.file.Paths;
|
|||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
|
|
@ -106,77 +104,6 @@ public class GitServiceTest {
|
|||
return gitConnectDTO;
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void saveConfig_gitConfigValues_SaveToUserObject() {
|
||||
Mockito.when(userService.findByEmail(Mockito.anyString())).thenReturn(Mono.just(new User()));
|
||||
GitProfile gitGlobalConfigDTO = getConfigRequest("test@appsmith.com", "Test 1");
|
||||
Mono<Map<String, GitProfile>> gitProfilesMono = gitDataService.updateOrCreateGitProfileForCurrentUser(gitGlobalConfigDTO);
|
||||
|
||||
StepVerifier
|
||||
.create(gitProfilesMono)
|
||||
.assertNext(gitProfileMap -> {
|
||||
GitProfile defaultProfile = gitProfileMap.get(DEFAULT_GIT_PROFILE);
|
||||
assertThat(defaultProfile.getAuthorName()).isEqualTo(gitGlobalConfigDTO.getAuthorName());
|
||||
assertThat(defaultProfile.getAuthorEmail()).isEqualTo(gitGlobalConfigDTO.getAuthorEmail());
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void saveConfig_AuthorEmailNull_ThrowInvalidParameterError() {
|
||||
Mockito.when(userService.findByEmail(Mockito.anyString())).thenReturn(Mono.just(new User()));
|
||||
GitProfile gitGlobalConfigDTO = getConfigRequest(null, "Test 1");
|
||||
|
||||
Mono<Map<String, GitProfile>> userDataMono = gitDataService.updateOrCreateGitProfileForCurrentUser(gitGlobalConfigDTO);
|
||||
StepVerifier
|
||||
.create(userDataMono)
|
||||
.expectErrorMatches(throwable -> throwable instanceof AppsmithException
|
||||
&& throwable.getMessage().contains(AppsmithError.INVALID_PARAMETER.getMessage("Author Email")))
|
||||
.verify();
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void saveConfig_AuthorNameEmptyString_ThrowInvalidParameterError() {
|
||||
Mockito.when(userService.findByEmail(Mockito.anyString())).thenReturn(Mono.just(new User()));
|
||||
GitProfile gitGlobalConfigDTO = getConfigRequest("test@appsmith.com", null);
|
||||
|
||||
Mono<Map<String, GitProfile>> userDataMono = gitDataService.updateOrCreateGitProfileForCurrentUser(gitGlobalConfigDTO);
|
||||
StepVerifier
|
||||
.create(userDataMono)
|
||||
.expectErrorMatches(throwable -> throwable instanceof AppsmithException
|
||||
&& throwable.getMessage().contains(AppsmithError.INVALID_PARAMETER.getMessage("Author Name")))
|
||||
.verify();
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void getConfig_ValueExistsInDB_Success() {
|
||||
UserData userData = new UserData();
|
||||
GitProfile gitProfile1 = new GitProfile();
|
||||
gitProfile1.setAuthorEmail("test@test.com");
|
||||
gitProfile1.setAuthorName("test");
|
||||
userData.setGitProfiles(userData.setGitProfileByKey(DEFAULT_GIT_PROFILE, gitProfile1));
|
||||
User user = new User();
|
||||
user.setId("userId");
|
||||
ApplicationJson applicationJson = new ApplicationJson();
|
||||
applicationJson.setExportedApplication(new Application());
|
||||
|
||||
Mockito.when(userService.findByEmail(Mockito.anyString())).thenReturn(Mono.just(user));
|
||||
Mockito.when(userDataService.getForCurrentUser()).thenReturn(Mono.just(userData));
|
||||
Mockito.when(userDataService.getForUser(Mockito.anyString())).thenReturn(Mono.just(userData));
|
||||
Mockito.when(userDataService.updateForUser(Mockito.any(User.class), Mockito.any(UserData.class))).thenReturn(Mono.just(userData));
|
||||
Mono<GitProfile> gitConfigMono = gitDataService.getGitProfileForUser();
|
||||
|
||||
StepVerifier
|
||||
.create(gitConfigMono)
|
||||
.assertNext(configData -> {
|
||||
assertThat(configData.getAuthorName()).isEqualTo(gitProfile1.getAuthorName());
|
||||
assertThat(configData.getAuthorEmail()).isEqualTo(gitProfile1.getAuthorEmail());
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void connectApplicationToGit_EmptyRemoteUrl_ThrowInvalidParameterException() {
|
||||
|
|
@ -1069,6 +996,13 @@ public class GitServiceTest {
|
|||
.thenReturn(Mono.just(Paths.get("")));
|
||||
Mockito.when(gitFileUtils.reconstructApplicationFromGitRepo(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
|
||||
.thenReturn(Mono.justOrEmpty(new ApplicationJson()));
|
||||
Mockito.when(gitExecutor.getStatus(Mockito.any(), Mockito.any()))
|
||||
.thenReturn(Mono.just(new GitStatusDTO()));
|
||||
Mockito.when(gitExecutor.fetchRemote(Mockito.any(Path.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyBoolean()))
|
||||
.thenReturn(Mono.just("fetchResult"));
|
||||
Mockito.when(gitExecutor.pullApplication(
|
||||
Mockito.any(Path.class),Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
|
||||
.thenReturn(Mono.just(mergeStatusDTO));
|
||||
|
||||
Mono<GitPullDTO> applicationMono = gitDataService.pullApplication(application.getId(), application.getGitApplicationMetadata().getBranchName());
|
||||
|
||||
|
|
@ -1076,28 +1010,12 @@ public class GitServiceTest {
|
|||
.create(applicationMono)
|
||||
.assertNext(gitPullDTO -> {
|
||||
assertThat(gitPullDTO.getMergeStatus().getStatus()).isEqualTo("Nothing to fetch from remote. All changes are upto date.");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void pullChanges_HydrateApplicationToFileSystem_ShowError() throws IOException, GitAPIException {
|
||||
Application application = createApplicationConnectedToGit("NoChangesInRemotePullException");
|
||||
|
||||
Mockito.when(gitFileUtils.saveApplicationToLocalRepo(Mockito.any(Path.class), Mockito.any(ApplicationJson.class), Mockito.anyString()))
|
||||
.thenReturn(Mono.just(Paths.get("")));
|
||||
Mockito.when(gitFileUtils.reconstructApplicationFromGitRepo(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString()))
|
||||
.thenReturn(Mono.justOrEmpty(new ApplicationJson()));
|
||||
|
||||
Mono<GitPullDTO> applicationMono = gitDataService.pullApplication(application.getId(), application.getGitApplicationMetadata().getBranchName());
|
||||
|
||||
StepVerifier
|
||||
.create(applicationMono)
|
||||
.assertNext(gitPullDTO -> {
|
||||
assertThat(gitPullDTO.getMergeStatus().getStatus()).isEqualTo("Nothing to fetch from remote. All changes are upto date.");
|
||||
});
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
// TODO TCs for merge and merge status needs to be re-written to address all the scenarios
|
||||
/*
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void isMergeBranch_ConflictingChanges_Success() throws IOException, GitAPIException {
|
||||
|
|
@ -1113,12 +1031,17 @@ public class GitServiceTest {
|
|||
.thenReturn(Mono.just(Paths.get("")));
|
||||
Mockito.when(gitExecutor.isMergeBranch(Mockito.any(Path.class), Mockito.anyString(), Mockito.anyString()))
|
||||
.thenReturn(Mono.just(mergeStatus));
|
||||
Mockito.when(gitExecutor.getStatus(Mockito.any(), Mockito.any()))
|
||||
.thenReturn(Mono.just(new GitStatusDTO()));
|
||||
Mockito.when(gitExecutor.fetchRemote(Mockito.any(Path.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyBoolean()))
|
||||
.thenReturn(Mono.just("fetchResult"));
|
||||
|
||||
Mono<MergeStatusDTO> applicationMono = gitDataService.isBranchMergeable(application.getId(), gitMergeDTO);
|
||||
|
||||
StepVerifier
|
||||
.create(applicationMono)
|
||||
.assertNext(s -> assertThat(s.isMergeAble()));
|
||||
.assertNext(s -> assertThat(s.isMergeAble()))
|
||||
.verifyComplete();
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1136,6 +1059,10 @@ public class GitServiceTest {
|
|||
.thenReturn(Mono.just(Paths.get("")));
|
||||
Mockito.when(gitExecutor.isMergeBranch(Mockito.any(Path.class), Mockito.anyString(), Mockito.anyString()))
|
||||
.thenReturn(Mono.just(mergeStatus));
|
||||
Mockito.when(gitExecutor.getStatus(Mockito.any(), Mockito.any()))
|
||||
.thenReturn(Mono.just(new GitStatusDTO()));
|
||||
Mockito.when(gitExecutor.fetchRemote(Mockito.any(Path.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyBoolean()))
|
||||
.thenReturn(Mono.just("fetchResult"));
|
||||
Mockito.when(importExportApplicationService.exportApplicationById(Mockito.anyString(), Mockito.any(SerialiseApplicationObjective.class)))
|
||||
.thenReturn(Mono.just(new ApplicationJson()));
|
||||
|
||||
|
|
@ -1143,9 +1070,12 @@ public class GitServiceTest {
|
|||
|
||||
StepVerifier
|
||||
.create(applicationMono)
|
||||
.assertNext(s -> assertThat(s.isMergeAble()));
|
||||
.assertNext(s -> assertThat(s.isMergeAble()))
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void checkoutRemoteBranch_NotPresentInLocal_NewChildApplicationCreated() throws GitAPIException, IOException {
|
||||
|
|
|
|||
|
|
@ -3,13 +3,16 @@ package com.appsmith.server.services;
|
|||
import com.appsmith.server.constants.CommentOnboardingState;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.domains.Asset;
|
||||
import com.appsmith.server.domains.GitProfile;
|
||||
import com.appsmith.server.domains.User;
|
||||
import com.appsmith.server.domains.UserData;
|
||||
import com.appsmith.server.exceptions.AppsmithError;
|
||||
import com.appsmith.server.exceptions.AppsmithException;
|
||||
import com.appsmith.server.repositories.ApplicationRepository;
|
||||
import com.appsmith.server.repositories.AssetRepository;
|
||||
import com.appsmith.server.repositories.UserDataRepository;
|
||||
import com.appsmith.server.solutions.UserChangedHandler;
|
||||
import org.assertj.core.api.AssertionsForClassTypes;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
|
@ -36,6 +39,7 @@ import reactor.util.function.Tuple2;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
|
@ -67,8 +71,13 @@ public class UserDataServiceTest {
|
|||
@Autowired
|
||||
private ApplicationRepository applicationRepository;
|
||||
|
||||
@Autowired
|
||||
private GitService gitService;
|
||||
|
||||
private Mono<User> userMono;
|
||||
|
||||
private static final String DEFAULT_GIT_PROFILE = "default";
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
userMono = userService.findByEmail("usertest@usertest.com");
|
||||
|
|
@ -350,4 +359,89 @@ public class UserDataServiceTest {
|
|||
assertThat(userData.getCommentOnboardingState()).isEqualTo(CommentOnboardingState.ONBOARDED);
|
||||
}).verifyComplete();
|
||||
}
|
||||
|
||||
// Git user profile tests
|
||||
private GitProfile createGitProfile(String commitEmail, String author) {
|
||||
GitProfile gitProfile = new GitProfile();
|
||||
gitProfile.setAuthorEmail(commitEmail);
|
||||
gitProfile.setAuthorName(author);
|
||||
return gitProfile;
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void saveConfig_AuthorEmailNull_ThrowInvalidParameterError() {
|
||||
GitProfile gitGlobalConfigDTO = createGitProfile(null, "Test 1");
|
||||
|
||||
Mono<Map<String, GitProfile>> userDataMono = gitService.updateOrCreateGitProfileForCurrentUser(gitGlobalConfigDTO);
|
||||
StepVerifier
|
||||
.create(userDataMono)
|
||||
.expectErrorMatches(throwable -> throwable instanceof AppsmithException
|
||||
&& throwable.getMessage().contains(AppsmithError.INVALID_PARAMETER.getMessage("Author Email")))
|
||||
.verify();
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void saveRepoLevelConfig_AuthorEmailNullAndName_SavesGitProfile() {
|
||||
GitProfile gitProfileDTO = createGitProfile(null, null);
|
||||
|
||||
Mono<Map<String, GitProfile>> userDataMono = gitService.updateOrCreateGitProfileForCurrentUser(gitProfileDTO, "defaultAppId");
|
||||
StepVerifier
|
||||
.create(userDataMono)
|
||||
.assertNext(gitProfileMap -> {
|
||||
AssertionsForClassTypes.assertThat(gitProfileMap).isNotNull();
|
||||
AssertionsForClassTypes.assertThat(gitProfileMap.get("defaultAppId").getAuthorEmail()).isNullOrEmpty();
|
||||
AssertionsForClassTypes.assertThat(gitProfileMap.get("defaultAppId").getAuthorName()).isNullOrEmpty();
|
||||
AssertionsForClassTypes.assertThat(gitProfileDTO.getUseGlobalProfile()).isFalse();
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void saveConfig_AuthorNameEmptyString_ThrowInvalidParameterError() {
|
||||
GitProfile gitGlobalConfigDTO = createGitProfile("test@appsmith.com", null);
|
||||
|
||||
Mono<Map<String, GitProfile>> userDataMono = gitService.updateOrCreateGitProfileForCurrentUser(gitGlobalConfigDTO);
|
||||
StepVerifier
|
||||
.create(userDataMono)
|
||||
.expectErrorMatches(throwable -> throwable instanceof AppsmithException
|
||||
&& throwable.getMessage().contains(AppsmithError.INVALID_PARAMETER.getMessage("Author Name")))
|
||||
.verify();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@WithUserDetails(value = "api_user")
|
||||
public void getAndUpdateDefaultGitProfile_fallbackValueFromUserProfileIfEmpty_updateWithProfile() {
|
||||
|
||||
Mono<GitProfile> gitConfigMono = gitService.getDefaultGitProfileOrCreateIfEmpty();
|
||||
|
||||
Mono<User> userData = userDataService.getForCurrentUser()
|
||||
.flatMap(userData1 -> userService.getById(userData1.getUserId()));
|
||||
|
||||
StepVerifier
|
||||
.create(gitConfigMono.zipWhen(gitProfile -> userData))
|
||||
.assertNext(tuple -> {
|
||||
GitProfile gitProfile = tuple.getT1();
|
||||
User user = tuple.getT2();
|
||||
assertThat(gitProfile.getAuthorName()).isEqualTo(user.getName());
|
||||
assertThat(gitProfile.getAuthorEmail()).isEqualTo(user.getEmail());
|
||||
})
|
||||
.verifyComplete();
|
||||
|
||||
GitProfile gitGlobalConfigDTO = createGitProfile("test@appsmith.com", "Test 1");
|
||||
Mono<Map<String, GitProfile>> gitProfilesMono = gitService.updateOrCreateGitProfileForCurrentUser(gitGlobalConfigDTO);
|
||||
|
||||
StepVerifier
|
||||
.create(gitProfilesMono)
|
||||
.assertNext(gitProfileMap -> {
|
||||
GitProfile defaultProfile = gitProfileMap.get(DEFAULT_GIT_PROFILE);
|
||||
AssertionsForClassTypes.assertThat(defaultProfile.getAuthorName()).isEqualTo(gitGlobalConfigDTO.getAuthorName());
|
||||
AssertionsForClassTypes.assertThat(defaultProfile.getAuthorEmail()).isEqualTo(gitGlobalConfigDTO.getAuthorEmail());
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user