@Test public void testInstallOnWiki() throws Throwable { XWikiDocument existingDocument = new XWikiDocument(new DocumentReference("wiki", "space", "page")); BaseObject object = new BaseObject(); object.setXClassReference(new DocumentReference("wiki", "space", "class")); existingDocument.addXObject(object); existingDocument.setCreatorReference(new DocumentReference("wiki", "space", "existingcreator")); this.oldcore.getSpyXWiki().saveDocument(existingDocument, "", true, getXWikiContext()); MandatoryDocumentInitializer mandatoryInitializer = this.componentManager.registerMockComponent(MandatoryDocumentInitializer.class, "space.mandatory"); when(mandatoryInitializer.updateDocument(any(XWikiDocument.class))).then(new Answer<Boolean>() { @Override public Boolean answer(InvocationOnMock invocation) throws Throwable { invocation.<XWikiDocument>getArgument(0).setTitle("mandatory title"); return true; } }); XWikiDocument mandatoryDocument = new XWikiDocument(new DocumentReference("wiki", "space", "mandatory")); mandatoryDocument.setCreatorReference(new DocumentReference("wiki", "space", "existingcreator")); mandatoryDocument.setSyntax(Syntax.PLAIN_1_0); mandatoryDocument.setContent("modified content"); mandatoryDocument.setTitle("mandatory title"); mandatoryDocument.setDefaultLocale(Locale.ENGLISH); this.oldcore.getSpyXWiki().saveDocument(mandatoryDocument, "", true, getXWikiContext()); MandatoryDocumentInitializer mandatoryconfigurationInitializer = this.componentManager .registerMockComponent(MandatoryDocumentInitializer.class, "space.mandatoryconfiguration"); when(mandatoryconfigurationInitializer.updateDocument(any(XWikiDocument.class))).thenReturn(true); XWikiDocument mandatoryconfigurationDocument = new XWikiDocument(new DocumentReference("wiki", "space", "mandatoryconfiguration")); mandatoryconfigurationDocument.setCreatorReference(new DocumentReference("wiki", "space", "existingcreator")); mandatoryconfigurationDocument.setSyntax(Syntax.PLAIN_1_0); this.oldcore.getSpyXWiki().saveDocument(mandatoryconfigurationDocument, "", true, getXWikiContext()); XarInstalledExtension xarInstalledExtension = install(this.localXarExtensiontId1, "wiki", this.contextUser); verifyHasAdminRight(3); XWikiDocument page = this.oldcore.getSpyXWiki().getDocument(existingDocument.getDocumentReference(), getXWikiContext()); Assert.assertFalse("Document wiki:space.page has not been saved in the database", page.isNew()); Assert.assertNull(page.getXObject(object.getXClassReference())); Assert.assertEquals("Wrong content", "content", page.getContent()); Assert.assertEquals("Wrong creator", new DocumentReference("wiki", "space", "existingcreator"), page.getCreatorReference()); Assert.assertEquals("Wrong author", this.contextUser, page.getAuthorReference()); Assert.assertEquals("Wrong content author", this.contextUser, page.getContentAuthorReference()); Assert.assertEquals("Wrong version", "2.1", page.getVersion()); Assert.assertEquals("Wrong version", Locale.ROOT, page.getLocale()); Assert.assertFalse("Document is hidden", page.isHidden()); Assert.assertFalse("Document is minor edit", page.isMinorEdit()); BaseClass baseClass = page.getXClass(); Assert.assertNotNull(baseClass.getField("property")); Assert.assertEquals("property", baseClass.getField("property").getName()); Assert.assertSame(NumberClass.class, baseClass.getField("property").getClass()); XWikiDocument pagewithattachment = this.oldcore.getSpyXWiki() .getDocument(new DocumentReference("wiki", "space", "pagewithattachment"), getXWikiContext()); Assert.assertFalse(pagewithattachment.isNew()); Assert.assertEquals("Wrong version", "1.1", pagewithattachment.getVersion()); Assert.assertEquals("Wrong creator", this.contextUser, pagewithattachment.getCreatorReference()); Assert.assertEquals("Wrong author", this.contextUser, pagewithattachment.getAuthorReference()); Assert.assertEquals("Wrong content author", this.contextUser, pagewithattachment.getContentAuthorReference()); XWikiAttachment attachment = pagewithattachment.getAttachment("attachment.txt"); Assert.assertNotNull(attachment); Assert.assertEquals("attachment.txt", attachment.getFilename()); Assert.assertEquals(18, attachment.getContentLongSize(getXWikiContext())); Assert.assertEquals("attachment content", IOUtils.toString(attachment.getContentInputStream(getXWikiContext()), StandardCharsets.UTF_8)); Assert.assertEquals(this.contextUser, attachment.getAuthorReference()); XWikiDocument page1 = this.oldcore.getSpyXWiki().getDocument(new DocumentReference("wiki", "space1", "page1"), getXWikiContext()); Assert.assertFalse("Document wiki:space1.page1 has not been saved in the database", page1.isNew()); assertEquals(Arrays.asList(xarInstalledExtension), this.installedExtensionRepository.getXarInstalledExtensions(page1.getDocumentReference())); assertEquals(Arrays.asList(xarInstalledExtension), this.installedExtensionRepository.getXarInstalledExtensions(page1.getDocumentReferenceWithLocale())); assertEquals(0, this.installedExtensionRepository .getXarInstalledExtensions(new DocumentReference("wiki", "space1", "page1", Locale.ENGLISH)).size()); assertEquals(0, this.installedExtensionRepository .getXarInstalledExtensions(new DocumentReference("otherwiki", "space1", "page1")).size()); DocumentReference translatedReference = new DocumentReference("wiki", "translated", "translated"); XWikiDocument defaultTranslated = this.oldcore.getSpyXWiki().getDocument(translatedReference, getXWikiContext()); Assert.assertNotNull("Document wiki:translated.translated has not been saved in the database", defaultTranslated); Assert.assertFalse("Document wiki:translated.translated has not been saved in the database", defaultTranslated.isNew()); Assert.assertEquals("Wrong content", "default content", defaultTranslated.getContent()); Assert.assertEquals("Wrong creator", this.contextUser, defaultTranslated.getCreatorReference()); Assert.assertEquals("Wrong author", this.contextUser, defaultTranslated.getAuthorReference()); Assert.assertEquals("Wrong content author", this.contextUser, defaultTranslated.getContentAuthorReference()); Assert.assertEquals("Wrong version", "1.1", defaultTranslated.getVersion()); assertEquals(Arrays.asList(xarInstalledExtension), this.installedExtensionRepository .getXarInstalledExtensions(defaultTranslated.getDocumentReferenceWithLocale())); XWikiDocument translated = this.oldcore.getDocuments().get(new DocumentReference(translatedReference, new Locale("tr"))); Assert.assertNotNull("Document wiki:translated.translated in langauge tr has not been saved in the database", translated); Assert.assertFalse("Document wiki:translated.translated in langauge tr has not been saved in the database", translated.isNew()); Assert.assertEquals("Wrong content", "tr content", translated.getContent()); Assert.assertEquals("Wrong creator", this.contextUser, translated.getCreatorReference()); Assert.assertEquals("Wrong author", this.contextUser, translated.getAuthorReference()); Assert.assertEquals("Wrong content author", this.contextUser, translated.getContentAuthorReference()); Assert.assertEquals("Wrong version", "1.1", translated.getVersion()); assertEquals(Arrays.asList(xarInstalledExtension), this.installedExtensionRepository.getXarInstalledExtensions(translated.getDocumentReferenceWithLocale())); XWikiDocument translated2 = this.oldcore.getDocuments().get(new DocumentReference(translatedReference, new Locale("fr"))); Assert.assertNotNull("Document wiki:translated.translated in language fr has not been saved in the database", translated2); Assert.assertFalse("Document wiki:translated.translated in langauge fr has not been saved in the database", translated2.isNew()); Assert.assertEquals("Wrong content", "fr content", translated2.getContent()); Assert.assertEquals("Wrong creator", this.contextUser, translated2.getCreatorReference()); Assert.assertEquals("Wrong author", this.contextUser, translated2.getAuthorReference()); Assert.assertEquals("Wrong content author", this.contextUser, translated2.getContentAuthorReference()); Assert.assertEquals("Wrong version", "1.1", translated2.getVersion()); assertEquals(Arrays.asList(xarInstalledExtension), this.installedExtensionRepository.getXarInstalledExtensions(translated2.getDocumentReferenceWithLocale())); XWikiDocument hiddenpage = this.oldcore.getSpyXWiki() .getDocument(new DocumentReference("wiki", "space", "hiddenpage"), getXWikiContext()); Assert.assertFalse("Document wiki:space.hiddenpage has not been saved in the database", hiddenpage.isNew()); assertTrue("Document is not hidden", hiddenpage.isHidden()); XWikiDocument mandatorypage = this.oldcore.getSpyXWiki() .getDocument(new DocumentReference("wiki", "space", "mandatory"), getXWikiContext()); Assert.assertEquals("Document wiki:space.mandatory has been overwritten", "1.1", mandatorypage.getVersion()); Assert.assertEquals("mandatory title", mandatorypage.getTitle()); XWikiDocument mandatoryconfigurationpage = this.oldcore.getSpyXWiki() .getDocument(new DocumentReference("wiki", "space", "mandatoryconfiguration"), getXWikiContext()); assertEquals("Document wiki:space.mandatoryconfiguration has not been overwritten", "2.1", mandatoryconfigurationpage.getVersion()); assertTrue( this.installedExtensionRepository.isAllowed(mandatoryconfigurationpage.getDocumentReference(), Right.EDIT)); assertFalse(this.installedExtensionRepository.isAllowed(mandatoryconfigurationpage.getDocumentReference(), Right.DELETE)); XWikiDocument movedpage = this.oldcore.getSpyXWiki() .getDocument(new DocumentReference("wiki", "space", "movedpage"), getXWikiContext()); Assert.assertFalse("Document wiki:space.movedpage has been removed", movedpage.isNew()); Assert.assertEquals("content 1.0", movedpage.getContent()); XWikiDocument dependencypage = this.oldcore.getSpyXWiki() .getDocument(new DocumentReference("wiki", "space", "dependencypage"), getXWikiContext()); Assert.assertFalse("Document wiki:space.dependencypage has been removed", dependencypage.isNew()); Assert.assertEquals("otherdependency 1.0", dependencypage.getContent()); }
@Override public void install(LocalExtension localExtension, String namespace, Request request) throws InstallException { if (!request.isRemote()) { String wiki; try { wiki = XarHandlerUtils.getWikiFromNamespace(namespace); } catch (UnsupportedNamespaceException e) { throw new InstallException("Failed to extract wiki id from namespace", e); } installInternal(localExtension, wiki, request); } }
XarExtensionHandler extends AbstractExtensionHandler { @Override public void install(LocalExtension localExtension, String namespace, Request request) throws InstallException { if (!request.isRemote()) { String wiki; try { wiki = XarHandlerUtils.getWikiFromNamespace(namespace); } catch (UnsupportedNamespaceException e) { throw new InstallException("Failed to extract wiki id from namespace", e); } installInternal(localExtension, wiki, request); } } }
XarExtensionHandler extends AbstractExtensionHandler { @Override public void install(LocalExtension localExtension, String namespace, Request request) throws InstallException { if (!request.isRemote()) { String wiki; try { wiki = XarHandlerUtils.getWikiFromNamespace(namespace); } catch (UnsupportedNamespaceException e) { throw new InstallException("Failed to extract wiki id from namespace", e); } installInternal(localExtension, wiki, request); } }  }
XarExtensionHandler extends AbstractExtensionHandler { @Override public void install(LocalExtension localExtension, String namespace, Request request) throws InstallException { if (!request.isRemote()) { String wiki; try { wiki = XarHandlerUtils.getWikiFromNamespace(namespace); } catch (UnsupportedNamespaceException e) { throw new InstallException("Failed to extract wiki id from namespace", e); } installInternal(localExtension, wiki, request); } }  @Override void install(LocalExtension localExtension, String namespace, Request request); @Override void upgrade(Collection<InstalledExtension> previousLocalExtensions, LocalExtension newLocalExtension,
        String namespace, Request request); @Override void uninstall(InstalledExtension installedExtension, String namespace, Request request); }
XarExtensionHandler extends AbstractExtensionHandler { @Override public void install(LocalExtension localExtension, String namespace, Request request) throws InstallException { if (!request.isRemote()) { String wiki; try { wiki = XarHandlerUtils.getWikiFromNamespace(namespace); } catch (UnsupportedNamespaceException e) { throw new InstallException("Failed to extract wiki id from namespace", e); } installInternal(localExtension, wiki, request); } }  @Override void install(LocalExtension localExtension, String namespace, Request request); @Override void upgrade(Collection<InstalledExtension> previousLocalExtensions, LocalExtension newLocalExtension,
        String namespace, Request request); @Override void uninstall(InstalledExtension installedExtension, String namespace, Request request); static final String TYPE; }