Feat: App Positioning Feature Backend Implementation (#19514)

## Description

Implements backend functionality for App Positioning (Auto Layout)
Feature

Fixes #19348 


## Type of change

- New feature (non-breaking change which adds functionality)


## How Has This Been Tested?

- JUnit 
- Manual


## Checklist:
### Dev activity
- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my own code
- [x] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] PR is being merged under a feature flag


### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
This commit is contained in:
Nilansh Bansal 2023-01-07 00:29:57 +05:30 committed by GitHub
parent 9c30dadd31
commit 75a8cbf288
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 0 deletions

View File

@ -114,6 +114,11 @@ public class Application extends BaseDomain {
NavigationSetting publishedNavigationSetting;
@JsonIgnore
AppPositioning publishedAppPositioning;
@JsonIgnore
AppPositioning unpublishedAppPositioning;
/**
* Earlier this was returning value of the updatedAt property in the base domain.
@ -179,6 +184,8 @@ public class Application extends BaseDomain {
this.icon = application.getIcon();
this.unpublishedAppLayout = application.getUnpublishedAppLayout() == null ? null : new AppLayout(application.getUnpublishedAppLayout().type);
this.publishedAppLayout = application.getPublishedAppLayout() == null ? null : new AppLayout(application.getPublishedAppLayout().type);
this.unpublishedAppPositioning = application.getUnpublishedAppPositioning() == null ? null : new AppPositioning(application.getUnpublishedAppPositioning().type);
this.publishedAppPositioning = application.getPublishedAppPositioning() == null ? null : new AppPositioning(application.getPublishedAppPositioning().type);
this.unpublishedCustomJSLibs = application.getUnpublishedCustomJSLibs();
}
@ -281,4 +288,36 @@ public class Application extends BaseDomain {
private Boolean showShareApp;
}
public AppPositioning getAppPositioning() {
return Boolean.TRUE.equals(viewMode) ? publishedAppPositioning : unpublishedAppPositioning;
}
public void setAppPositioning(AppPositioning appPositioning) {
if (Boolean.TRUE.equals(viewMode)) {
publishedAppPositioning = appPositioning;
} else {
unpublishedAppPositioning = appPositioning;
}
}
/**
* AppPositioning captures widget positioning Mode of the application
*/
@Data
@NoArgsConstructor
public static class AppPositioning {
Type type;
public AppPositioning(Type type) {
this.type = type;
}
public enum Type {
FIXED,
AUTO
}
}
}

View File

@ -1011,6 +1011,7 @@ public class ApplicationPageServiceCEImpl implements ApplicationPageServiceCE {
application.setPublishedPages(pages);
application.setPublishedAppLayout(application.getUnpublishedAppLayout());
application.setPublishedAppPositioning(application.getUnpublishedAppPositioning());
if (isPublishedManually) {
application.setLastDeployedAt(Instant.now());
}

View File

@ -2210,6 +2210,7 @@ public class ApplicationServiceCETest {
String appName = "ApplicationServiceTest Publish Application";
testApplication.setName(appName);
testApplication.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP));
testApplication.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED));
Mono<Application> applicationMono = applicationPageService.createApplication(testApplication, workspaceId)
.flatMap(application -> applicationPageService.publish(application.getId(), true))
.then(applicationService.findByName(appName, MANAGE_APPLICATIONS))
@ -2241,6 +2242,7 @@ public class ApplicationServiceCETest {
assertThat(newPage.getUnpublishedPage().getLayouts().get(0).getDsl()).isEqualTo(newPage.getPublishedPage().getLayouts().get(0).getDsl());
assertThat(application.getPublishedAppLayout()).isEqualTo(application.getUnpublishedAppLayout());
assertThat(application.getPublishedAppPositioning()).isEqualTo(application.getUnpublishedAppPositioning());
})
.verifyComplete();
}
@ -2264,6 +2266,7 @@ public class ApplicationServiceCETest {
String appName = "Publish Application With Archived Page";
testApplication.setName(appName);
testApplication.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP));
testApplication.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED));
Mono<Tuple3<NewAction, ActionCollection, NewPage>> resultMono = applicationPageService.createApplication(testApplication, workspaceId)
.flatMap(application -> {
PageDTO page = new PageDTO();
@ -2364,6 +2367,7 @@ public class ApplicationServiceCETest {
public void publishApplication_withGitConnectedApp_success() {
GitApplicationMetadata gitData = gitConnectedApp.getGitApplicationMetadata();
gitConnectedApp.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP));
gitConnectedApp.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED));
Mono<Application> applicationMono = applicationService.update(gitConnectedApp.getId(), gitConnectedApp)
.flatMap(updatedApp -> applicationPageService.publish(updatedApp.getId(), gitData.getBranchName(), true))
@ -2394,6 +2398,7 @@ public class ApplicationServiceCETest {
assertThat(newPage.getDefaultResources()).isNotNull();
assertThat(application.getPublishedAppLayout()).isEqualTo(application.getUnpublishedAppLayout());
assertThat(application.getPublishedAppPositioning()).isEqualTo(application.getUnpublishedAppPositioning());
})
.verifyComplete();
}