package it.com.atlassian.labs.speakeasy;
import bsh.commands.dir;
import com.atlassian.pageobjects.TestedProduct;
import com.atlassian.pageobjects.page.HomePage;
import com.atlassian.pageobjects.page.LoginPage;
import com.atlassian.plugin.util.zip.FileUnzipper;
import com.atlassian.webdriver.pageobjects.WebDriverTester;
import org.apache.commons.io.FileUtils;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.*;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import javax.mail.MessagingException;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import static it.com.atlassian.labs.speakeasy.ExtensionBuilder.buildSimpleExtensionFile;
import static it.com.atlassian.labs.speakeasy.ExtensionBuilder.buildSimplePluginFile;
import static it.com.atlassian.labs.speakeasy.util.GitUtils.addRemote;
import static it.com.atlassian.labs.speakeasy.util.GitUtils.createNewLocalRepository;
import static it.com.atlassian.labs.speakeasy.util.GitUtils.getGitRepositoryUrl;
import static it.com.atlassian.labs.speakeasy.util.GitUtils.gitClone;
import static it.com.atlassian.labs.speakeasy.util.GitUtils.push;
import static it.com.atlassian.labs.speakeasy.util.TempHelp.getTempDir;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
*
*/
public class TestGit
{
private static TestedProduct<?> product = OwnerOfTestedProduct.INSTANCE;
@Before
public void login()
{
product.visit(LoginPage.class).loginAsSysAdmin(HomePage.class);
}
@After
public void logout()
{
((WebDriverTester)product.getTester()).getDriver().manage().deleteAllCookies();
}
@Test
public void testCloneAndEdit() throws IOException, MessagingException, URISyntaxException, NoHeadException, NoMessageException, ConcurrentRefUpdateException, WrongRepositoryStateException, InvalidRemoteException
{
product.visit(SpeakeasyUserPage.class)
.openInstallDialog()
.uploadPlugin(buildSimplePluginFile("git", "Git test"));
Git git = gitClone(product.getProductInstance(), "git");
File mf = new File(git.getRepository().getWorkTree(), "atlassian-plugin.xml");
assertTrue(mf.exists());
FileUtils.writeStringToFile(mf, FileUtils.readFileToString(mf).replace("Git test", "Git changed test"));
git.commit()
.setAll(true)
.setMessage("changed")
.setCommitter("admin", "admin@example.com")
.call();
git.push()
.setRemote("origin")
.setCredentialsProvider(new UsernamePasswordCredentialsProvider("admin", "admin"))
.call();
SpeakeasyUserPage page = product.visit(SpeakeasyUserPage.class);
assertEquals("Git changed test", page.getPlugins().get("git").getName());
page.uninstallPlugin("git");
}
@Test
public void testPushNew() throws IOException, MessagingException, URISyntaxException, NoHeadException, NoMessageException, ConcurrentRefUpdateException, WrongRepositoryStateException, InvalidRemoteException, NoFilepatternException
{
Git git = createNewLocalRepository(product.getProductInstance(), "git-pushNew");
push(git, "origin");
SpeakeasyUserPage page = product.visit(SpeakeasyUserPage.class);
assertTrue(page.getPluginKeys().contains("git-pushNew"));
page.uninstallPlugin("git-pushNew");
}
@Test
public void testPushNewAsTwoKeys() throws IOException, MessagingException, URISyntaxException, NoHeadException, NoMessageException, ConcurrentRefUpdateException, WrongRepositoryStateException, InvalidRemoteException, NoFilepatternException
{
Git git = createNewLocalRepository(product.getProductInstance(), "git-pushFirst");
addRemote(product.getProductInstance(), "git-pushSecond", "second", git);
push(git, "origin");
push(git, "second");
SpeakeasyUserPage page = product.visit(SpeakeasyUserPage.class);
assertTrue(page.getPluginKeys().contains("git-pushFirst"));
assertTrue(page.getPluginKeys().contains("git-pushSecond"));
page.uninstallPlugin("git-pushFirst");
page.uninstallPlugin("git-pushSecond");
}
}