chore: Moved git auth creation and updation to generified artifactservice (#38312)
This commit is contained in:
parent
f2733c67e9
commit
d9a3253e92
|
|
@ -3,7 +3,7 @@ package com.appsmith.server.applications.base;
|
|||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.domains.ApplicationMode;
|
||||
import com.appsmith.server.domains.GitAuth;
|
||||
import com.appsmith.server.domains.Artifact;
|
||||
import com.appsmith.server.dtos.ApplicationAccessDTO;
|
||||
import com.appsmith.server.dtos.GitAuthDTO;
|
||||
import com.appsmith.server.services.CrudService;
|
||||
|
|
@ -29,7 +29,7 @@ public interface ApplicationServiceCE extends CrudService<Application, String> {
|
|||
|
||||
Flux<Application> findByWorkspaceIdAndBaseApplicationsInRecentlyUsedOrder(String workspaceId);
|
||||
|
||||
Mono<Application> save(Application application);
|
||||
Mono<Application> save(Artifact application);
|
||||
|
||||
Mono<Application> updateApplicationWithPresets(String branchedApplicationId, Application application);
|
||||
|
||||
|
|
@ -53,8 +53,6 @@ public interface ApplicationServiceCE extends CrudService<Application, String> {
|
|||
|
||||
Mono<Application> setTransientFields(Application application);
|
||||
|
||||
Mono<GitAuth> createOrUpdateSshKeyPair(String branchedApplicationId, String keyType);
|
||||
|
||||
Mono<GitAuthDTO> getSshKey(String applicationId);
|
||||
|
||||
Mono<Application> findByBranchNameAndBaseApplicationId(
|
||||
|
|
|
|||
|
|
@ -1,15 +1,17 @@
|
|||
package com.appsmith.server.applications.base;
|
||||
|
||||
import com.appsmith.external.constants.AnalyticsEvents;
|
||||
import com.appsmith.external.models.ActionDTO;
|
||||
import com.appsmith.external.models.Policy;
|
||||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.appsmith.server.artifacts.base.artifactbased.ArtifactBasedServiceCE;
|
||||
import com.appsmith.server.artifacts.permissions.ArtifactPermission;
|
||||
import com.appsmith.server.constants.ApplicationConstants;
|
||||
import com.appsmith.server.constants.Assets;
|
||||
import com.appsmith.server.constants.FieldName;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.domains.ApplicationDetail;
|
||||
import com.appsmith.server.domains.ApplicationMode;
|
||||
import com.appsmith.server.domains.Artifact;
|
||||
import com.appsmith.server.domains.Asset;
|
||||
import com.appsmith.server.domains.GitArtifactMetadata;
|
||||
import com.appsmith.server.domains.GitAuth;
|
||||
|
|
@ -74,7 +76,7 @@ import static com.appsmith.server.helpers.ce.DomainSorter.sortDomainsBasedOnOrde
|
|||
@Slf4j
|
||||
@Service
|
||||
public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository, Application, String>
|
||||
implements ApplicationServiceCE {
|
||||
implements ApplicationServiceCE, ArtifactBasedServiceCE<Application> {
|
||||
|
||||
private final PolicySolution policySolution;
|
||||
private final PermissionGroupService permissionGroupService;
|
||||
|
|
@ -165,6 +167,7 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
* This method is used to fetch all the applications for a given workspaceId. It also sorts the applications based
|
||||
* on recently used order.
|
||||
* For git connected applications only default branched application is returned.
|
||||
*
|
||||
* @param workspaceId workspaceId for which applications are to be fetched
|
||||
* @return Flux of applications
|
||||
*/
|
||||
|
|
@ -212,7 +215,8 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
}
|
||||
|
||||
@Override
|
||||
public Mono<Application> save(Application application) {
|
||||
public Mono<Application> save(Artifact artifact) {
|
||||
Application application = (Application) artifact;
|
||||
if (!StringUtils.isEmpty(application.getName())) {
|
||||
application.setSlug(TextUtils.makeSlug(application.getName()));
|
||||
}
|
||||
|
|
@ -227,6 +231,11 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
return repository.save(application).flatMap(this::setTransientFields);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArtifactPermission getPermissionService() {
|
||||
return applicationPermission;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Application> create(Application object) {
|
||||
throw new UnsupportedOperationException(
|
||||
|
|
@ -649,84 +658,6 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate SSH private and public keys required to communicate with remote. Keys will be stored only in the
|
||||
* default/root application only and not the child branched application. This decision is taken because the combined
|
||||
* size of keys is close to 4kB
|
||||
*
|
||||
* @param branchedApplicationId application for which the SSH key needs to be generated
|
||||
* @return public key which will be used by user to copy to relevant platform
|
||||
*/
|
||||
@Override
|
||||
public Mono<GitAuth> createOrUpdateSshKeyPair(String branchedApplicationId, String keyType) {
|
||||
GitAuth gitAuth = GitDeployKeyGenerator.generateSSHKey(keyType);
|
||||
return repository
|
||||
.findById(branchedApplicationId, applicationPermission.getEditPermission())
|
||||
.switchIfEmpty(Mono.error(
|
||||
new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, "application", branchedApplicationId)))
|
||||
.flatMap(application -> {
|
||||
GitArtifactMetadata gitData = application.getGitApplicationMetadata();
|
||||
// Check if the current application is the root application
|
||||
|
||||
if (gitData != null
|
||||
&& !StringUtils.isEmpty(gitData.getDefaultArtifactId())
|
||||
&& branchedApplicationId.equals(gitData.getDefaultArtifactId())) {
|
||||
// This is the root application with update SSH key request
|
||||
gitAuth.setRegeneratedKey(true);
|
||||
gitData.setGitAuth(gitAuth);
|
||||
return save(application);
|
||||
} else if (gitData == null) {
|
||||
// This is a root application with generate SSH key request
|
||||
GitArtifactMetadata gitArtifactMetadata = new GitArtifactMetadata();
|
||||
gitArtifactMetadata.setDefaultApplicationId(branchedApplicationId);
|
||||
gitArtifactMetadata.setGitAuth(gitAuth);
|
||||
application.setGitApplicationMetadata(gitArtifactMetadata);
|
||||
return save(application);
|
||||
}
|
||||
// Children application with update SSH key request for root application
|
||||
// Fetch root application and then make updates. We are storing the git metadata only in root
|
||||
// application
|
||||
if (StringUtils.isEmpty(gitData.getDefaultArtifactId())) {
|
||||
throw new AppsmithException(
|
||||
AppsmithError.INVALID_GIT_CONFIGURATION,
|
||||
"Unable to find root application, please connect your application to remote repo to resolve this issue.");
|
||||
}
|
||||
gitAuth.setRegeneratedKey(true);
|
||||
|
||||
return repository
|
||||
.findById(gitData.getDefaultArtifactId(), applicationPermission.getEditPermission())
|
||||
.flatMap(baseApplication -> {
|
||||
GitArtifactMetadata gitArtifactMetadata = baseApplication.getGitApplicationMetadata();
|
||||
gitArtifactMetadata.setDefaultApplicationId(baseApplication.getId());
|
||||
gitArtifactMetadata.setGitAuth(gitAuth);
|
||||
baseApplication.setGitApplicationMetadata(gitArtifactMetadata);
|
||||
return save(baseApplication);
|
||||
});
|
||||
})
|
||||
.flatMap(application -> {
|
||||
// Send generate SSH key analytics event
|
||||
assert application.getId() != null;
|
||||
final Map<String, Object> eventData = Map.of(
|
||||
FieldName.APP_MODE, ApplicationMode.EDIT.toString(), FieldName.APPLICATION, application);
|
||||
final Map<String, Object> data = Map.of(
|
||||
FieldName.APPLICATION_ID,
|
||||
application.getId(),
|
||||
"organizationId",
|
||||
application.getWorkspaceId(),
|
||||
"isRegeneratedKey",
|
||||
gitAuth.isRegeneratedKey(),
|
||||
FieldName.EVENT_DATA,
|
||||
eventData);
|
||||
return analyticsService
|
||||
.sendObjectEvent(AnalyticsEvents.GENERATE_SSH_KEY, application, data)
|
||||
.onErrorResume(e -> {
|
||||
log.warn("Error sending ssh key generation data point", e);
|
||||
return Mono.just(application);
|
||||
});
|
||||
})
|
||||
.thenReturn(gitAuth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the SSH public key
|
||||
*
|
||||
|
|
@ -1025,6 +956,7 @@ public class ApplicationServiceCEImpl extends BaseService<ApplicationRepository,
|
|||
|
||||
/**
|
||||
* Gets branched application with the right permission set based on mode of application
|
||||
*
|
||||
* @param defaultApplicationId : default app id
|
||||
* @param branchName : branch name of the application
|
||||
* @param mode : is it edit mode or view mode
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package com.appsmith.server.applications.base;
|
||||
|
||||
import com.appsmith.server.artifacts.base.artifactbased.ArtifactBasedService;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.repositories.ApplicationRepository;
|
||||
import com.appsmith.server.repositories.NewActionRepository;
|
||||
import com.appsmith.server.services.AnalyticsService;
|
||||
|
|
@ -20,7 +22,8 @@ import org.springframework.stereotype.Service;
|
|||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ApplicationServiceImpl extends ApplicationServiceCECompatibleImpl implements ApplicationService {
|
||||
public class ApplicationServiceImpl extends ApplicationServiceCECompatibleImpl
|
||||
implements ApplicationService, ArtifactBasedService<Application> {
|
||||
|
||||
public ApplicationServiceImpl(
|
||||
Validator validator,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
package com.appsmith.server.artifacts.base;
|
||||
|
||||
public interface ArtifactService extends ArtifactServiceCE {}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.appsmith.server.artifacts.base;
|
||||
|
||||
import com.appsmith.server.artifacts.base.artifactbased.ArtifactBasedService;
|
||||
import com.appsmith.server.constants.ArtifactType;
|
||||
import com.appsmith.server.domains.Artifact;
|
||||
import com.appsmith.server.domains.GitAuth;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
public interface ArtifactServiceCE {
|
||||
|
||||
/**
|
||||
* This method returns the appropriate ArtifactBasedService based on the type of artifact.
|
||||
*/
|
||||
ArtifactBasedService<? extends Artifact> getArtifactBasedService(ArtifactType artifactType);
|
||||
|
||||
/**
|
||||
* Generate SSH private and public keys required to communicate with remote. Keys will be stored only in the
|
||||
* default/root application only and not the child branched application. This decision is taken because the combined
|
||||
* size of keys is close to 4kB
|
||||
*
|
||||
* @return public key which will be used by user to copy to relevant platform
|
||||
*/
|
||||
Mono<GitAuth> createOrUpdateSshKeyPair(ArtifactType artifactType, String branchedArtifactId, String keyType);
|
||||
}
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
package com.appsmith.server.artifacts.base;
|
||||
|
||||
import com.appsmith.external.constants.AnalyticsEvents;
|
||||
import com.appsmith.server.artifacts.base.artifactbased.ArtifactBasedService;
|
||||
import com.appsmith.server.artifacts.permissions.ArtifactPermission;
|
||||
import com.appsmith.server.constants.ArtifactType;
|
||||
import com.appsmith.server.constants.FieldName;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.domains.ApplicationMode;
|
||||
import com.appsmith.server.domains.Artifact;
|
||||
import com.appsmith.server.domains.GitArtifactMetadata;
|
||||
import com.appsmith.server.domains.GitAuth;
|
||||
import com.appsmith.server.exceptions.AppsmithError;
|
||||
import com.appsmith.server.exceptions.AppsmithException;
|
||||
import com.appsmith.server.helpers.GitDeployKeyGenerator;
|
||||
import com.appsmith.server.services.AnalyticsService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ArtifactServiceCEImpl implements ArtifactServiceCE {
|
||||
|
||||
protected final ArtifactBasedService<Application> applicationService;
|
||||
private final AnalyticsService analyticsService;
|
||||
|
||||
public ArtifactServiceCEImpl(
|
||||
ArtifactBasedService<Application> applicationService, AnalyticsService analyticsService) {
|
||||
this.applicationService = applicationService;
|
||||
this.analyticsService = analyticsService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArtifactBasedService<? extends Artifact> getArtifactBasedService(ArtifactType artifactType) {
|
||||
return applicationService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<GitAuth> createOrUpdateSshKeyPair(
|
||||
ArtifactType artifactType, String branchedArtifactId, String keyType) {
|
||||
GitAuth gitAuth = GitDeployKeyGenerator.generateSSHKey(keyType);
|
||||
ArtifactBasedService<? extends Artifact> artifactBasedService = getArtifactBasedService(artifactType);
|
||||
ArtifactPermission artifactPermission = artifactBasedService.getPermissionService();
|
||||
final String artifactTypeName = artifactType.name().toLowerCase();
|
||||
return artifactBasedService
|
||||
.findById(branchedArtifactId, artifactPermission.getEditPermission())
|
||||
.switchIfEmpty(Mono.error(
|
||||
new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, artifactTypeName, branchedArtifactId)))
|
||||
.flatMap(artifact -> {
|
||||
GitArtifactMetadata gitData = artifact.getGitArtifactMetadata();
|
||||
// Check if the current artifact is the root artifact
|
||||
|
||||
if (gitData != null
|
||||
&& StringUtils.hasLength(gitData.getDefaultArtifactId())
|
||||
&& branchedArtifactId.equals(gitData.getDefaultArtifactId())) {
|
||||
// This is the root application with update SSH key request
|
||||
gitAuth.setRegeneratedKey(true);
|
||||
gitData.setGitAuth(gitAuth);
|
||||
return artifactBasedService.save(artifact);
|
||||
} else if (gitData == null) {
|
||||
// This is a root application with generate SSH key request
|
||||
GitArtifactMetadata gitArtifactMetadata = new GitArtifactMetadata();
|
||||
gitArtifactMetadata.setDefaultApplicationId(branchedArtifactId);
|
||||
gitArtifactMetadata.setGitAuth(gitAuth);
|
||||
artifact.setGitArtifactMetadata(gitArtifactMetadata);
|
||||
return artifactBasedService.save(artifact);
|
||||
}
|
||||
// Children application with update SSH key request for root application
|
||||
// Fetch root application and then make updates. We are storing the git metadata only in root
|
||||
// application
|
||||
if (!StringUtils.hasLength(gitData.getDefaultArtifactId())) {
|
||||
return Mono.error(new AppsmithException(
|
||||
AppsmithError.INVALID_GIT_CONFIGURATION,
|
||||
"Unable to find root " + artifactTypeName + ", please connect your " + artifactTypeName
|
||||
+ " to remote repo to resolve this issue."));
|
||||
}
|
||||
gitAuth.setRegeneratedKey(true);
|
||||
|
||||
return artifactBasedService
|
||||
.findById(gitData.getDefaultArtifactId(), artifactPermission.getEditPermission())
|
||||
.flatMap(baseApplication -> {
|
||||
GitArtifactMetadata gitArtifactMetadata = baseApplication.getGitArtifactMetadata();
|
||||
gitArtifactMetadata.setDefaultApplicationId(baseApplication.getId());
|
||||
gitArtifactMetadata.setGitAuth(gitAuth);
|
||||
baseApplication.setGitArtifactMetadata(gitArtifactMetadata);
|
||||
return artifactBasedService.save(baseApplication);
|
||||
});
|
||||
})
|
||||
.flatMap(artifact -> {
|
||||
// Send generate SSH key analytics event
|
||||
assert artifact.getId() != null;
|
||||
final Map<String, Object> eventData = Map.of(
|
||||
FieldName.APP_MODE, ApplicationMode.EDIT.toString(), FieldName.APPLICATION, artifact);
|
||||
final Map<String, Object> data = Map.of(
|
||||
FieldName.APPLICATION_ID,
|
||||
artifact.getId(),
|
||||
"organizationId",
|
||||
artifact.getWorkspaceId(),
|
||||
"isRegeneratedKey",
|
||||
gitAuth.isRegeneratedKey(),
|
||||
FieldName.EVENT_DATA,
|
||||
eventData);
|
||||
return analyticsService
|
||||
.sendObjectEvent(AnalyticsEvents.GENERATE_SSH_KEY, artifact, data)
|
||||
.onErrorResume(e -> {
|
||||
log.warn("Error sending ssh key generation data point", e);
|
||||
return Mono.just(artifact);
|
||||
});
|
||||
})
|
||||
.thenReturn(gitAuth);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package com.appsmith.server.artifacts.base;
|
||||
|
||||
import com.appsmith.server.artifacts.base.artifactbased.ArtifactBasedService;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.services.AnalyticsService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ArtifactServiceImpl extends ArtifactServiceCEImpl implements ArtifactService {
|
||||
|
||||
public ArtifactServiceImpl(
|
||||
ArtifactBasedService<Application> applicationService, AnalyticsService analyticsService) {
|
||||
super(applicationService, analyticsService);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.appsmith.server.artifacts.base.artifactbased;
|
||||
|
||||
import com.appsmith.server.domains.Artifact;
|
||||
|
||||
public interface ArtifactBasedService<T extends Artifact> extends ArtifactBasedServiceCE<T> {}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package com.appsmith.server.artifacts.base.artifactbased;
|
||||
|
||||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.appsmith.server.artifacts.permissions.ArtifactPermission;
|
||||
import com.appsmith.server.domains.Artifact;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
public interface ArtifactBasedServiceCE<T extends Artifact> {
|
||||
|
||||
Mono<T> findById(String id, AclPermission aclPermission);
|
||||
|
||||
Mono<T> save(Artifact artifact);
|
||||
|
||||
ArtifactPermission getPermissionService();
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package com.appsmith.server.artifacts.permissions;
|
||||
|
||||
public interface ArtifactPermission extends ArtifactPermissionCE {}
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
package com.appsmith.server.solutions.ce;
|
||||
package com.appsmith.server.artifacts.permissions;
|
||||
|
||||
import com.appsmith.server.acl.AclPermission;
|
||||
|
||||
public interface ArtifactPermissionCE {
|
||||
|
||||
AclPermission getEditPermission();
|
||||
|
||||
AclPermission getDeletePermission();
|
||||
|
||||
AclPermission getGitConnectPermission();
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package com.appsmith.server.controllers;
|
||||
|
||||
import com.appsmith.server.applications.base.ApplicationService;
|
||||
import com.appsmith.server.artifacts.base.ArtifactService;
|
||||
import com.appsmith.server.constants.Url;
|
||||
import com.appsmith.server.controllers.ce.ApplicationControllerCE;
|
||||
import com.appsmith.server.exports.internal.ExportService;
|
||||
|
|
@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
public class ApplicationController extends ApplicationControllerCE {
|
||||
|
||||
public ApplicationController(
|
||||
ArtifactService artifactService,
|
||||
ApplicationService service,
|
||||
ApplicationPageService applicationPageService,
|
||||
UserReleaseNotes userReleaseNotes,
|
||||
|
|
@ -33,6 +35,7 @@ public class ApplicationController extends ApplicationControllerCE {
|
|||
ImportService importService,
|
||||
ExportService exportService) {
|
||||
super(
|
||||
artifactService,
|
||||
service,
|
||||
applicationPageService,
|
||||
userReleaseNotes,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package com.appsmith.server.controllers.ce;
|
|||
import com.appsmith.external.models.Datasource;
|
||||
import com.appsmith.external.views.Views;
|
||||
import com.appsmith.server.applications.base.ApplicationService;
|
||||
import com.appsmith.server.artifacts.base.ArtifactService;
|
||||
import com.appsmith.server.constants.ArtifactType;
|
||||
import com.appsmith.server.constants.FieldName;
|
||||
import com.appsmith.server.constants.Url;
|
||||
import com.appsmith.server.domains.Application;
|
||||
|
|
@ -62,6 +64,7 @@ import static com.appsmith.server.constants.ArtifactType.APPLICATION;
|
|||
@RequiredArgsConstructor
|
||||
public class ApplicationControllerCE {
|
||||
|
||||
protected final ArtifactService artifactService;
|
||||
protected final ApplicationService service;
|
||||
private final ApplicationPageService applicationPageService;
|
||||
private final UserReleaseNotes userReleaseNotes;
|
||||
|
|
@ -248,7 +251,8 @@ public class ApplicationControllerCE {
|
|||
@PostMapping("/ssh-keypair/{branchedApplicationId}")
|
||||
public Mono<ResponseDTO<GitAuth>> generateSSHKeyPair(
|
||||
@PathVariable String branchedApplicationId, @RequestParam(required = false) String keyType) {
|
||||
return service.createOrUpdateSshKeyPair(branchedApplicationId, keyType)
|
||||
return artifactService
|
||||
.createOrUpdateSshKeyPair(ArtifactType.APPLICATION, branchedApplicationId, keyType)
|
||||
.map(created -> new ResponseDTO<>(HttpStatus.CREATED.value(), created, null));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
package com.appsmith.server.helpers;
|
||||
|
||||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.appsmith.server.artifacts.permissions.ArtifactPermission;
|
||||
import com.appsmith.server.helpers.ce.ImportArtifactPermissionProviderCE;
|
||||
import com.appsmith.server.solutions.ActionPermission;
|
||||
import com.appsmith.server.solutions.ArtifactPermission;
|
||||
import com.appsmith.server.solutions.ContextPermission;
|
||||
import com.appsmith.server.solutions.DatasourcePermission;
|
||||
import com.appsmith.server.solutions.WorkspacePermission;
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@ package com.appsmith.server.helpers.ce;
|
|||
import com.appsmith.external.models.BaseDomain;
|
||||
import com.appsmith.external.models.Datasource;
|
||||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.appsmith.server.artifacts.permissions.ArtifactPermission;
|
||||
import com.appsmith.server.domains.Application;
|
||||
import com.appsmith.server.domains.NewAction;
|
||||
import com.appsmith.server.domains.NewPage;
|
||||
import com.appsmith.server.domains.Workspace;
|
||||
import com.appsmith.server.solutions.ActionPermission;
|
||||
import com.appsmith.server.solutions.ApplicationPermission;
|
||||
import com.appsmith.server.solutions.ArtifactPermission;
|
||||
import com.appsmith.server.solutions.ContextPermission;
|
||||
import com.appsmith.server.solutions.DatasourcePermission;
|
||||
import com.appsmith.server.solutions.WorkspacePermission;
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
package com.appsmith.server.solutions;
|
||||
|
||||
import com.appsmith.server.solutions.ce.ArtifactPermissionCE;
|
||||
|
||||
public interface ArtifactPermission extends ArtifactPermissionCE {}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
package com.appsmith.server.solutions.ce;
|
||||
|
||||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.appsmith.server.solutions.ArtifactPermission;
|
||||
import com.appsmith.server.artifacts.permissions.ArtifactPermission;
|
||||
|
||||
public interface ApplicationPermissionCE extends ArtifactPermission {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,27 +1,13 @@
|
|||
package com.appsmith.server.controllers;
|
||||
|
||||
import com.appsmith.server.applications.base.ApplicationService;
|
||||
import com.appsmith.server.configurations.ProjectProperties;
|
||||
import com.appsmith.server.configurations.RedisTestContainerConfig;
|
||||
import com.appsmith.server.configurations.SecurityTestConfig;
|
||||
import com.appsmith.server.constants.Url;
|
||||
import com.appsmith.server.dtos.ApplicationImportDTO;
|
||||
import com.appsmith.server.dtos.ArtifactImportDTO;
|
||||
import com.appsmith.server.exceptions.AppsmithErrorCode;
|
||||
import com.appsmith.server.exports.internal.ExportService;
|
||||
import com.appsmith.server.exports.internal.partial.PartialExportService;
|
||||
import com.appsmith.server.fork.internal.ApplicationForkingService;
|
||||
import com.appsmith.server.helpers.CommonGitFileUtils;
|
||||
import com.appsmith.server.helpers.RedisUtils;
|
||||
import com.appsmith.server.imports.internal.ImportService;
|
||||
import com.appsmith.server.imports.internal.partial.PartialImportService;
|
||||
import com.appsmith.server.services.AnalyticsService;
|
||||
import com.appsmith.server.services.ApplicationPageService;
|
||||
import com.appsmith.server.services.ApplicationSnapshotService;
|
||||
import com.appsmith.server.services.SessionUserService;
|
||||
import com.appsmith.server.services.UserDataService;
|
||||
import com.appsmith.server.solutions.UserReleaseNotes;
|
||||
import com.appsmith.server.themes.base.ThemeService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
|
@ -49,51 +35,10 @@ import static org.mockito.ArgumentMatchers.any;
|
|||
@EnableAutoConfiguration(exclude = ReactiveMultipartAutoConfiguration.class)
|
||||
@Import({SecurityTestConfig.class, RedisUtils.class, RedisTestContainerConfig.class})
|
||||
public class ApplicationControllerTest {
|
||||
@MockBean
|
||||
ApplicationService applicationService;
|
||||
|
||||
@MockBean
|
||||
ApplicationPageService applicationPageService;
|
||||
|
||||
@MockBean
|
||||
UserReleaseNotes applicationFetcher;
|
||||
|
||||
@MockBean
|
||||
ApplicationForkingService applicationForkingService;
|
||||
|
||||
@MockBean
|
||||
ImportService importService;
|
||||
|
||||
@MockBean
|
||||
ExportService exportService;
|
||||
|
||||
@MockBean
|
||||
ApplicationSnapshotService applicationSnapshotService;
|
||||
|
||||
@MockBean
|
||||
ThemeService themeService;
|
||||
|
||||
@MockBean
|
||||
UserDataService userDataService;
|
||||
|
||||
@MockBean
|
||||
AnalyticsService analyticsService;
|
||||
|
||||
@MockBean
|
||||
CommonGitFileUtils commonGitFileUtils;
|
||||
|
||||
@MockBean
|
||||
SessionUserService sessionUserService;
|
||||
|
||||
@MockBean
|
||||
PartialExportService partialExportService;
|
||||
|
||||
@MockBean
|
||||
PartialImportService partialImportService;
|
||||
|
||||
@MockBean
|
||||
ProjectProperties projectProperties;
|
||||
|
||||
@Autowired
|
||||
private WebTestClient webTestClient;
|
||||
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ public class AutoCommitServiceTest {
|
|||
@MockBean
|
||||
DSLMigrationUtils dslMigrationUtils;
|
||||
|
||||
@MockBean
|
||||
@SpyBean
|
||||
ApplicationService applicationService;
|
||||
|
||||
@MockBean
|
||||
|
|
@ -201,12 +201,13 @@ public class AutoCommitServiceTest {
|
|||
baseRepoSuffix = Paths.get(WORKSPACE_ID, DEFAULT_APP_ID, REPO_NAME);
|
||||
|
||||
// used for fetching application on autocommit service and gitAutoCommitHelper.autocommit
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(testApplication));
|
||||
Mockito.doReturn(Mono.just(testApplication))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
|
||||
Mockito.when(applicationService.findById(anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(testApplication));
|
||||
Mockito.doReturn(Mono.just(testApplication))
|
||||
.when(applicationService)
|
||||
.findById(anyString(), any(AclPermission.class));
|
||||
|
||||
// create page-dto
|
||||
PageDTO pageDTO = createPageDTO();
|
||||
|
|
@ -224,8 +225,9 @@ public class AutoCommitServiceTest {
|
|||
.when(gitExecutor)
|
||||
.pushApplication(baseRepoSuffix, REPO_URL, PUBLIC_KEY, PRIVATE_KEY, BRANCH_NAME);
|
||||
|
||||
Mockito.when(applicationService.findById(anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(testApplication));
|
||||
Mockito.doReturn(Mono.just(testApplication))
|
||||
.when(applicationService)
|
||||
.findById(anyString(), any(AclPermission.class));
|
||||
|
||||
Mockito.when(gitPrivateRepoHelper.isBranchProtected(any(), anyString())).thenReturn(Mono.just(FALSE));
|
||||
|
||||
|
|
@ -480,12 +482,13 @@ public class AutoCommitServiceTest {
|
|||
public void testAutoCommit_whenNoGitMetadata_returnsNonGitApp() {
|
||||
testApplication.setGitApplicationMetadata(null);
|
||||
// used for fetching application on autocommit service and gitAutoCommitHelper.autocommit
|
||||
Mockito.when(applicationService.findById(anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(testApplication));
|
||||
Mockito.doReturn(Mono.just(testApplication))
|
||||
.when(applicationService)
|
||||
.findById(anyString(), any(AclPermission.class));
|
||||
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(testApplication));
|
||||
Mockito.doReturn(Mono.just(testApplication))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
|
||||
// this would not trigger autocommit
|
||||
Mono<AutoCommitResponseDTO> autoCommitResponseDTOMono =
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public class GitAutoCommitHelperImplTest {
|
|||
@MockBean
|
||||
AutoCommitEventHandler autoCommitEventHandler;
|
||||
|
||||
@MockBean
|
||||
@SpyBean
|
||||
ApplicationService applicationService;
|
||||
|
||||
@MockBean
|
||||
|
|
@ -81,13 +81,14 @@ public class GitAutoCommitHelperImplTest {
|
|||
application.setId(defaultApplicationId);
|
||||
application.setGitApplicationMetadata(new GitArtifactMetadata());
|
||||
|
||||
Mockito.when(applicationService.findById(defaultApplicationId, applicationPermission.getEditPermission()))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(defaultApplicationId, applicationPermission.getEditPermission());
|
||||
Mockito.when(gitPrivateRepoHelper.isBranchProtected(any(GitArtifactMetadata.class), eq(branchName)))
|
||||
.thenReturn(Mono.just(Boolean.TRUE));
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
|
||||
StepVerifier.create(gitAutoCommitHelper.autoCommitClientMigration(defaultApplicationId, branchName))
|
||||
.assertNext(aBoolean -> {
|
||||
|
|
@ -105,11 +106,12 @@ public class GitAutoCommitHelperImplTest {
|
|||
metadata.getAutoCommitConfig().setEnabled(Boolean.FALSE);
|
||||
application.setGitApplicationMetadata(metadata);
|
||||
|
||||
Mockito.when(applicationService.findById(defaultApplicationId, applicationPermission.getEditPermission()))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(defaultApplicationId, applicationPermission.getEditPermission());
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
Mockito.when(gitPrivateRepoHelper.isBranchProtected(any(GitArtifactMetadata.class), eq(branchName)))
|
||||
.thenReturn(Mono.just(Boolean.FALSE));
|
||||
|
||||
|
|
@ -126,13 +128,14 @@ public class GitAutoCommitHelperImplTest {
|
|||
application.setId(defaultApplicationId);
|
||||
application.setGitApplicationMetadata(new GitArtifactMetadata());
|
||||
|
||||
Mockito.when(applicationService.findById(defaultApplicationId, applicationPermission.getEditPermission()))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(defaultApplicationId, applicationPermission.getEditPermission());
|
||||
Mockito.when(gitPrivateRepoHelper.isBranchProtected(any(GitArtifactMetadata.class), eq(branchName)))
|
||||
.thenReturn(Mono.just(Boolean.FALSE));
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
|
||||
Mono<Boolean> autoCommitMono = redisUtils
|
||||
.startAutoCommit(defaultApplicationId, branchName)
|
||||
|
|
@ -158,11 +161,12 @@ public class GitAutoCommitHelperImplTest {
|
|||
metaData.setGitAuth(gitAuth);
|
||||
application.setGitApplicationMetadata(metaData);
|
||||
|
||||
Mockito.when(applicationService.findById(defaultApplicationId, applicationPermission.getEditPermission()))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(defaultApplicationId, applicationPermission.getEditPermission());
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
|
||||
Mockito.when(commonGitService.fetchRemoteChanges(any(Application.class), any(Application.class), anyBoolean()))
|
||||
.thenReturn(Mono.just(branchTrackingStatus));
|
||||
|
|
@ -256,11 +260,12 @@ public class GitAutoCommitHelperImplTest {
|
|||
metadata.getAutoCommitConfig().setEnabled(Boolean.TRUE);
|
||||
application.setGitApplicationMetadata(metadata);
|
||||
|
||||
Mockito.when(applicationService.findById(defaultApplicationId, applicationPermission.getEditPermission()))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(defaultApplicationId, applicationPermission.getEditPermission());
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
Mockito.when(commonGitService.fetchRemoteChanges(any(Application.class), any(Application.class), anyBoolean()))
|
||||
.thenReturn(Mono.just(branchTrackingStatus));
|
||||
|
||||
|
|
@ -291,12 +296,13 @@ public class GitAutoCommitHelperImplTest {
|
|||
|
||||
application.setGitApplicationMetadata(metaData);
|
||||
|
||||
Mockito.when(applicationService.findById(anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(anyString(), any(AclPermission.class));
|
||||
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
|
||||
Mockito.when(commonGitService.fetchRemoteChanges(any(Application.class), any(Application.class), anyBoolean()))
|
||||
.thenReturn(Mono.just(branchTrackingStatus));
|
||||
|
|
@ -335,12 +341,13 @@ public class GitAutoCommitHelperImplTest {
|
|||
metaData.setGitAuth(gitAuth);
|
||||
application.setGitApplicationMetadata(metaData);
|
||||
|
||||
Mockito.when(applicationService.findById(anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(anyString(), any(AclPermission.class));
|
||||
|
||||
Mockito.when(applicationService.findByBranchNameAndBaseApplicationId(
|
||||
anyString(), anyString(), any(AclPermission.class)))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findByBranchNameAndBaseApplicationId(anyString(), anyString(), any(AclPermission.class));
|
||||
|
||||
StepVerifier.create(gitAutoCommitHelper.autoCommitServerMigration(defaultApplicationId, branchName))
|
||||
.assertNext(isAutoCommitPublished -> {
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ class RefactoringServiceCEImplTest {
|
|||
@MockBean
|
||||
private UpdateLayoutService updateLayoutService;
|
||||
|
||||
@MockBean
|
||||
@SpyBean
|
||||
private ApplicationService applicationService;
|
||||
|
||||
@MockBean
|
||||
|
|
@ -161,7 +161,7 @@ class RefactoringServiceCEImplTest {
|
|||
Application application = new Application();
|
||||
application.setId("testAppId");
|
||||
application.setEvaluationVersion(EVALUATION_VERSION);
|
||||
Mockito.when(applicationService.findById(Mockito.anyString())).thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application)).when(applicationService).findById(Mockito.anyString());
|
||||
|
||||
Mockito.when(newActionService.findByPageIdAndViewMode(Mockito.anyString(), Mockito.anyBoolean(), Mockito.any()))
|
||||
.thenReturn(Flux.empty());
|
||||
|
|
@ -287,7 +287,7 @@ class RefactoringServiceCEImplTest {
|
|||
Application application = new Application();
|
||||
application.setId("testAppId");
|
||||
application.setEvaluationVersion(EVALUATION_VERSION);
|
||||
Mockito.when(applicationService.findById(Mockito.anyString())).thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application)).when(applicationService).findById(Mockito.anyString());
|
||||
|
||||
NewAction newAction = new NewAction();
|
||||
ActionDTO actionDTO = new ActionDTO();
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ import com.appsmith.external.plugins.PluginExecutor;
|
|||
import com.appsmith.server.acl.AclPermission;
|
||||
import com.appsmith.server.actioncollections.base.ActionCollectionService;
|
||||
import com.appsmith.server.applications.base.ApplicationService;
|
||||
import com.appsmith.server.artifacts.base.ArtifactService;
|
||||
import com.appsmith.server.constants.ArtifactType;
|
||||
import com.appsmith.server.constants.FieldName;
|
||||
import com.appsmith.server.datasources.base.DatasourceService;
|
||||
import com.appsmith.server.domains.ActionCollection;
|
||||
|
|
@ -176,6 +178,9 @@ public class ApplicationServiceCETest {
|
|||
|
||||
static Application gitConnectedApp = new Application();
|
||||
|
||||
@Autowired
|
||||
ArtifactService artifactService;
|
||||
|
||||
@Autowired
|
||||
ApplicationService applicationService;
|
||||
|
||||
|
|
@ -3514,8 +3519,8 @@ public class ApplicationServiceCETest {
|
|||
|
||||
Mono<Application> applicationMono = applicationPageService
|
||||
.createApplication(unsavedApplication)
|
||||
.flatMap(savedApplication -> applicationService
|
||||
.createOrUpdateSshKeyPair(savedApplication.getId(), null)
|
||||
.flatMap(savedApplication -> artifactService
|
||||
.createOrUpdateSshKeyPair(ArtifactType.APPLICATION, savedApplication.getId(), null)
|
||||
.thenReturn(savedApplication.getId()))
|
||||
.flatMap(testApplicationId -> applicationRepository.findById(testApplicationId, MANAGE_APPLICATIONS));
|
||||
|
||||
|
|
@ -3544,8 +3549,8 @@ public class ApplicationServiceCETest {
|
|||
.createApplication(unsavedMainApp, workspaceId)
|
||||
.block();
|
||||
|
||||
Mono<Tuple2<Application, Application>> tuple2Mono = applicationService
|
||||
.createOrUpdateSshKeyPair(savedApplication.getId(), null)
|
||||
Mono<Tuple2<Application, Application>> tuple2Mono = artifactService
|
||||
.createOrUpdateSshKeyPair(ArtifactType.APPLICATION, savedApplication.getId(), null)
|
||||
.thenReturn(savedApplication)
|
||||
.flatMap(savedMainApp -> {
|
||||
Application unsavedChildApp = new Application();
|
||||
|
|
@ -3555,8 +3560,8 @@ public class ApplicationServiceCETest {
|
|||
unsavedChildApp.setWorkspaceId(workspaceId);
|
||||
return applicationPageService.createApplication(unsavedChildApp, workspaceId);
|
||||
})
|
||||
.flatMap(savedChildApp -> applicationService
|
||||
.createOrUpdateSshKeyPair(savedChildApp.getId(), null)
|
||||
.flatMap(savedChildApp -> artifactService
|
||||
.createOrUpdateSshKeyPair(ArtifactType.APPLICATION, savedChildApp.getId(), null)
|
||||
.thenReturn(savedChildApp))
|
||||
.flatMap(savedChildApp -> {
|
||||
// fetch and return both child and main applications
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import org.mockito.stubbing.Answer;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.test.StepVerifier;
|
||||
|
|
@ -41,7 +42,7 @@ import static org.mockito.ArgumentMatchers.eq;
|
|||
@SpringBootTest
|
||||
public class ApplicationSnapshotServiceUnitTest {
|
||||
|
||||
@MockBean
|
||||
@SpyBean
|
||||
ApplicationService applicationService;
|
||||
|
||||
@MockBean
|
||||
|
|
@ -82,9 +83,9 @@ public class ApplicationSnapshotServiceUnitTest {
|
|||
ApplicationJson applicationJson = new ApplicationJson();
|
||||
applicationJson.setPageList(List.of(newPage));
|
||||
|
||||
Mockito.when(applicationService.findBranchedApplicationId(
|
||||
branchName, defaultAppId, AclPermission.MANAGE_APPLICATIONS))
|
||||
.thenReturn(Mono.just(branchedAppId));
|
||||
Mockito.doReturn(Mono.just(branchedAppId))
|
||||
.when(applicationService)
|
||||
.findBranchedApplicationId(branchName, defaultAppId, AclPermission.MANAGE_APPLICATIONS);
|
||||
|
||||
Mockito.when(exportService.exportByArtifactId(
|
||||
branchedAppId, SerialiseArtifactObjective.VERSION_CONTROL, ArtifactType.APPLICATION))
|
||||
|
|
@ -119,8 +120,9 @@ public class ApplicationSnapshotServiceUnitTest {
|
|||
application.setWorkspaceId(workspaceId);
|
||||
application.setId(branchedAppId);
|
||||
|
||||
Mockito.when(applicationService.findById(branchedAppId, AclPermission.MANAGE_APPLICATIONS))
|
||||
.thenReturn(Mono.just(application));
|
||||
Mockito.doReturn(Mono.just(application))
|
||||
.when(applicationService)
|
||||
.findById(branchedAppId, AclPermission.MANAGE_APPLICATIONS);
|
||||
|
||||
ApplicationJson applicationJson = new ApplicationJson();
|
||||
applicationJson.setExportedApplication(application);
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ class ActionExecutionSolutionCEImplTest {
|
|||
@MockBean
|
||||
NewPageService newPageService;
|
||||
|
||||
@MockBean
|
||||
@SpyBean
|
||||
ApplicationService applicationService;
|
||||
|
||||
@SpyBean
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user