diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java index 491aba1d4b5112e6d2f67376558b6c36d382c3d8..b144de31737328c73f84d312382c853ccaef4fe6 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java +++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSXStream.java @@ -70,6 +70,7 @@ public class VFSXStream { mystream.omitField(RevisionFileImpl.class, "file"); mystream.omitField(VFSMetadataImpl.class, "originFile"); mystream.omitField(VFSMetadataImpl.class, "metaFile"); + mystream.omitField(VFSMetadataImpl.class, "lockedByIdentKey"); mystream.aliasAttribute(VFSMetadataImpl.class, "cannotGenerateThumbnails", "cannotGenerateThumbnail"); mystream.aliasAttribute(VFSMetadataImpl.class, "author", "authorIdentKey"); mystream.aliasAttribute(VFSMetadataImpl.class, "licenseType", "licenseTypeKey"); diff --git a/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java b/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java index c724f0e95cd873589278745d1d5e9b5a698b49e3..6ce8c325c56f843ad4905a81baf9e31251dbd3fd 100644 --- a/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java +++ b/src/test/java/org/olat/core/commons/services/vfs/manager/VFSXStreamTest.java @@ -50,7 +50,19 @@ public class VFSXStreamTest extends OlatTestCase { log.error("", e); throw e; } - + Assert.assertNotNull(versions); + } + + @Test + public void readOldVersions_locked() throws IOException { + VersionsFileImpl versions = null; + try(InputStream in = VFSXStreamTest.class.getResourceAsStream("docx.versions.docx.xml")) { + versions = (VersionsFileImpl)VFSXStream.read(in); + + } catch(IOException | OLATRuntimeException e) { + log.error("", e); + throw e; + } Assert.assertNotNull(versions); } diff --git a/src/test/java/org/olat/core/commons/services/vfs/manager/docx.versions.docx.xml b/src/test/java/org/olat/core/commons/services/vfs/manager/docx.versions.docx.xml new file mode 100644 index 0000000000000000000000000000000000000000..a8d7e80b72604405c84de3323a71916869c63cc1 --- /dev/null +++ b/src/test/java/org/olat/core/commons/services/vfs/manager/docx.versions.docx.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<versions> + <versioned>true</versioned> + <author>openolat</author> + <creator>openolat</creator> + <revisionNr>2</revisionNr> + <revisions> + <revision> + <author>openolat</author> + <name>17C.docx</name> + <uuid>2a97afdc-c069-4946-b056-3ebabbfc1342</uuid> + <lastModified>1558539284000</lastModified> + <revisionNr>1</revisionNr> + <filename>8f201ef7-996e-4ba5-aa39-6091e52d905e_17C.docx</filename> + <metadata class="metadata"> + <uuid>7a34d2ee982845f4930ffa5524b140b8</uuid> + <authorIdentKey>455737485</authorIdentKey> + <lockedByIdentKey>455737485</lockedByIdentKey> + <comment></comment> + <lockedDate>2019-05-22 15:35:56.817 UTC</lockedDate> + <downloadCount>1</downloadCount> + <locked>true</locked> + <originFile>/this/bcroot/course/95832818319926/foldernodes/88120182050795/2. Lehrjahr/Probe-VA/Schlussprodukt/17C.docx</originFile> + <metaFile>/this/bcroot/.meta/course/95832818319926/foldernodes/88120182050795/2. Lehrjahr/Probe-VA/Schlussprodukt/17C.docx.xml</metaFile> + <cannotGenerateThumbnail>false</cannotGenerateThumbnail> + <thumbnails/> + </metadata> + </revision> + </revisions> +</versions> \ No newline at end of file diff --git a/src/test/java/org/olat/selenium/PortfolioV2Test.java b/src/test/java/org/olat/selenium/PortfolioV2Test.java index 6dafc706657b8df597afd42121ca1cb928f0828b..56d6993018660096d6c21533e0ad1fac23353a54 100644 --- a/src/test/java/org/olat/selenium/PortfolioV2Test.java +++ b/src/test/java/org/olat/selenium/PortfolioV2Test.java @@ -31,7 +31,6 @@ import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.junit.Assert; -import org.junit.Assume; import org.junit.Test; import org.junit.runner.RunWith; import org.olat.selenium.page.LoginPage; @@ -62,7 +61,6 @@ import org.olat.test.JunitTestHelper; import org.olat.test.rest.UserRestClient; import org.olat.user.restapi.UserVO; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.firefox.FirefoxDriver; import com.dumbster.smtp.SmtpMessage; @@ -640,7 +638,6 @@ public class PortfolioV2Test extends Deployments { @RunAsClient public void binderAssessment(@Drone @User WebDriver reiBrowser) throws IOException, URISyntaxException { - Assume.assumeFalse(reiBrowser instanceof FirefoxDriver); UserVO author = new UserRestClient(deploymentUrl).createAuthor(); UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("rei"); diff --git a/src/test/java/org/olat/selenium/page/core/ContactPage.java b/src/test/java/org/olat/selenium/page/core/ContactPage.java index d3e87f6e67e82afc75621f7d5101a6eb87eaea94..be03b12295ad631b3e7d5075016504df02e3f223 100644 --- a/src/test/java/org/olat/selenium/page/core/ContactPage.java +++ b/src/test/java/org/olat/selenium/page/core/ContactPage.java @@ -26,7 +26,6 @@ import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.openqa.selenium.firefox.FirefoxDriver; /** * @@ -54,10 +53,10 @@ public class ContactPage { public ContactPage setContent(String subject, String body) { By subjectBy = By.cssSelector("div.o_sel_contact_subject input[type='text']"); OOGraphene.waitElement(subjectBy, browser); - browser.findElement(subjectBy).sendKeys(subject); + OOGraphene.waitTinymce(browser); + browser.findElement(subjectBy).sendKeys(subject); String containerCssSelector = "div.o_sel_contact_body"; - OOGraphene.waitTinymce(browser); OOGraphene.tinymce(body, containerCssSelector, browser); return this; } @@ -65,13 +64,11 @@ public class ContactPage { public ContactPage send() { By buttonsBy = By.xpath("//div[contains(@class,'o_sel_contact_buttons')]"); OOGraphene.scrollTo(buttonsBy, browser); - if(browser instanceof FirefoxDriver) { - OOGraphene.waitingALittleLonger(); - } + By sendBy = By.cssSelector("fieldset.o_sel_contact_form button.btn-primary"); browser.findElement(sendBy).click(); By disabledBy = By.cssSelector("fieldset.o_sel_contact_form div.o_sel_contact_body div.o_disabled"); - OOGraphene.waitElementSlowly(disabledBy, 10, browser); + OOGraphene.waitElement(disabledBy, browser); OOGraphene.moveTop(browser); OOGraphene.waitAndCloseBlueMessageWindow(browser); diff --git a/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java b/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java index 5279b7b15f184a3f6dc64552599dc1fc4776fd91..1626fc3374ab84fa1970f1163ade7d23f46d6c5a 100644 --- a/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java +++ b/src/test/java/org/olat/selenium/page/course/AssessmentToolPage.java @@ -21,9 +21,7 @@ package org.olat.selenium.page.course; import java.util.List; -import org.apache.logging.log4j.Logger; import org.junit.Assert; -import org.olat.core.logging.Tracing; import org.olat.selenium.page.graphene.OOGraphene; import org.olat.user.restapi.UserVO; import org.openqa.selenium.By; @@ -37,8 +35,7 @@ import org.openqa.selenium.WebElement; * */ public class AssessmentToolPage { - private static final Logger log = Tracing.createLoggerFor(AssessmentToolPage.class); - + private final WebDriver browser; public AssessmentToolPage(WebDriver browser) { diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java index 05a615b6572fc7bf87683b0ee6f2eca24c7a743b..12a30e22ba82bcb6c3f1c7885f14704867a99fdb 100644 --- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java +++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java @@ -73,13 +73,13 @@ public class CourseEditorPageFragment { } public static CourseEditorPageFragment getEditor(WebDriver browser) { - OOGraphene.waitElement(editorBy, 5, browser); + OOGraphene.waitElement(editorBy, browser); OOGraphene.closeBlueMessageWindow(browser); return new CourseEditorPageFragment(browser); } public CourseEditorPageFragment assertOnEditor() { - OOGraphene.waitElement(editorBy, 5, browser); + OOGraphene.waitElement(editorBy, browser); List<WebElement> editorEls = browser.findElements(editorBy); Assert.assertFalse(editorEls.isEmpty()); Assert.assertTrue(editorEls.get(0).isDisplayed()); @@ -88,7 +88,7 @@ public class CourseEditorPageFragment { public CourseEditorPageFragment assertOnWarning() { By warningBy = By.cssSelector("div.modal-dialog div.alert.alert-warning"); - OOGraphene.waitElement(warningBy, 2, browser); + OOGraphene.waitElement(warningBy, browser); List<WebElement> warningEls = browser.findElements(warningBy); Assert.assertFalse(warningEls.isEmpty()); OOGraphene.closeModalDialogWindow(browser); diff --git a/src/test/java/org/olat/selenium/page/repository/ScormPage.java b/src/test/java/org/olat/selenium/page/repository/ScormPage.java index 64cb93599299499ca92e6af4acfa25f59d43858d..91b2c25a4d6d01ee7c348546765815fd05a3d4d0 100644 --- a/src/test/java/org/olat/selenium/page/repository/ScormPage.java +++ b/src/test/java/org/olat/selenium/page/repository/ScormPage.java @@ -21,7 +21,6 @@ package org.olat.selenium.page.repository; import java.util.List; -import org.junit.Assert; import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; @@ -43,12 +42,13 @@ public class ScormPage { } public static ScormPage getScormPage(WebDriver browser) { - WebElement main = browser.findElement(By.id("o_main_wrapper")); - Assert.assertTrue(main.isDisplayed()); + By mainBy = By.id("o_main_wrapper"); + OOGraphene.waitElement(mainBy, browser); return new ScormPage(browser); } public ScormPage start() { + assertOnStart(); By startBy = By.cssSelector("button.o_sel_start_scorm"); browser.findElement(startBy).click(); OOGraphene.waitBusy(browser); diff --git a/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java b/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java index b5779aae87eb9ed6b860d10ccb66a3c1ac0682f7..4a370be2023fdfb7a3b76055ba0d14ebb6dc32d5 100644 --- a/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java +++ b/src/test/java/org/olat/selenium/page/user/EfficiencyStatementPage.java @@ -70,18 +70,11 @@ public class EfficiencyStatementPage { * @return */ public EfficiencyStatementPage assertOnCertificateAndStatements(String courseTitle) { - WebElement rowToAssert = getStatementRow(courseTitle); - boolean found = false; - for(int i=0; i<20; i++) { - By certificateDownloadBy = By.cssSelector("a i.o_icon.o_filetype_pdf"); - List<WebElement> certificateDownloadEls = rowToAssert.findElements(certificateDownloadBy); - if(certificateDownloadEls.size() > 0) { - found = true; - break; - } - OOGraphene.waitingALittleLonger(); + if(courseTitle.length() > 25) { + courseTitle = courseTitle.substring(0, 25); } - Assert.assertTrue(found); + By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td//a/i[contains(@class,'o_filetype_pdf')]"); + OOGraphene.waitElementSlowly(courseCertificateBy, 30, browser); return this; } @@ -94,15 +87,12 @@ public class EfficiencyStatementPage { * @return */ public EfficiencyStatementPage assertOnStatement(String courseTitle, boolean passed) { - WebElement rowToAssert = getStatementRow(courseTitle); - Assert.assertNotNull(rowToAssert); - if(passed) { - By passedBy = By.cssSelector(".o_state.o_passed"); - browser.findElement(passedBy); - } else { - By failedBy = By.cssSelector(".o_state.o_failed"); - browser.findElement(failedBy); + if(courseTitle.length() > 25) { + courseTitle = courseTitle.substring(0, 25); } + String passedCss = passed ? "o_passed" : "o_failed"; + By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td/span[contains(@class,'o_state')][contains(@class,'" + passedCss + "')]"); + OOGraphene.waitElement(courseCertificateBy, browser); return this; } @@ -140,31 +130,14 @@ public class EfficiencyStatementPage { * @return */ public EfficiencyStatementPage selectStatement(String courseTitle) { - WebElement rowToAssert = getStatementRow(courseTitle); - By courseCertificateBy = By.xpath("//td//a[contains(@href,'cmd.show')]"); - rowToAssert.findElement(courseCertificateBy).click(); - OOGraphene.waitBusy(browser); - return this; - } - - private WebElement getStatementRow(String courseTitle) { - By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr"); - - WebElement rowToAssert = null; - List<WebElement> rowsEl = browser.findElements(courseCertificateBy); - a_a: - for(WebElement rowEl:rowsEl) { - for(WebElement col:rowEl.findElements(By.tagName("td"))) { - String text = col.getText(); - if(courseTitle.contains(text) || text.contains(courseTitle)) { - rowToAssert = rowEl; - break a_a; - } - } + if(courseTitle.length() > 25) { + courseTitle = courseTitle.substring(0, 25); } - - Assert.assertNotNull(rowToAssert); - return rowToAssert; + By courseCertificateBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td//a[contains(@href,'cmd.show')]"); + OOGraphene.waitElement(courseCertificateBy, browser); + browser.findElement(courseCertificateBy).click(); + OOGraphene.waitBusy(browser); + return this; } public EfficiencyStatementPage selectStatementSegment() { @@ -177,8 +150,7 @@ public class EfficiencyStatementPage { public MediaPage addAsMediaInList(String courseTitle) { if(courseTitle.length() > 25) { courseTitle = courseTitle.substring(0, 25); - }// - + } By collectBy = By.xpath("//div[contains(@class,'o_sel_certificates_table')]//table//tr[td[contains(text(),'" + courseTitle + "')]]/td/a[contains(@href,'cmd.MEDIA')]"); OOGraphene.waitElement(collectBy, browser); OOGraphene.scrollTo(collectBy, browser);