Search in sources :

Example 1 with PullResponse

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

the class FlatView2Test method testAPullCannotLockRef.

/**
 * <p><b>Description:</b> lock fail test.</p>
 * <p><b>Bug ID:</b> EXM-42867</p>
 *
 * @author sorin_carbunaru
 *
 * @throws Exception If it fails.
 */
@Test
public void testAPullCannotLockRef() throws Exception {
    PluginWorkspace pluginWorkspaceMock = PluginWorkspaceProvider.getPluginWorkspace();
    final boolean[] showErrorMessageCalled = new boolean[] { false };
    Mockito.doAnswer(new Answer<Void>() {

        @Override
        public Void answer(InvocationOnMock invocation) throws Throwable {
            showErrorMessageCalled[0] = true;
            return null;
        }
    }).when(pluginWorkspaceMock).showErrorMessage(Mockito.anyString());
    PluginWorkspaceProvider.setPluginWorkspace(pluginWorkspaceMock);
    String localTestRepository = "target/test-resources/testStageUnstage_ModifiedFile_local_pullCannotLock";
    String remoteTestRepository = "target/test-resources/testStageUnstage_ModifiedFile_remote_pullCannotLock";
    // Create repositories
    Repository remoteRepo = createRepository(remoteTestRepository);
    Repository localRepo = createRepository(localTestRepository);
    bindLocalToRemote(localRepo, remoteRepo);
    sleep(700);
    // Create a new file and push it.
    String fileName = "test.txt";
    File file = commitNewFile(localTestRepository, fileName, "content");
    PushResponse push = push("", "");
    assertEquals("status: OK message null", push.toString());
    // Create lock files
    String repoDir = GitAccess.getInstance().getRepository().getDirectory().getAbsolutePath();
    Ref ref = GitAccess.getInstance().getRemoteBrachListForCurrentRepo().get(0);
    File lockFile = new File(repoDir, ref.getName() + ".lock");
    boolean createNewFile = lockFile.createNewFile();
    assertTrue("Unnable to create lock file " + lockFile.getAbsolutePath(), createNewFile);
    setFileContent(lockFile, GitAccess.getInstance().getLastLocalCommitInRepo().getName());
    // Commit a new version of the file.
    setFileContent(file, "modified");
    GitAccess.getInstance().add(new FileStatus(GitChangeType.MODIFIED, fileName));
    GitAccess.getInstance().commit("modified");
    push("", "");
    assertEquals("status: OK message null", push.toString());
    // Pull should throw "Lock failed" error
    PullResponse pullResponse = pull("", "", PullType.MERGE_FF, false);
    assertEquals(PullStatus.LOCK_FAILED, pullResponse.getStatus());
    assertTrue(showErrorMessageCalled[0]);
    Future<?> execute = ((GitController) stagingPanel.getGitController()).pull();
    execute.get();
    flushAWT();
    assertEquals("Lock_failed", stagingPanel.getCommitPanel().getStatusLabel().getText());
}
Also used : PluginWorkspace(ro.sync.exml.workspace.api.PluginWorkspace) StandalonePluginWorkspace(ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace) FileStatus(com.oxygenxml.git.service.entities.FileStatus) GitController(com.oxygenxml.git.view.event.GitController) Repository(org.eclipse.jgit.lib.Repository) Ref(org.eclipse.jgit.lib.Ref) PullResponse(com.oxygenxml.git.service.PullResponse) InvocationOnMock(org.mockito.invocation.InvocationOnMock) File(java.io.File) PushResponse(com.oxygenxml.git.service.PushResponse) Test(org.junit.Test)

Example 2 with PullResponse

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

the class FlatView2Test method testShowInterruptedRebaseDlg_thenCancel.

/**
 * <p><b>Description:</b> Show interrupted rebase dialog and press cancel.</p>
 * <p><b>Bug ID:</b> EXM-42025</p>
 *
 * @author sorin_carbunaru
 *
 * @throws Exception If it fails.
 */
@Test
public void testShowInterruptedRebaseDlg_thenCancel() throws Exception {
    String localTestRepository_1 = "target/test-resources/testShowInterruptedRebaseDlg_thenCancel-local-1";
    String localTestRepository_2 = "target/test-resources/testShowInterruptedRebaseDlg_thenCancel-local-2";
    String remoteTestRepository = "target/test-resources/testShowInterruptedRebaseDlg_thenCancel-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();
    waitForScheduler();
    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());
    GitController ppc = (GitController) stagingPanel.getGitController();
    ppc.pull(PullType.REBASE);
    flushAWT();
    sleep(300);
    JDialog interruptedRebaseDlg = findDialog(Tags.REBASE_IN_PROGRESS);
    assertNotNull(interruptedRebaseDlg);
    JButton abortBtn = findFirstButton(interruptedRebaseDlg.getRootPane(), Translator.getInstance().getTranslation(Tags.CANCEL));
    abortBtn.doClick();
    flushAWT();
    sleep(1000);
    interruptedRebaseDlg = findDialog(Tags.REBASE_IN_PROGRESS);
    assertNull(interruptedRebaseDlg);
    assertTrue(rebasePanel.isShowing());
    assertTableModels(// Unstaged
    "CONFLICT, test.txt", // Staged
    "");
}
Also used : 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) GitController(com.oxygenxml.git.view.event.GitController) File(java.io.File) JDialog(javax.swing.JDialog) Test(org.junit.Test)

