package it.com.atlassian.labs.speakeasy;
import com.atlassian.pageobjects.TestedProduct;
import com.atlassian.pageobjects.page.LoginPage;
import com.atlassian.webdriver.pageobjects.WebDriverTester;
import org.junit.After;
import org.junit.Test;
import java.io.IOException;
import static it.com.atlassian.labs.speakeasy.ExtensionBuilder.buildSimplePluginFile;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
*
*/
public class TestGlobalExtensions
{
private static TestedProduct<?> product = OwnerOfTestedProduct.INSTANCE;
@After
public void logout()
{
((WebDriverTester)product.getTester()).getDriver().manage().deleteAllCookies();
}
@Test
public void testGlobaliseExtension() throws Exception
{
barneyCreatesAPlugin();
logout();
adminVerifiesActions();
adminForksPlugin();
adminEnablesGlobally();
adminVerifiesFork();
logout();
barneyVerifiesActions();
logout();
adminDisablesGlobally();
adminUninstallsFork();
logout();
barneyUninstallsPlugin();
}
private void adminUninstallsFork()
{
product.getPageBinder().bind(SpeakeasyUserPage.class)
.uninstallPlugin("global-fork-admin");
}
private void barneyUninstallsPlugin()
{
product.visit(LoginPage.class)
.login("barney", "barney", SpeakeasyUserPage.class).uninstallPlugin("global");
}
private void adminDisablesGlobally()
{
SpeakeasyUserPage page = product.visit(LoginPage.class).loginAsSysAdmin(SpeakeasyUserPage.class);
page.disablePluginForEveryone("global").confirm();
assertFalse(page.isPluginEnabled("global"));
assertTrue(page.canEnable("global"));
assertFalse(page.canDisable("global"));
}
private void barneyVerifiesActions()
{
SpeakeasyUserPage page = product.visit(LoginPage.class)
.login("barney", "barney", SpeakeasyUserPage.class);
assertFalse(page.canExecute("global", ExtensionOperations.ENABLEGLOBALLY));
assertFalse(page.canExecute("global", ExtensionOperations.DISABLEGLOBALLY));
assertTrue(page.isPluginEnabled("global"));
assertFalse(page.canExecute("global", ExtensionOperations.EDIT));
assertFalse(page.canExecute("global", ExtensionOperations.UNINSTALL));
}
private void adminForksPlugin() throws IOException
{
SpeakeasyUserPage page = product.getPageBinder().bind(SpeakeasyUserPage.class);
page.openForkDialog("global")
.setDescription("Global fork")
.fork()
.enablePlugin("global-fork-admin");
}
private void adminEnablesGlobally()
{
SpeakeasyUserPage page = product.getPageBinder().bind(SpeakeasyUserPage.class);
page.enablePluginForEveryone("global").confirm();
assertTrue(page.isPluginEnabled("global"));
assertFalse(page.canEnable("global"));
assertFalse(page.canDisable("global"));
assertFalse(page.canExecute("global", ExtensionOperations.ENABLEGLOBALLY));
assertTrue(page.canExecute("global", ExtensionOperations.DISABLEGLOBALLY));
}
private void adminVerifiesFork()
{
SpeakeasyUserPage page = product.getPageBinder().bind(SpeakeasyUserPage.class);
assertFalse(page.isPluginEnabled("global-fork-admin"));
assertFalse(page.canEnable("global-fork-admin"));
}
private SpeakeasyUserPage adminVerifiesActions()
{
SpeakeasyUserPage page = product.visit(LoginPage.class).loginAsSysAdmin(SpeakeasyUserPage.class);
assertTrue(page.canExecute("global", ExtensionOperations.ENABLEGLOBALLY));
assertFalse(page.canExecute("global", ExtensionOperations.DISABLEGLOBALLY));
return page;
}
private void barneyCreatesAPlugin() throws IOException
{
SpeakeasyUserPage page = product.visit(LoginPage.class)
.login("barney", "barney", SpeakeasyUserPage.class)
.openInstallDialog()
.uploadPlugin(buildSimplePluginFile("global", "Global extension"));
assertFalse(page.canExecute("global", ExtensionOperations.ENABLEGLOBALLY));
assertFalse(page.canExecute("global", ExtensionOperations.DISABLEGLOBALLY));
assertFalse(page.isPluginEnabled("global"));
assertTrue(page.canExecute("global", ExtensionOperations.EDIT));
assertTrue(page.canExecute("global", ExtensionOperations.UNINSTALL));
}
}