Search in sources :

Example 11 with ExtensionId

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!"));
}
Also used : LogItemPane(org.xwiki.extension.test.po.LogItemPane) ExtensionAdministrationPage(org.xwiki.extension.test.po.ExtensionAdministrationPage) DependencyPane(org.xwiki.extension.test.po.DependencyPane) TestExtension(org.xwiki.repository.test.TestExtension) ExtensionId(org.xwiki.extension.ExtensionId) ViewPage(org.xwiki.test.ui.po.ViewPage) ExtensionPane(org.xwiki.extension.test.po.ExtensionPane) Test(org.junit.Test)

Example 12 with ExtensionId

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"));
}
Also used : ExtensionAdministrationPage(org.xwiki.extension.test.po.ExtensionAdministrationPage) AdministrationPage(org.xwiki.administration.test.po.AdministrationPage) ExtensionAdministrationPage(org.xwiki.extension.test.po.ExtensionAdministrationPage) DefaultVersionConstraint(org.xwiki.extension.version.internal.DefaultVersionConstraint) ExtensionDependenciesPane(org.xwiki.extension.test.po.ExtensionDependenciesPane) DependencyPane(org.xwiki.extension.test.po.DependencyPane) ExtensionId(org.xwiki.extension.ExtensionId) TestExtension(org.xwiki.repository.test.TestExtension) ExtensionPane(org.xwiki.extension.test.po.ExtensionPane) DefaultExtensionDependency(org.xwiki.extension.DefaultExtensionDependency) Test(org.junit.Test)

Example 13 with ExtensionId

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());
}
Also used : ExtensionAdministrationPage(org.xwiki.extension.test.po.ExtensionAdministrationPage) ExtensionId(org.xwiki.extension.ExtensionId) TestExtension(org.xwiki.repository.test.TestExtension) ViewPage(org.xwiki.test.ui.po.ViewPage) ExtensionPane(org.xwiki.extension.test.po.ExtensionPane) Test(org.junit.Test)

Example 14 with ExtensionId

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());
}
Also used : ExtensionAdministrationPage(org.xwiki.extension.test.po.ExtensionAdministrationPage) DependencyPane(org.xwiki.extension.test.po.DependencyPane) ExtensionId(org.xwiki.extension.ExtensionId) TestExtension(org.xwiki.repository.test.TestExtension) ViewPage(org.xwiki.test.ui.po.ViewPage) ExtensionPane(org.xwiki.extension.test.po.ExtensionPane) SimpleSearchPane(org.xwiki.extension.test.po.SimpleSearchPane) DefaultVersionConstraint(org.xwiki.extension.version.internal.DefaultVersionConstraint) LogItemPane(org.xwiki.extension.test.po.LogItemPane) DefaultVersionConstraint(org.xwiki.extension.version.internal.DefaultVersionConstraint) SearchResultsPane(org.xwiki.extension.test.po.SearchResultsPane) DefaultExtensionDependency(org.xwiki.extension.DefaultExtensionDependency) Test(org.junit.Test)

Example 15 with ExtensionId

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));
}
Also used : ExtensionLicense(org.xwiki.extension.ExtensionLicense) DefaultExtensionScmConnection(org.xwiki.extension.DefaultExtensionScmConnection) ExtensionAdministrationPage(org.xwiki.extension.test.po.ExtensionAdministrationPage) DefaultExtensionIssueManagement(org.xwiki.extension.DefaultExtensionIssueManagement) ExtensionId(org.xwiki.extension.ExtensionId) TestExtension(org.xwiki.repository.test.TestExtension) ExtensionDescriptionPane(org.xwiki.extension.test.po.ExtensionDescriptionPane) ExtensionPane(org.xwiki.extension.test.po.ExtensionPane) WebElement(org.openqa.selenium.WebElement) Date(java.util.Date) DefaultExtensionAuthor(org.xwiki.extension.DefaultExtensionAuthor) SimpleDateFormat(java.text.SimpleDateFormat) DefaultExtensionScm(org.xwiki.extension.DefaultExtensionScm) Test(org.junit.Test)

Aggregations

ExtensionId (org.xwiki.extension.ExtensionId)67 Test (org.junit.Test)37 InstalledExtension (org.xwiki.extension.InstalledExtension)13 ExtensionAdministrationPage (org.xwiki.extension.test.po.ExtensionAdministrationPage)11 TestExtension (org.xwiki.repository.test.TestExtension)11 ExtensionPane (org.xwiki.extension.test.po.ExtensionPane)9 DocumentReference (org.xwiki.model.reference.DocumentReference)9 InstalledExtensionRepository (org.xwiki.extension.repository.InstalledExtensionRepository)8 Extension (org.xwiki.extension.Extension)7 InstallRequest (org.xwiki.extension.job.InstallRequest)6 DefaultVersionConstraint (org.xwiki.extension.version.internal.DefaultVersionConstraint)6 WikiDescriptorManager (org.xwiki.wiki.descriptor.WikiDescriptorManager)6 IOException (java.io.IOException)5 DefaultExtensionDependency (org.xwiki.extension.DefaultExtensionDependency)5 SearchResultsPane (org.xwiki.extension.test.po.SearchResultsPane)5 ViewPage (org.xwiki.test.ui.po.ViewPage)5 XWikiContext (com.xpn.xwiki.XWikiContext)4 ResolveException (org.xwiki.extension.ResolveException)4 DependencyPane (org.xwiki.extension.test.po.DependencyPane)4 LogItemPane (org.xwiki.extension.test.po.LogItemPane)4