use of org.xwiki.extension.ExtensionId in project xwiki-platform by xwiki.
the class ExtensionIT method testDowngrade.
/**
* Tests how an extension is downgraded.
*/
@Test
public void testDowngrade() throws Exception {
// Setup the extension.
String extensionId = "alice-xar-extension";
String oldVersion = "1.3";
String newVersion = "2.1.4";
TestExtension oldExtension = getRepositoryTestUtils().getTestExtension(new ExtensionId(extensionId, oldVersion), "xar");
getRepositoryTestUtils().addExtension(oldExtension);
TestExtension newExtension = getRepositoryTestUtils().getTestExtension(new ExtensionId(extensionId, newVersion), "xar");
getRepositoryTestUtils().attachFile(newExtension);
getRepositoryTestUtils().addVersionObject(newExtension, newVersion, "attach:" + newExtension.getFile().getName());
// Make sure the new version is installed.
getExtensionTestUtils().install(new ExtensionId(extensionId, newVersion));
// Downgrade the extension.
ExtensionAdministrationPage adminPage = ExtensionAdministrationPage.gotoPage();
ExtensionPane extensionPane = adminPage.getSearchBar().clickAdvancedSearch().search(extensionId, oldVersion).getExtension(0);
assertEquals("remote-installed", extensionPane.getStatus());
assertEquals("Version 2.1.4 is installed", extensionPane.getStatusMessage());
extensionPane = extensionPane.downgrade();
// Check the downgrade plan.
List<DependencyPane> downgradePlan = extensionPane.openProgressSection().getJobPlan();
assertEquals(1, downgradePlan.size());
assertEquals(extensionId, downgradePlan.get(0).getName());
assertEquals(oldVersion, downgradePlan.get(0).getVersion());
assertEquals("remote-installed", downgradePlan.get(0).getStatus());
assertEquals("Version 2.1.4 is installed", downgradePlan.get(0).getStatusMessage());
// Finish the downgrade and check the downgrade log.
extensionPane = extensionPane.confirm();
assertEquals("installed", extensionPane.getStatus());
assertEquals("Installed", extensionPane.getStatusMessage());
List<LogItemPane> log = extensionPane.openProgressSection().getJobLog();
assertTrue(log.size() > 2);
assertEquals("info", log.get(2).getLevel());
assertEquals("Resolving extension [alice-xar-extension 1.3] on namespace [Home]", log.get(2).getMessage());
assertEquals("info", log.get(log.size() - 1).getLevel());
assertEquals("Finished job of type [install] with identifier " + "[extension/action/alice-xar-extension/wiki:xwiki]", log.get(log.size() - 1).getMessage());
// Assert the changes.
ViewPage viewPage = getUtil().gotoPage("ExtensionTest", "Alice");
assertEquals("Alice Macro", viewPage.getDocumentTitle());
assertTrue(viewPage.getContent().contains("Alice says hello!"));
}
use of org.xwiki.extension.ExtensionId in project xwiki-platform by xwiki.
the class ExtensionIT method testDependencies.
/**
* Tests how extension dependencies are displayed (both direct and backward dependencies).
*/
@Test
public void testDependencies() throws Exception {
// Setup the extension and its dependencies.
ExtensionId dependencyId = new ExtensionId("bob-xar-extension", "2.5-milestone-2");
TestExtension dependency = getRepositoryTestUtils().getTestExtension(dependencyId, "xar");
dependency.setName("Bob Wiki Macro");
dependency.setSummary("Required by Alice");
getRepositoryTestUtils().addExtension(dependency);
ExtensionId extensionId = new ExtensionId("alice-xar-extension", "1.3");
TestExtension extension = getRepositoryTestUtils().getTestExtension(extensionId, "xar");
extension.addDependency(new DefaultExtensionDependency(dependencyId.getId(), new DefaultVersionConstraint(dependencyId.getVersion().getValue())));
extension.addDependency(new DefaultExtensionDependency("missing-dependency", new DefaultVersionConstraint("135")));
extension.addDependency(new DefaultExtensionDependency("org.xwiki.platform:xwiki-platform-sheet-api", new DefaultVersionConstraint("[3.2,)")));
extension.addDependency(new DefaultExtensionDependency("org.xwiki.commons:xwiki-commons-diff-api", new DefaultVersionConstraint("2.7")));
extension.addDependency(new DefaultExtensionDependency("org.xwiki.platform:xwiki-platform-display-api", new DefaultVersionConstraint("100.1")));
getRepositoryTestUtils().addExtension(extension);
// Search the extension and assert the list of dependencies.
ExtensionAdministrationPage adminPage = ExtensionAdministrationPage.gotoPage();
ExtensionPane extensionPane = adminPage.getSearchBar().clickAdvancedSearch().search(extensionId).getExtension(0);
ExtensionDependenciesPane dependenciesPane = extensionPane.openDependenciesSection();
List<DependencyPane> directDependencies = dependenciesPane.getDirectDependencies();
assertEquals(5, directDependencies.size());
assertEquals(dependency.getName(), directDependencies.get(0).getName());
assertEquals(dependencyId.getVersion().getValue(), directDependencies.get(0).getVersion());
assertEquals("remote", directDependencies.get(0).getStatus());
assertNull(directDependencies.get(0).getStatusMessage());
assertNull(directDependencies.get(1).getLink());
assertEquals("missing-dependency", directDependencies.get(1).getName());
assertEquals("135", directDependencies.get(1).getVersion());
assertEquals("unknown", directDependencies.get(1).getStatus());
assertNull(directDependencies.get(1).getStatusMessage());
assertNotNull(directDependencies.get(2).getLink());
assertEquals("XWiki Platform - Sheet - API", directDependencies.get(2).getName());
assertEquals("[3.2,)", directDependencies.get(2).getVersion());
assertEquals("core", directDependencies.get(2).getStatus());
assertEquals("Provided", directDependencies.get(2).getStatusMessage());
assertNotNull(directDependencies.get(3).getLink());
assertEquals("XWiki Commons - Diff API", directDependencies.get(3).getName());
assertEquals("2.7", directDependencies.get(3).getVersion());
assertEquals("remote-core", directDependencies.get(3).getStatus());
assertTrue(directDependencies.get(3).getStatusMessage().matches("Version [^\\s]+ is provided"));
assertEquals("XWiki Platform - Display API", directDependencies.get(4).getName());
assertEquals("100.1", directDependencies.get(4).getVersion());
assertEquals("remote-core-incompatible", directDependencies.get(4).getStatus());
assertTrue(directDependencies.get(4).getStatusMessage().matches("Incompatible with provided version [^\\s]+"));
assertTrue(dependenciesPane.getBackwardDependencies().isEmpty());
// Follow the link to a dependency.
directDependencies.get(0).getLink().click();
adminPage = new ExtensionAdministrationPage();
extensionPane = adminPage.getSearchResults().getExtension(0);
assertEquals(dependency.getName(), extensionPane.getName());
assertEquals(dependencyId.getVersion().getValue(), extensionPane.getVersion());
assertEquals(dependency.getSummary(), extensionPane.getSummary());
// Check that we are still in the administration.
assertTrue(new AdministrationPage().hasSection("XWiki.Extensions"));
}
use of org.xwiki.extension.ExtensionId in project xwiki-platform by xwiki.
the class ExtensionIT method testInstallScriptService.
/**
* Tests if a Java component script service is properly installed.
*/
@Test
public void testInstallScriptService() throws Exception {
// Make sure the script service is not available before the extension is installed.
ViewPage viewPage = getUtil().createPage(getTestClassName(), getTestMethodName(), "{{velocity}}$services.greeter.greet('world') " + "$services.greeter.greet('XWiki', 'default'){{/velocity}}", "");
assertFalse(viewPage.getContent().contains("Hello world! Hello XWiki!"));
// Setup the extension.
ExtensionId extensionId = new ExtensionId("scriptServiceJarExtension", "4.2-milestone-1");
TestExtension extension = getRepositoryTestUtils().getTestExtension(extensionId, "jar");
getRepositoryTestUtils().addExtension(extension);
// Search the extension and install it.
ExtensionAdministrationPage adminPage = ExtensionAdministrationPage.gotoPage();
ExtensionPane extensionPane = adminPage.getSearchBar().clickAdvancedSearch().search(extensionId).getExtension(0);
extensionPane.install().confirm();
// Check the result.
assertEquals("Hello world! Hello XWiki!", getUtil().gotoPage(getTestClassName(), getTestMethodName()).getContent());
}
use of org.xwiki.extension.ExtensionId in project xwiki-platform by xwiki.
the class ExtensionIT method testInstall.
/**
* Tests how an extension is installed.
*/
@Test
public void testInstall() throws Exception {
// Setup the extension and its dependencies.
ExtensionId extensionId = new ExtensionId("alice-xar-extension", "1.3");
TestExtension extension = getRepositoryTestUtils().getTestExtension(extensionId, "xar");
ExtensionId dependencyId = new ExtensionId("bob-xar-extension", "2.5-milestone-2");
getRepositoryTestUtils().addExtension(getRepositoryTestUtils().getTestExtension(dependencyId, "xar"));
extension.addDependency(new DefaultExtensionDependency(dependencyId.getId(), new DefaultVersionConstraint(dependencyId.getVersion().getValue())));
extension.addDependency(new DefaultExtensionDependency("org.xwiki.platform:xwiki-platform-sheet-api", new DefaultVersionConstraint("[3.2,)")));
getRepositoryTestUtils().addExtension(extension);
// Search the extension and install it.
ExtensionAdministrationPage adminPage = ExtensionAdministrationPage.gotoPage();
ExtensionPane extensionPane = adminPage.getSearchBar().clickAdvancedSearch().search(extensionId).getExtension(0);
extensionPane = extensionPane.install();
// Assert the install plan.
List<DependencyPane> installPlan = extensionPane.openProgressSection().getJobPlan();
assertEquals(2, installPlan.size());
assertEquals(dependencyId, installPlan.get(0).getId());
assertEquals(extensionId, installPlan.get(1).getId());
// Finish the install and assert the install log.
List<LogItemPane> log = extensionPane.confirm().openProgressSection().getJobLog();
int logSize = log.size();
assertTrue(logSize > 1);
assertEquals("info", log.get(0).getLevel());
assertEquals("Starting job of type [install] with identifier " + "[extension/action/alice-xar-extension/wiki:xwiki]", log.get(0).getMessage());
assertEquals("info", log.get(logSize - 1).getLevel());
assertEquals("Finished job of type [install] with identifier " + "[extension/action/alice-xar-extension/wiki:xwiki]", log.get(logSize - 1).getMessage());
// Test that both extensions are usable.
ViewPage viewPage = getUtil().createPage(getTestClassName(), getTestMethodName(), "{{alice/}}\n\n{{bob/}}", "");
String content = viewPage.getContent();
assertTrue(content.contains("Alice says hello!"));
assertTrue(content.contains("Bob says hi!"));
// Check the list of installed extensions.
adminPage = ExtensionAdministrationPage.gotoInstalledExtensions();
SearchResultsPane searchResults = adminPage.getSearchBar().search("bob");
assertEquals(1, searchResults.getDisplayedResultsCount());
extensionPane = searchResults.getExtension(0);
assertEquals("installed-dependency", extensionPane.getStatus());
assertEquals("Installed as dependency", extensionPane.getStatusMessage());
assertEquals(dependencyId, extensionPane.getId());
assertNotNull(extensionPane.getUninstallButton());
searchResults = new SimpleSearchPane().search("alice");
assertEquals(1, searchResults.getDisplayedResultsCount());
extensionPane = searchResults.getExtension(0);
assertEquals("installed", extensionPane.getStatus());
assertEquals("Installed", extensionPane.getStatusMessage());
assertEquals(extensionId, extensionPane.getId());
assertNotNull(extensionPane.getUninstallButton());
// Check if the progress log is persisted.
extensionPane = extensionPane.showDetails();
log = extensionPane.openProgressSection().getJobLog();
assertEquals(logSize, log.size());
assertEquals("info", log.get(0).getLevel());
assertEquals("Starting job of type [install] with identifier " + "[extension/action/alice-xar-extension/wiki:xwiki]", log.get(0).getMessage());
assertEquals("info", log.get(logSize - 1).getLevel());
assertEquals("Finished job of type [install] with identifier " + "[extension/action/alice-xar-extension/wiki:xwiki]", log.get(logSize - 1).getMessage());
// Check if the dependency is properly listed as installed.
List<DependencyPane> dependencies = extensionPane.openDependenciesSection().getDirectDependencies();
assertEquals(2, dependencies.size());
assertEquals(dependencyId, dependencies.get(0).getId());
assertEquals("installed-dependency", dependencies.get(0).getStatus());
assertEquals("Installed as dependency", dependencies.get(0).getStatusMessage());
// Check the backward dependency.
dependencies.get(0).getLink().click();
extensionPane = new ExtensionAdministrationPage().getSearchResults().getExtension(0);
dependencies = extensionPane.openDependenciesSection().getBackwardDependencies();
assertEquals(1, dependencies.size());
assertEquals(extensionId, dependencies.get(0).getId());
assertEquals("installed", dependencies.get(0).getStatus());
assertEquals("Installed", dependencies.get(0).getStatusMessage());
}
use of org.xwiki.extension.ExtensionId in project xwiki-platform by xwiki.
the class ExtensionIT method testShowDetails.
/**
* Tests the extension details (license, web site).
*/
@Test
public void testShowDetails() throws Exception {
// Setup the extension.
ExtensionId extensionId = new ExtensionId("alice-xar-extension", "1.3");
TestExtension extension = getRepositoryTestUtils().getTestExtension(extensionId, "xar");
extension.setName("Alice Wiki Macro");
extension.setSummary("A **useless** macro");
extension.addAuthor(new DefaultExtensionAuthor("Thomas", (String) null));
extension.addAuthor(new DefaultExtensionAuthor("Marius", (String) null));
extension.addFeature("alice-extension");
extension.addLicense(new ExtensionLicense("My own license", null));
extension.setWebsite("http://www.alice.com");
extension.setScm(new DefaultExtensionScm("https://github.com/xwiki-contrib/alice-xar-extension", new DefaultExtensionScmConnection("git", "git://github.com/xwiki-contrib/alice-xar-extension.git"), new DefaultExtensionScmConnection("git", "git:git@github.com:xwiki-contrib/alice-xar-extension.git")));
extension.setIssueManagement(new DefaultExtensionIssueManagement("jira", "https://jira.xwiki.org/browse/ALICE"));
getRepositoryTestUtils().addExtension(extension);
// Search the extension and assert the displayed information.
ExtensionAdministrationPage adminPage = ExtensionAdministrationPage.gotoPage();
ExtensionPane extensionPane = adminPage.getSearchBar().clickAdvancedSearch().search(extensionId).getExtension(0);
assertEquals("remote", extensionPane.getStatus());
assertNull(extensionPane.getStatusMessage());
assertEquals(extension.getName(), extensionPane.getName());
assertEquals(extensionId.getVersion().getValue(), extensionPane.getVersion());
List<WebElement> authors = extensionPane.getAuthors();
assertEquals(2, authors.size());
assertEquals("Thomas", authors.get(0).getText());
assertEquals("Marius", authors.get(1).getText());
assertEquals(extension.getSummary(), extensionPane.getSummary());
// Check the extension details.
ExtensionDescriptionPane descriptionPane = extensionPane.openDescriptionSection();
assertEquals(extension.getLicenses().iterator().next().getName(), descriptionPane.getLicense());
assertEquals(extension.getId().getId(), descriptionPane.getId());
assertEquals(extension.getFeatures().iterator().next(), descriptionPane.getFeatures().get(0));
assertEquals(extension.getType(), descriptionPane.getType());
WebElement webSiteLink = descriptionPane.getWebSite();
assertEquals(extension.getWebSite().substring("http://".length()), webSiteLink.getText());
assertEquals(extension.getWebSite() + '/', webSiteLink.getAttribute("href"));
// Install the extension to check the details that are specific to installed extensions.
Date beforeInstall = new Date();
descriptionPane = extensionPane.install().confirm().openDescriptionSection();
Date afterInstall = new Date();
List<String> namespaces = descriptionPane.getNamespaces();
assertEquals(1, namespaces.size());
String prefix = "Home, by superadmin on ";
assertTrue(namespaces.get(0).startsWith(prefix));
Date installDate = new SimpleDateFormat("yyyy/MM/dd HH:mm").parse(namespaces.get(0).substring(prefix.length()));
// Ignore the seconds as they are not displayed.
assertTrue(String.format("Install date [%s] should be after [%s].", installDate, beforeInstall), installDate.getTime() / 60000 >= beforeInstall.getTime() / 60000);
assertTrue(String.format("Install date [%s] should be before [%s].", installDate, afterInstall), installDate.before(afterInstall));
}
Aggregations