Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import ReconnectLocators from "../../../../locators/ReconnectLocators";
import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
import {
agHelper,
gitSync,
homePage,
} from "../../../../support/Objects/ObjectsCore";

let wsName: string;
let repoName: string = "TED-testrepo1";

describe(
"Git Autocommit",
{ tags: ["@tag.Git", "@tag.GitAutocommit"] },
function () {
it("Check if autocommit progress bar is visible and network requests are properly called", function () {
featureFlagIntercept({
release_git_autocommit_feature_enabled: true,
});
agHelper.GenerateUUID();
cy.get("@guid").then((uid) => {
wsName = "GitAC-" + uid;
homePage.CreateNewWorkspace(wsName, true);

cy.intercept({
method: "POST",
url: "/api/v1/git/auto-commit/app/*",
}).as("gitAutocommitTriggerApi");

cy.intercept(
{
method: "GET",
url: "/api/v1/git/auto-commit/progress/app/*",
},
(req) => {
req.on("response", (res) => {
res.setDelay(500);
});
},
).as("gitAutocommitProgressApi");

gitSync.ImportAppFromGit(wsName, repoName);
agHelper.GetNClick(ReconnectLocators.SkipToAppBtn);
cy.wait("@gitAutocommitTriggerApi").then((interception) => {
expect(interception?.response?.statusCode).to.equal(200);
expect(
interception?.response?.body?.data?.autoCommitResponse,
).to.equal("PUBLISHED");
agHelper.WaitUntilEleAppear(gitSync._autocommitStatusbar);
});
cy.wait("@gitAutocommitProgressApi").then((interceptions) => {
expect(interceptions?.response?.statusCode).to.equal(200);
});
});
});
},
);
1 change: 1 addition & 0 deletions app/client/cypress/support/Pages/GitSync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export class GitSync {
"[data-testid='t--git-protected-branches-select']";
public _branchProtectionUpdateBtn =
"[data-testid='t--git-protected-branches-update-btn']";
public _autocommitStatusbar = "[data-testid='t--autocommit-statusbar']";
public _disconnectGitBtn = "[data-testid='t--git-disconnect-btn']";
public _mergeLoader = "[data-testid='t--git-merge-loader']";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ export default function AutocommitStatusbar({
}
});
return (
<StatusbarWrapper>
<StatusbarWrapper data-testid="t--autocommit-statusbar">
<Statusbar
active={false}
message={createMessage(AUTOCOMMIT_IN_PROGRESS_MESSAGE)}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.appsmith.server.git.autocommit.helpers;

import com.appsmith.external.annotations.FeatureFlagged;
import com.appsmith.external.enums.FeatureFlagEnum;
import com.appsmith.server.domains.GitArtifactMetadata;
import com.appsmith.server.domains.Layout;
import com.appsmith.server.dtos.AutoCommitTriggerDTO;
Expand Down Expand Up @@ -36,7 +34,6 @@ public class AutoCommitEligibilityHelperImpl extends AutoCommitEligibilityHelper
private final JsonSchemaVersions jsonSchemaVersions;

@Override
@FeatureFlagged(featureFlagName = FeatureFlagEnum.release_git_autocommit_eligibility_enabled)
public Mono<Boolean> isServerAutoCommitRequired(String workspaceId, GitArtifactMetadata gitMetadata) {

String defaultApplicationId = gitMetadata.getDefaultArtifactId();
Expand Down Expand Up @@ -75,7 +72,6 @@ public Mono<Boolean> isServerAutoCommitRequired(String workspaceId, GitArtifactM
*/
@Override
@Deprecated
@FeatureFlagged(featureFlagName = FeatureFlagEnum.release_git_autocommit_eligibility_enabled)
public Mono<Boolean> isClientMigrationRequired(PageDTO pageDTO) {
return dslMigrationUtils
.getLatestDslVersion()
Expand All @@ -95,7 +91,6 @@ public Mono<Boolean> isClientMigrationRequired(PageDTO pageDTO) {
}

@Override
@FeatureFlagged(featureFlagName = FeatureFlagEnum.release_git_autocommit_eligibility_enabled)
public Mono<Boolean> isClientMigrationRequiredFSOps(
String workspaceId, GitArtifactMetadata gitMetadata, PageDTO pageDTO) {
String defaultApplicationId = gitMetadata.getDefaultArtifactId();
Expand Down Expand Up @@ -127,7 +122,6 @@ public Mono<Boolean> isClientMigrationRequiredFSOps(
}

@Override
@FeatureFlagged(featureFlagName = FeatureFlagEnum.release_git_autocommit_eligibility_enabled)
public Mono<AutoCommitTriggerDTO> isAutoCommitRequired(
String workspaceId, GitArtifactMetadata gitArtifactMetadata, PageDTO pageDTO) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import com.appsmith.server.dtos.AutoCommitResponseDTO;
import com.appsmith.server.dtos.AutoCommitTriggerDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

@Slf4j
@Component
public class GitAutoCommitHelperFallbackImpl implements GitAutoCommitHelper {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ private Mono<Boolean> isAutoCommitAllowed(Application defaultApplication, String
String defaultApplicationId = defaultApplication.getId();

if (!GitUtils.isAutoCommitEnabled(defaultApplication.getGitApplicationMetadata())) {
log.debug("auto commit is disabled for application: {}", defaultApplicationId);
log.info("Auto commit is disabled for application: {}", defaultApplicationId);
return Mono.just(Boolean.FALSE);
}

Expand All @@ -107,14 +107,19 @@ private Mono<Boolean> isAutoCommitAllowed(Application defaultApplication, String
Boolean isAutoCommitRunning = tuple.getT2();

if (isBranchProtected || isAutoCommitRunning) {
log.debug(
"auto commit is not applicable for application: {} branch: {}, isAutoCommitDisabledForBranch: {}",
log.info(
"Auto commit is not applicable for application: {} branch: {}, isAutoCommitDisabledForBranch: {}",
defaultApplicationId,
branchName,
isBranchProtected);
return Mono.just(Boolean.FALSE);
}

log.info(
"Auto commit for application: {} branch: {} is applicable",
defaultApplicationId,
branchName);

return Mono.just(Boolean.TRUE);
})
.switchIfEmpty(Mono.just(Boolean.FALSE));
Expand All @@ -135,6 +140,8 @@ public Mono<Boolean> autoCommitServerMigration(String defaultApplicationId, Stri
public Mono<Boolean> autoCommitApplication(
String defaultApplicationId, String branchName, Boolean isClientMigration) {

log.info("Auto commit for application {} and branch {} in the publish flow", defaultApplicationId, branchName);

// if either param is absent, then application is not connected to git.
if (!StringUtils.hasText(branchName) || !StringUtils.hasText(defaultApplicationId)) {
return Mono.just(Boolean.FALSE);
Expand All @@ -155,21 +162,33 @@ public Mono<Boolean> autoCommitApplication(
.flatMap(defaultApplication -> {
return isAutoCommitAllowed(defaultApplication, finalBranchName)
.flatMap(isEligible -> {
log.info(
"Auto commit for application {}, and branch name {} is not allowed.",
defaultApplication.getId(),
branchName);
if (!Boolean.TRUE.equals(isEligible)) {
return Mono.empty();
}

log.info(
"Auto commit for application {}, and branch name {} is applicable",
defaultApplication.getId(),
branchName);
return Mono.zip(applicationMono, branchedApplicationMono);
});
})
.flatMap(tuple2 -> {
Application defaultApplication = tuple2.getT1();
Application branchedApplication = tuple2.getT2();
log.info(
"Auto commit for application {}, and branch name {} is fetching remote changes",
defaultApplication.getId(),
branchName);
return commonGitService
.fetchRemoteChanges(defaultApplication, branchedApplication, true)
.flatMap(branchTrackingStatus -> {
if (branchTrackingStatus.getBehindCount() > 0) {
log.debug(
log.info(
"the remote is ahead of the local, aborting autocommit for application {} and branch {}",
defaultApplicationId,
branchName);
Expand Down Expand Up @@ -221,6 +240,8 @@ public Mono<Boolean> autoCommitApplication(
public Mono<Boolean> publishAutoCommitEvent(
AutoCommitTriggerDTO autoCommitTriggerDTO, String defaultApplicationId, String branchName) {

log.info("Trying to publish auto commit for application {} and branch {}", defaultApplicationId, branchName);

if (!Boolean.TRUE.equals(autoCommitTriggerDTO.getIsAutoCommitRequired())) {
return Mono.just(Boolean.FALSE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.appsmith.server.domains.Layout;
import com.appsmith.server.dtos.ApplicationJson;
import com.appsmith.server.dtos.AutoCommitResponseDTO;
import com.appsmith.server.dtos.AutoCommitTriggerDTO;
import com.appsmith.server.dtos.PageDTO;
import com.appsmith.server.featureflags.CachedFeatures;
import com.appsmith.server.git.autocommit.helpers.AutoCommitEligibilityHelper;
Expand Down Expand Up @@ -106,7 +107,7 @@ public class AutoCommitServiceTest {
@MockBean
GitPrivateRepoHelper gitPrivateRepoHelper;

@SpyBean
@MockBean
AutoCommitEligibilityHelper autoCommitEligibilityHelper;

@MockBean
Expand Down Expand Up @@ -193,20 +194,26 @@ private org.json.JSONObject getMockedDsl() {
}

private void mockAutoCommitTriggerResponse(Boolean serverMigration, Boolean clientMigration) {
doReturn(Mono.just(getMockedDsl()))
.when(commonGitFileUtils)
.getPageDslVersionNumber(anyString(), any(), any(), anyBoolean(), any());

Integer serverVersion = jsonSchemaVersions.getServerVersion();
Integer dslVersionNumber = clientMigration ? DSL_VERSION_NUMBER + 1 : DSL_VERSION_NUMBER;
Integer serverSchemaVersionNumber = serverMigration ? serverVersion - 1 : serverVersion;

doReturn(Mono.just(dslVersionNumber)).when(dslMigrationUtils).getLatestDslVersion();

// server as true
doReturn(Mono.just(serverSchemaVersionNumber))
.when(commonGitFileUtils)
.getMetadataServerSchemaMigrationVersion(anyString(), any(), anyBoolean(), any());
Boolean isAutocommitRequired = serverMigration || clientMigration;
doReturn(Mono.just(new AutoCommitTriggerDTO(isAutocommitRequired, clientMigration, serverMigration)))
.when(autoCommitEligibilityHelper)
.isAutoCommitRequired(anyString(), any(), any());

// doReturn(Mono.just(getMockedDsl()))
// .when(commonGitFileUtils)
// .getPageDslVersionNumber(anyString(), any(), any(), anyBoolean(), any());
//
// Integer serverVersion = jsonSchemaVersions.getServerVersion();
// Integer dslVersionNumber = clientMigration ? DSL_VERSION_NUMBER + 1 : DSL_VERSION_NUMBER;
// Integer serverSchemaVersionNumber = serverMigration ? serverVersion - 1 : serverVersion;
//
// doReturn(Mono.just(dslVersionNumber)).when(dslMigrationUtils).getLatestDslVersion();
//
// // server as true
// doReturn(Mono.just(serverSchemaVersionNumber))
// .when(commonGitFileUtils)
// .getMetadataServerSchemaMigrationVersion(anyString(), any(), anyBoolean(), any());
}

@BeforeEach
Expand Down Expand Up @@ -237,9 +244,6 @@ public void beforeTest() {
Mockito.when(featureFlagService.getCachedTenantFeatureFlags())
.thenAnswer((Answer<CachedFeatures>) invocations -> cachedFeatures);

Mockito.when(featureFlagService.check(FeatureFlagEnum.release_git_autocommit_eligibility_enabled))
.thenReturn(Mono.just(TRUE));

Mockito.when(featureFlagService.check(FeatureFlagEnum.release_git_autocommit_feature_enabled))
.thenReturn(Mono.just(TRUE));

Expand Down Expand Up @@ -465,6 +469,7 @@ public void testAutoCommit_whenAutoCommitAlreadyInProgressOnAnotherBranch_return

Mockito.when(redisUtils.getAutoCommitProgress(DEFAULT_APP_ID)).thenReturn(Mono.just(70));

mockAutoCommitTriggerResponse(TRUE, TRUE);
// this would not trigger autocommit
Mono<AutoCommitResponseDTO> autoCommitResponseDTOMono =
autoCommitService.autoCommitApplication(testApplication.getId());
Expand All @@ -486,6 +491,8 @@ public void testAutoCommit_whenAutoCommitAlreadyInProgressOnSameBranch_returnsIn

Mockito.when(redisUtils.getAutoCommitProgress(DEFAULT_APP_ID)).thenReturn(Mono.just(70));

mockAutoCommitTriggerResponse(TRUE, TRUE);

// this would not trigger autocommit
Mono<AutoCommitResponseDTO> autoCommitResponseDTOMono =
autoCommitService.autoCommitApplication(testApplication.getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,6 @@ public void beforeEach() {
Mockito.when(featureFlagService.check(FeatureFlagEnum.release_git_autocommit_feature_enabled))
.thenReturn(Mono.just(Boolean.TRUE));

Mockito.when(featureFlagService.check(FeatureFlagEnum.release_git_autocommit_eligibility_enabled))
.thenReturn(Mono.just(Boolean.TRUE));

Mockito.when(dslMigrationUtils.getLatestDslVersion()).thenReturn(Mono.just(RANDOM_DSL_VERSION_NUMBER));

Mockito.when(gitRedisUtils.addFileLock(DEFAULT_APPLICATION_ID, AUTO_COMMIT_ELIGIBILITY))
Expand Down Expand Up @@ -292,8 +289,6 @@ public void isServerMigrationRequired_whenJsonSchemaIsAhead_returnsTrue() {

@Test
public void isServerMigrationRequired_whenFeatureIsFlagFalse_returnsFalse() {
Mockito.when(featureFlagService.check(FeatureFlagEnum.release_git_autocommit_eligibility_enabled))
.thenReturn(Mono.just(Boolean.FALSE));

GitArtifactMetadata gitArtifactMetadata = createGitMetadata();

Expand Down Expand Up @@ -350,8 +345,6 @@ public void isClientMigrationRequired_whenLatestDslIsAhead_returnsTrue() {

@Test
public void isClientMigrationRequired_whenFeatureFlagIsFalse_returnsFalse() {
Mockito.when(featureFlagService.check(FeatureFlagEnum.release_git_autocommit_eligibility_enabled))
.thenReturn(Mono.just(Boolean.FALSE));

PageDTO pageDTO = createPageDTO(RANDOM_DSL_VERSION_NUMBER);
Mono<Boolean> isClientMigrationRequiredMono = autoCommitEligibilityHelper.isClientMigrationRequired(pageDTO);
Expand All @@ -364,8 +357,6 @@ public void isClientMigrationRequired_whenFeatureFlagIsFalse_returnsFalse() {

@Test
public void isAutoCommitRequired_whenFeatureIsFlagFalse_returnsAllFalse() {
Mockito.when(featureFlagService.check(FeatureFlagEnum.release_git_autocommit_eligibility_enabled))
.thenReturn(Mono.just(Boolean.FALSE));

GitArtifactMetadata gitArtifactMetadata = createGitMetadata();
PageDTO pageDTO = createPageDTO(RANDOM_DSL_VERSION_NUMBER - 1);
Expand Down