Search in sources :

Example 1 with ConflictResolution

use of com.oxygenxml.git.service.ConflictResolution in project oxygen-git-client-addon by oxygenxml.

the class FlatView2Test method testShowInterruptedRebaseDlg_thenContinue.

/**
 * <p><b>Description:</b> Show interrupted rebase dialog and press continue.</p>
 * <p><b>Bug ID:</b> EXM-42025</p>
 *
 * @author sorin_carbunaru
 *
 * @throws Exception If it fails.
 */
@Test
public void testShowInterruptedRebaseDlg_thenContinue() throws Exception {
    try {
        String localTestRepository_1 = "target/test-resources/testShowInterruptedRebaseDlg_thenContinue-local-1";
        String localTestRepository_2 = "target/test-resources/testShowInterruptedRebaseDlg_thenContinue-local-2";
        String remoteTestRepository = "target/test-resources/testShowInterruptedRebaseDlg_thenContinue-remote";
        // Create and repositories
        Repository remoteRepo = createRepository(remoteTestRepository);
        Repository localRepo_1 = createRepository(localTestRepository_1);
        Repository localRepo_2 = createRepository(localTestRepository_2);
        bindLocalToRemote(localRepo_1, remoteRepo);
        bindLocalToRemote(localRepo_2, remoteRepo);
        new File(localTestRepository_1).mkdirs();
        new File(localTestRepository_2).mkdirs();
        // --------------  REPO 1
        GitAccess.getInstance().setRepositorySynchronously(localTestRepository_1);
        File firstRepoFile = new File(localTestRepository_1 + "/test.txt");
        firstRepoFile.createNewFile();
        setFileContent(firstRepoFile, "First version");
        GitAccess.getInstance().add(new FileStatus(GitChangeType.UNKNOWN, "test.txt"));
        GitAccess.getInstance().commit("First commit.");
        push("", "");
        // ----------------- REPO 2
        GitAccess.getInstance().setRepositorySynchronously(localTestRepository_2);
        File secondRepoFile = new File(localTestRepository_2 + "/test.txt");
        refreshSupport.call();
        flushAWT();
        sleep(400);
        assertFalse(secondRepoFile.exists());
        pull("", "", PullType.REBASE, false);
        assertTrue(secondRepoFile.exists());
        // Modify file and commit and push
        setFileContent(secondRepoFile, "Second versions");
        GitAccess.getInstance().add(new FileStatus(GitChangeType.MODIFIED, "test.txt"));
        GitAccess.getInstance().commit("Second commit.");
        push("", "");
        // --------------  REPO 1
        GitAccess.getInstance().setRepositorySynchronously(localTestRepository_1);
        setFileContent(firstRepoFile, "Third version");
        GitAccess.getInstance().add(new FileStatus(GitChangeType.MODIFIED, "test.txt"));
        GitAccess.getInstance().commit("Third commit.");
        // Now pull to generate conflict
        ConflictButtonsPanel rebasePanel = stagingPanel.getConflictButtonsPanel();
        assertFalse(rebasePanel.isShowing());
        flushAWT();
        PullResponse pullResponse = pull("", "", PullType.REBASE, false);
        refreshSupport.call();
        flushAWT();
        sleep(500);
        assertEquals(PullStatus.CONFLICTS, pullResponse.getStatus());
        assertTrue(rebasePanel.isShowing());
        // Pull again. Rebase in progress dialog is shown
        GitController ppc = (GitController) stagingPanel.getGitController();
        ppc.pull(PullType.REBASE);
        flushAWT();
        sleep(300);
        JDialog rebaseInProgressDlg = findDialog(Tags.REBASE_IN_PROGRESS);
        assertNotNull(rebaseInProgressDlg);
        // Get Cannot_continue_rebase_because_of_conflicts message
        final String[] errMessage = new String[1];
        StandalonePluginWorkspace mockedPluginWS = Mockito.mock(StandalonePluginWorkspace.class);
        Mockito.doAnswer(new Answer<Void>() {

            @Override
            public Void answer(InvocationOnMock invocation) throws Throwable {
                Object[] arguments = invocation.getArguments();
                if (arguments != null && arguments.length == 1) {
                    errMessage[0] = arguments[0].toString();
                }
                return null;
            }
        }).when(mockedPluginWS).showErrorMessage(Mockito.anyString());
        Mockito.when(mockedPluginWS.getParentFrame()).thenReturn(null);
        PluginWorkspaceProvider.setPluginWorkspace(mockedPluginWS);
        JButton continueBtn = findFirstButton(rebaseInProgressDlg.getRootPane(), Translator.getInstance().getTranslation(Tags.CONTINUE_REBASE));
        continueBtn.doClick();
        waitForScheduler();
        assertEquals("Cannot_continue_rebase_because_of_conflicts", errMessage[0]);
        // Resolve conflict
        GitControllerBase sc = new GitControllerBase(GitAccess.getInstance()) {

            @Override
            protected boolean isUserOKWithResolvingRebaseConflictUsingMineOrTheirs(ConflictResolution cmd) {
                return cmd == ConflictResolution.RESOLVE_USING_MINE;
            }
        };
        sc.asyncResolveUsingMine(Arrays.asList(new FileStatus(GitChangeType.CONFLICT, "test.txt")));
        flushAWT();
        // Pull again.
        ppc.pull(PullType.REBASE);
        flushAWT();
        sleep(300);
        // Rebase in progress dialog shown
        rebaseInProgressDlg = findDialog(Tags.REBASE_IN_PROGRESS);
        assertNotNull(rebaseInProgressDlg);
        // Now CONTINUE
        continueBtn = findFirstButton(rebaseInProgressDlg.getRootPane(), Translator.getInstance().getTranslation(Tags.CONTINUE_REBASE));
        continueBtn.doClick();
        flushAWT();
        waitForScheduler();
        sleep(1000);
        rebaseInProgressDlg = findDialog(Tags.REBASE_IN_PROGRESS);
        assertNull(rebaseInProgressDlg);
        assertFalse(rebasePanel.isShowing());
        assertTableModels(// Unstaged
        "", // Staged
        "");
    } finally {
        PluginWorkspaceProvider.setPluginWorkspace(null);
    }
}
Also used : FileStatus(com.oxygenxml.git.service.entities.FileStatus) JButton(javax.swing.JButton) GitController(com.oxygenxml.git.view.event.GitController) GitControllerBase(com.oxygenxml.git.service.GitControllerBase) Repository(org.eclipse.jgit.lib.Repository) PullResponse(com.oxygenxml.git.service.PullResponse) ConflictButtonsPanel(com.oxygenxml.git.view.staging.ConflictButtonsPanel) InvocationOnMock(org.mockito.invocation.InvocationOnMock) ConflictResolution(com.oxygenxml.git.service.ConflictResolution) StandalonePluginWorkspace(ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace) File(java.io.File) JDialog(javax.swing.JDialog) Test(org.junit.Test)

