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().clickAddExtensionsSection();
ExtensionPane extensionPane =
adminPage.getSearchBar().clickAdvancedSearch().search(extensionId).getExtension(0);
extensionPane = extensionPane.install();
// Assert the install plan.
List<DependencyPane> installPlan = extensionPane.openProgressSection().getJobPlan();
Assert.assertEquals(2, installPlan.size());
Assert.assertEquals(dependencyId, installPlan.get(0).getId());
Assert.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();
Assert.assertTrue(logSize > 1);
Assert.assertEquals("info", log.get(0).getLevel());
Assert.assertEquals("Starting job of type [install] with identifier "
+ "[extension/action/alice-xar-extension/wiki:xwiki]", log.get(0).getMessage());
Assert.assertEquals("info", log.get(logSize - 1).getLevel());
Assert.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();
Assert.assertTrue(content.contains("Alice says hello!"));
Assert.assertTrue(content.contains("Bob says hi!"));
// Check the list of installed extensions.
adminPage = ExtensionAdministrationPage.gotoPage().clickInstalledExtensionsSection();
SearchResultsPane searchResults = adminPage.getSearchBar().search("bob");
Assert.assertEquals(1, searchResults.getDisplayedResultsCount());
extensionPane = searchResults.getExtension(0);
Assert.assertEquals("installed", extensionPane.getStatus());
Assert.assertEquals("Installed", extensionPane.getStatusMessage());
Assert.assertEquals(dependencyId, extensionPane.getId());
Assert.assertNotNull(extensionPane.getUninstallButton());
searchResults = new SimpleSearchPane().search("alice");
Assert.assertEquals(1, searchResults.getDisplayedResultsCount());
extensionPane = searchResults.getExtension(0);
Assert.assertEquals("installed", extensionPane.getStatus());
Assert.assertEquals("Installed", extensionPane.getStatusMessage());
Assert.assertEquals(extensionId, extensionPane.getId());
Assert.assertNotNull(extensionPane.getUninstallButton());
// Check if the progress log is persisted.
extensionPane = extensionPane.showDetails();
log = extensionPane.openProgressSection().getJobLog();
Assert.assertEquals(logSize, log.size());
Assert.assertEquals("info", log.get(0).getLevel());
Assert.assertEquals("Starting job of type [install] with identifier "
+ "[extension/action/alice-xar-extension/wiki:xwiki]", log.get(0).getMessage());
Assert.assertEquals("info", log.get(logSize - 1).getLevel());
Assert.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();
Assert.assertEquals(2, dependencies.size());
Assert.assertEquals(dependencyId, dependencies.get(0).getId());
Assert.assertEquals("installed", dependencies.get(0).getStatus());
Assert.assertEquals("Installed", dependencies.get(0).getStatusMessage());
// Check the backward dependency.
dependencies.get(0).getLink().click();
extensionPane = new ExtensionAdministrationPage().getSearchResults().getExtension(0);
dependencies = extensionPane.openDependenciesSection().getBackwardDependencies();
Assert.assertEquals(1, dependencies.size());
Assert.assertEquals(extensionId, dependencies.get(0).getId());
Assert.assertEquals("installed", dependencies.get(0).getStatus());
Assert.assertEquals("Installed", dependencies.get(0).getStatusMessage());