Example 3 with PullResponse

use of com.oxygenxml.git.service.PullResponse 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 4 with PullResponse

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

the class FlatView2Test method testShowInterruptedRebaseDlg_thenAbort.

/**
 * <p><b>Description:</b> Show interrupted rebase dialog and abort.</p>
 * <p><b>Bug ID:</b> EXM-42025</p>
 *
 * @author sorin_carbunaru
 *
 * @throws Exception If it fails.
 */
@Test
public void testShowInterruptedRebaseDlg_thenAbort() throws Exception {
    String localTestRepository_1 = "target/test-resources/testShowInterruptedRebaseDlg_thenAbort-local-1";
    String localTestRepository_2 = "target/test-resources/testShowInterruptedRebaseDlg_thenAbort-local-2";
    String remoteTestRepository = "target/test-resources/testShowInterruptedRebaseDlg_thenAbort-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();
    waitForScheduler();
    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());
    Semaphore s = new Semaphore(0);
    GitController ppc = new GitController() {

        @Override
        protected void showRebaseInProgressDialog() {
            s.release();
            super.showRebaseInProgressDialog();
        }
    };
    ppc.pull(PullType.REBASE);
    s.acquire();
    flushAWT();
    JDialog interruptedRebaseDlg = findDialog(Tags.REBASE_IN_PROGRESS);
    assertNotNull(interruptedRebaseDlg);
    JButton abortBtn = findFirstButton(interruptedRebaseDlg.getRootPane(), Translator.getInstance().getTranslation(Tags.ABORT_REBASE));
    abortBtn.doClick();
    waitForScheduler();
    flushAWT();
    interruptedRebaseDlg = findDialog(Tags.REBASE_IN_PROGRESS);
    assertNull(interruptedRebaseDlg);
    assertFalse(rebasePanel.isShowing());
    assertTableModels(// Unstaged
    "", // Staged
    "");
}
Also used : 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) GitController(com.oxygenxml.git.view.event.GitController) Semaphore(java.util.concurrent.Semaphore) File(java.io.File) JDialog(javax.swing.JDialog) Test(org.junit.Test)

Example 5 with PullResponse

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

the class FlatViewTestBase method setUp.

@Override
public void setUp() throws Exception {
    super.setUp();
    GitController gitController = new GitController() {

        @Override
        protected void showPullSuccessfulWithConflicts(PullResponse response) {
        // Nothing to do.
        }
    };
    gitActionsManager = new GitActionsManager(gitController, null, null, refreshSupport);
    stagingPanel = new StagingPanel(refreshSupport, gitController, null, gitActionsManager) {

        @Override
        protected ToolbarPanel createToolbar(GitActionsManager gitActionsManager) {
            // not to create it anymore
            return null;
        }
    };
    // TODO: Maybe move this init on the StagingPanel constructor.
    // Careful not to create a cycle.
    refreshSupport.setStagingPanel(stagingPanel);
    mainFrame = new JFrame("Git test");
    mainFrame.getContentPane().add(stagingPanel, BorderLayout.CENTER);
    mainFrame.setSize(new Dimension(400, 600));
    mainFrame.setVisible(true);
    // When the GUI is created some tasks are scheduled on AWT and Git thread.
    // Better wait for them so they don't interact with the tests.
    flushAWT();
    waitForScheduler();
}
Also used : PullResponse(com.oxygenxml.git.service.PullResponse) JFrame(javax.swing.JFrame) GitController(com.oxygenxml.git.view.event.GitController) Dimension(java.awt.Dimension) GitActionsManager(com.oxygenxml.git.view.actions.GitActionsManager)

Aggregations

PullResponse (com.oxygenxml.git.service.PullResponse)10 FileStatus (com.oxygenxml.git.service.entities.FileStatus)9 File (java.io.File)9 Repository (org.eclipse.jgit.lib.Repository)9 Test (org.junit.Test)9 ConflictButtonsPanel (com.oxygenxml.git.view.staging.ConflictButtonsPanel)7 GitController (com.oxygenxml.git.view.event.GitController)6 JButton (javax.swing.JButton)6 GitControllerBase (com.oxygenxml.git.service.GitControllerBase)4 JDialog (javax.swing.JDialog)3 ConflictResolution (com.oxygenxml.git.service.ConflictResolution)2 InvocationOnMock (org.mockito.invocation.InvocationOnMock)2 PluginWorkspace (ro.sync.exml.workspace.api.PluginWorkspace)2 StandalonePluginWorkspace (ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace)2 GitAccess (com.oxygenxml.git.service.GitAccess)1 PushResponse (com.oxygenxml.git.service.PushResponse)1 GitActionsManager (com.oxygenxml.git.view.actions.GitActionsManager)1 Dimension (java.awt.Dimension)1 List (java.util.List)1 Semaphore (java.util.concurrent.Semaphore)1