Example 2 with ConflictResolution

use of com.oxygenxml.git.service.ConflictResolution in project oxygen-git-client-addon by oxygenxml.

the class FlatView2Test method testShowRebasePanel_thenContinue.

/**
 * <p><b>Description:</b> Show and hide (by continuing the rebase) the rebase panel.</p>
 * <p><b>Bug ID:</b> EXM-42025</p>
 *
 * @author sorin_carbunaru
 *
 * @throws Exception If it fails.
 */
@Test
public void testShowRebasePanel_thenContinue() throws Exception {
    String localTestRepository_1 = "target/test-resources/testShowRebasePanel_thenContinue-local-1";
    String localTestRepository_2 = "target/test-resources/testShowRebasePanel_thenContinue-local-2";
    String remoteTestRepository = "target/test-resources/testShowRebasePanel_thenContinue-remote";
    // Create and repositories
    Repository remoteRepo = createRepository(remoteTestRepository);
    Repository localRepo_1 = createRepository(localTestRepository_1);
    Repository localRepo_2 = createRepository(localTestRepository_2);
    bindLocalToRemote(localRepo_1, remoteRepo);
    bindLocalToRemote(localRepo_2, remoteRepo);
    new File(localTestRepository_1).mkdirs();
    new File(localTestRepository_2).mkdirs();
    // --------------  REPO 1
    GitAccess.getInstance().setRepositorySynchronously(localTestRepository_1);
    File firstRepoFile = new File(localTestRepository_1 + "/test.txt");
    firstRepoFile.createNewFile();
    setFileContent(firstRepoFile, "First version");
    GitAccess.getInstance().add(new FileStatus(GitChangeType.UNKNOWN, "test.txt"));
    GitAccess.getInstance().commit("First commit.");
    push("", "");
    // ----------------- REPO 2
    GitAccess.getInstance().setRepositorySynchronously(localTestRepository_2);
    File secondRepoFile = new File(localTestRepository_2 + "/test.txt");
    refreshSupport.call();
    flushAWT();
    sleep(400);
    assertFalse(secondRepoFile.exists());
    pull("", "", PullType.REBASE, false);
    assertTrue(secondRepoFile.exists());
    // Modify file and commit and push
    setFileContent(secondRepoFile, "Second versions");
    GitAccess.getInstance().add(new FileStatus(GitChangeType.MODIFIED, "test.txt"));
    GitAccess.getInstance().commit("Second commit.");
    push("", "");
    // --------------  REPO 1
    GitAccess.getInstance().setRepositorySynchronously(localTestRepository_1);
    setFileContent(firstRepoFile, "Third version");
    GitAccess.getInstance().add(new FileStatus(GitChangeType.MODIFIED, "test.txt"));
    GitAccess.getInstance().commit("Third commit.");
    // Now pull to generate conflict
    ConflictButtonsPanel rebasePanel = stagingPanel.getConflictButtonsPanel();
    assertFalse(rebasePanel.isShowing());
    flushAWT();
    PullResponse pullResponse = pull("", "", PullType.REBASE, false);
    refreshSupport.call();
    waitForScheduler();
    assertEquals(PullStatus.CONFLICTS, pullResponse.getStatus());
    assertTrue(rebasePanel.isShowing());
    GitControllerBase sc = new GitControllerBase(GitAccess.getInstance()) {

        @Override
        protected boolean isUserOKWithResolvingRebaseConflictUsingMineOrTheirs(ConflictResolution cmd) {
            return cmd == ConflictResolution.RESOLVE_USING_MINE;
        }
    };
    sc.asyncResolveUsingMine(Arrays.asList(new FileStatus(GitChangeType.CONFLICT, "test.txt")));
    waitForScheduler();
    flushAWT();
    JButton continueBtn = findFirstButton(rebasePanel, Tags.CONTINUE_REBASE);
    assertNotNull(continueBtn);
    continueBtn.doClick();
    waitForScheduler();
    flushAWT();
    assertFalse(rebasePanel.isShowing());
}
Also used : GitControllerBase(com.oxygenxml.git.service.GitControllerBase) Repository(org.eclipse.jgit.lib.Repository) FileStatus(com.oxygenxml.git.service.entities.FileStatus) PullResponse(com.oxygenxml.git.service.PullResponse) ConflictButtonsPanel(com.oxygenxml.git.view.staging.ConflictButtonsPanel) JButton(javax.swing.JButton) ConflictResolution(com.oxygenxml.git.service.ConflictResolution) File(java.io.File) Test(org.junit.Test)

Aggregations

ConflictResolution (com.oxygenxml.git.service.ConflictResolution)2 GitControllerBase (com.oxygenxml.git.service.GitControllerBase)2 PullResponse (com.oxygenxml.git.service.PullResponse)2 FileStatus (com.oxygenxml.git.service.entities.FileStatus)2 ConflictButtonsPanel (com.oxygenxml.git.view.staging.ConflictButtonsPanel)2 File (java.io.File)2 JButton (javax.swing.JButton)2 Repository (org.eclipse.jgit.lib.Repository)2 Test (org.junit.Test)2 GitController (com.oxygenxml.git.view.event.GitController)1 JDialog (javax.swing.JDialog)1 InvocationOnMock (org.mockito.invocation.InvocationOnMock)1 StandalonePluginWorkspace (ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace)1