diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java index e80af84102a80eb60b7c1f7564833a197d1b2562..bb286bd9be4fc04df37d6191c5c32110e2f1faec 100644 --- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java +++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java @@ -19,16 +19,13 @@ */ package org.olat.core.util.mail; -import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Locale; import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; -import org.olat.core.id.Identity; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; @@ -37,13 +34,11 @@ import org.olat.core.id.context.DefaultContextEntryControllerCreator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; -import org.olat.core.util.mail.model.DBMailLight; import org.olat.core.util.mail.ui.MailContextResolver; import org.olat.group.BusinessGroupService; import org.olat.group.BusinessGroupShort; import org.olat.home.HomeSite; import org.olat.repository.RepositoryManager; -import org.olat.user.UserDataDeletable; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -58,12 +53,10 @@ import org.springframework.stereotype.Service; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ @Service("mailBoxExtension") -public class MailBoxExtension implements MailContextResolver, UserDataDeletable, InitializingBean { +public class MailBoxExtension implements MailContextResolver, InitializingBean { private static final OLog log = Tracing.createLoggerFor(MailBoxExtension.class); - @Autowired - private MailManager mailManager; @Autowired private RepositoryManager repositoryManager; @Autowired @@ -74,24 +67,6 @@ public class MailBoxExtension implements MailContextResolver, UserDataDeletable, NewControllerFactory.getInstance().addContextEntryControllerCreator("Inbox", new InboxContextEntry()); } - @Override - public void deleteUserData(Identity identity, String newDeletedUserName) { - //set as deleted all recipients - log.info("Delete intern messages"); - - Collection<DBMailLight> inbox = new HashSet<>(mailManager.getInbox(identity, null, Boolean.FALSE, null, 0, 0)); - for(DBMailLight inMail:inbox) { - mailManager.delete(inMail, identity, true); - } - - Collection<DBMailLight> outbox = new HashSet<>(mailManager.getOutbox(identity, 0, 0, false)); - for(DBMailLight outMail:outbox) { - mailManager.delete(outMail, identity, true); - } - - log.info("Delete " + inbox.size() + " messages in INBOX and " + outbox.size() + " in OUTBOX"); - } - @Override public String getName(String businessPath, Locale locale) { if(!StringHelper.containsNonWhitespace(businessPath)) return null; diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java index 20db18a34778026f22e3d667b5f587e79f045564..e5274f4c048d1c7f3f1669bf8863b1e636b9d042 100644 --- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java +++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java @@ -533,8 +533,7 @@ public class MailManagerImpl implements MailManager, InitializingBean { if(firstResult > 0) { query.setFirstResult(firstResult); } - List<DBMailLight> mails = query.getResultList(); - return mails; + return query.getResultList(); } @Override @@ -593,8 +592,7 @@ public class MailManagerImpl implements MailManager, InitializingBean { query.setParameter("from", from, TemporalType.TIMESTAMP); } - List<DBMailLight> mails = query.getResultList(); - return mails; + return query.getResultList(); } @Override @@ -617,16 +615,13 @@ public class MailManagerImpl implements MailManager, InitializingBean { if(!baseFolder.exists()) { baseFolder.mkdirs(); } - OutputStream out = null; - try { - File templateFile = new File(baseFolder, "mail_template.html"); + + File templateFile = new File(baseFolder, "mail_template.html"); + try(OutputStream out = new FileOutputStream(templateFile);) { StringReader reader = new StringReader(template); - out = new FileOutputStream(templateFile); IOUtils.copy(reader, out, "UTF-8"); } catch (IOException e) { log.error("", e); - } finally { - IOUtils.closeQuietly(out); } } @@ -643,7 +638,7 @@ public class MailManagerImpl implements MailManager, InitializingBean { @Override public MailBundle[] makeMailBundles(MailContext ctxt, List<Identity> recipientsTO, MailTemplate template, Identity sender, String metaId, MailerResult result) { - List<MailBundle> bundles = new ArrayList<MailBundle>(); + List<MailBundle> bundles = new ArrayList<>(); if(recipientsTO != null) { for(Identity recipient: recipientsTO) { MailBundle bundle = makeMailBundle(ctxt, recipient, template, sender, metaId, result); @@ -1012,18 +1007,15 @@ public class MailManagerImpl implements MailManager, InitializingBean { List<File> attachments = content.getAttachments(); if(attachments != null && !attachments.isEmpty()) { for(File attachment:attachments) { - - FileInputStream in = null; - try { + try(FileInputStream in = new FileInputStream(attachment)) { DBMailAttachment data = new DBMailAttachment(); data.setSize(attachment.length()); data.setName(attachment.getName()); long checksum = FileUtils.checksum(attachment, new Adler32()).getValue(); - data.setChecksum(new Long(checksum)); + data.setChecksum(Long.valueOf(checksum)); data.setMimetype(WebappHelper.getMimeType(attachment.getName())); - - in = new FileInputStream(attachment); + String path = saveAttachmentToStorage(data.getName(), data.getMimetype(), checksum, attachment.length(), in); data.setPath(path); data.setMail(mail); @@ -1033,8 +1025,6 @@ public class MailManagerImpl implements MailManager, InitializingBean { log.error("File attachment not found: " + attachment, e); } catch (IOException e) { log.error("Error with file attachment: " + attachment, e); - } finally { - IOUtils.closeQuietly(in); } } } diff --git a/src/main/java/org/olat/core/util/mail/manager/MailUserDataManager.java b/src/main/java/org/olat/core/util/mail/manager/MailUserDataManager.java new file mode 100644 index 0000000000000000000000000000000000000000..edfc6b15ee4d2cd8a02b1af3c3ffca4be1f3ee04 --- /dev/null +++ b/src/main/java/org/olat/core/util/mail/manager/MailUserDataManager.java @@ -0,0 +1,184 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.util.mail.manager; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import org.olat.core.commons.persistence.DB; +import org.olat.core.id.Identity; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; +import org.olat.core.util.Formatter; +import org.olat.core.util.StringHelper; +import org.olat.core.util.mail.MailManager; +import org.olat.core.util.mail.model.DBMail; +import org.olat.core.util.mail.model.DBMailLight; +import org.olat.core.util.mail.model.DBMailRecipient; +import org.olat.core.util.mail.ui.MailContextResolver; +import org.olat.core.util.openxml.OpenXMLWorkbook; +import org.olat.core.util.openxml.OpenXMLWorksheet; +import org.olat.core.util.openxml.OpenXMLWorksheet.Row; +import org.olat.user.UserDataDeletable; +import org.olat.user.UserDataExportable; +import org.olat.user.UserManager; +import org.olat.user.manager.ManifestBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * Initial date: 25 mai 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +@Service +public class MailUserDataManager implements UserDataDeletable, UserDataExportable { + + private static final OLog log = Tracing.createLoggerFor(MailUserDataManager.class); + + @Autowired + private DB dbInstance; + @Autowired + private UserManager userManager; + @Autowired + private MailManager mailManager; + @Autowired + private MailContextResolver contextResolver; + + + @Override + public void deleteUserData(Identity identity, String newDeletedUserName) { + //set as deleted all recipients + log.info("Delete intern messages"); + + Collection<DBMailLight> inbox = new HashSet<>(mailManager.getInbox(identity, null, Boolean.FALSE, null, 0, 0)); + for(DBMailLight inMail:inbox) { + mailManager.delete(inMail, identity, true); + } + + Collection<DBMailLight> outbox = new HashSet<>(mailManager.getOutbox(identity, 0, 0, false)); + for(DBMailLight outMail:outbox) { + mailManager.delete(outMail, identity, true); + } + + log.info("Delete " + inbox.size() + " messages in INBOX and " + outbox.size() + " in OUTBOX"); + } + + @Override + public String getExporterID() { + return "mail"; + } + + @Override + public void export(Identity identity, ManifestBuilder manifest, File archiveDirectory, Locale locale) { + Map<String,String> bpToContexts = new HashMap<>(); + exportInbox(identity, bpToContexts, manifest, archiveDirectory, locale); + exportOutbox(identity, bpToContexts, manifest, archiveDirectory, locale); + } + + private void exportInbox(Identity identity, Map<String,String> bpToContexts, ManifestBuilder manifest, File archiveDirectory, Locale locale) { + File inbox = new File(archiveDirectory, "MailInbox.xlsx"); + + try(OutputStream out = new FileOutputStream(inbox); + OpenXMLWorkbook workbook = new OpenXMLWorkbook(out, 1)) { + OpenXMLWorksheet sheet = workbook.nextWorksheet(); + sheet.setHeaderRows(1); + + Row header = sheet.newRow(); + header.addCell(0, "Created"); + header.addCell(1, "Context"); + header.addCell(2, "Subject"); + header.addCell(3, "From"); + + List<DBMailLight> mails = mailManager.getInbox(identity, null, null, null, 0, -1); + dbInstance.commitAndCloseSession(); + for(DBMailLight mail:mails) { + Row row = sheet.newRow(); + row.addCell(0, mail.getCreationDate(), workbook.getStyles().getDateTimeStyle()); + String businessPath = mail.getContext().getBusinessPath(); + if(StringHelper.containsNonWhitespace(businessPath)) { + String contextName = bpToContexts.computeIfAbsent(businessPath, bp -> contextResolver.getName(businessPath, locale)); + row.addCell(1, contextName); + } + row.addCell(2, mail.getSubject()); + + DBMailRecipient from = mail.getFrom(); + if(from != null) { + if(from.getRecipient() != null) { + row.addCell(3, userManager.getUserDisplayName(from.getRecipient())); + } else if(from.getEmailAddress() != null) { + row.addCell(3, from.getEmailAddress()); + } + } + } + } catch (IOException e) { + log.error("Unable to export xlsx", e); + } + manifest.appendFile(inbox.getName()); + } + + private void exportOutbox(Identity identity, Map<String,String> bpToContexts, ManifestBuilder manifest, File archiveDirectory, Locale locale) { + File outbox = new File(archiveDirectory, "MailOutbox.xlsx"); + + try(OutputStream out = new FileOutputStream(outbox); + OpenXMLWorkbook workbook = new OpenXMLWorkbook(out, 1)) { + OpenXMLWorksheet sheet = workbook.nextWorksheet(); + sheet.setHeaderRows(1); + + Row header = sheet.newRow(); + header.addCell(0, "Created"); + header.addCell(1, "Context"); + header.addCell(2, "Subject"); + header.addCell(3, "Content"); + + int count = 0; + List<DBMailLight> mails = mailManager.getOutbox(identity, 0, -1, false); + for(DBMailLight mail:mails) { + Row row = sheet.newRow(); + DBMail mailWithContent = mailManager.getMessageByKey(mail.getKey()); + row.addCell(0, mailWithContent.getCreationDate(), workbook.getStyles().getDateTimeStyle()); + String businessPath = mail.getContext().getBusinessPath(); + if(StringHelper.containsNonWhitespace(businessPath)) { + String contextName = bpToContexts.computeIfAbsent(businessPath, bp -> contextResolver.getName(businessPath, locale)); + row.addCell(1, contextName); + } + row.addCell(2, mailWithContent.getSubject()); + row.addCell(3, Formatter.truncate(mailWithContent.getBody(), 32000)); + + if(count++ % 25 == 0) { + dbInstance.commitAndCloseSession(); + } + } + } catch (IOException e) { + log.error("Unable to export xlsx", e); + } + manifest.appendFile(outbox.getName()); + } + +} diff --git a/src/main/java/org/olat/user/manager/UserDataExportTask.java b/src/main/java/org/olat/user/manager/UserDataExportTask.java index e72860883080806ca778beff7c017a323b62ea83..0bdc9e8e4490b9042fdf6614baebf9ca56e668e4 100644 --- a/src/main/java/org/olat/user/manager/UserDataExportTask.java +++ b/src/main/java/org/olat/user/manager/UserDataExportTask.java @@ -20,7 +20,6 @@ package org.olat.user.manager; import org.olat.core.CoreSpringFactory; -import org.olat.core.commons.services.taskexecutor.LongRunnable; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.user.UserDataExportService; @@ -31,7 +30,7 @@ import org.olat.user.UserDataExportService; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ -public class UserDataExportTask implements LongRunnable { +public class UserDataExportTask implements /* Long */ Runnable { private static final long serialVersionUID = 6931074116105090545L; diff --git a/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties index 2936a07633b699b519dd3fb2667c802d635cc0a2..b85fd678f932475ac566bbc23362f174cefca252 100644 --- a/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/user/ui/data/_i18n/LocalStrings_de.properties @@ -22,7 +22,7 @@ group.memberships=Zugeh export.user.data.processing=Der Export ist gerade bearbeitet. export.user.data.ready=Der Benutzer kann den Export mit dem folgenden Link herunterladen. Sie können auch ein en neuen Export erfordern. export.user.data.notReady=Der Benutzer kann den Export mit dem folgenden Link herunterladen. - +mail=Mail export.user.data.ready.subject=Export von "{0}" ist fertig export.user.data.ready.text=<p>Export von "{0}" ist fertig. Es konnte unter <a href="{1}">{1}</a> heruntergeladen werden</p> diff --git a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java index 3ec0bd08079d91bfd65e723d7b09761d7e4867ab..4d5b8eae9ff192e008872619b46acd93208b5b41 100644 --- a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java +++ b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java @@ -38,7 +38,6 @@ import org.olat.core.id.Identity; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.mail.ContactList; -import org.olat.core.util.mail.MailBoxExtension; import org.olat.core.util.mail.MailBundle; import org.olat.core.util.mail.MailManager; import org.olat.core.util.mail.MailModule; @@ -60,8 +59,6 @@ public class MailManagerTest extends OlatTestCase { @Autowired private MailManager mailManager; @Autowired - private MailBoxExtension mailBoxExtension; - @Autowired private MailModule mailModule; @Autowired private DB dbInstance; @@ -231,110 +228,6 @@ public class MailManagerTest extends OlatTestCase { Assert.assertEquals(incomingMail, incomingsMails_3.get(0)); } - @Test - public void testDeleteUserData_groupedMail() { - //send a mail to three ids - String metaId = UUID.randomUUID().toString(); - Identity fromId = JunitTestHelper.createAndPersistIdentityAsUser("mail-7-" + UUID.randomUUID().toString()); - Identity toId_1 = JunitTestHelper.createAndPersistIdentityAsUser("mail-8-" + UUID.randomUUID().toString()); - Identity toId_2 = JunitTestHelper.createAndPersistIdentityAsUser("mail-9-" + UUID.randomUUID().toString()); - Identity toId_3 = JunitTestHelper.createAndPersistIdentityAsUser("mail-10-" + UUID.randomUUID().toString()); - - ContactList ccs = new ContactList("unit-test-cc"); - ccs.add(toId_1); - ccs.add(toId_2); - ccs.add(toId_3); - ccs.add(fromId); - - MailBundle bundle = new MailBundle(); - bundle.setFromId(fromId); - bundle.setContactList(ccs); - bundle.setMetaId(metaId); - bundle.setContent("Hello delList", "Content of delList"); - - MailerResult result = mailManager.sendMessage(bundle); - Assert.assertNotNull(result); - Assert.assertEquals(MailerResult.OK, result.getReturnCode()); - dbInstance.commitAndCloseSession(); - - //delete the 4 users datas - mailBoxExtension.deleteUserData(toId_1, "lalala"); - mailBoxExtension.deleteUserData(toId_2, "lalala"); - mailBoxExtension.deleteUserData(toId_3, "lalala"); - mailBoxExtension.deleteUserData(fromId, "lalala"); - dbInstance.commitAndCloseSession(); - - //check inbox / outbox - List<DBMailLight> deletedMails_1 = mailManager.getInbox(toId_1, null, null, null, 0, -1); - Assert.assertNotNull(deletedMails_1); - Assert.assertTrue(deletedMails_1.isEmpty()); - List<DBMailLight> deletedMails_2 = mailManager.getInbox(toId_2, null, null, null, 0, -1); - Assert.assertNotNull(deletedMails_2); - Assert.assertTrue(deletedMails_2.isEmpty()); - List<DBMailLight> deletedMails_3 = mailManager.getInbox(toId_3, null, null, null, 0, -1); - Assert.assertNotNull(deletedMails_3); - Assert.assertTrue(deletedMails_3.isEmpty()); - List<DBMailLight> deletedMails_4 = mailManager.getOutbox(fromId, 0, -1, true); - Assert.assertNotNull(deletedMails_4); - Assert.assertTrue(deletedMails_4.isEmpty()); - //check mail by meta id - List<DBMailLight> deletedMails = mailManager.getEmailsByMetaId(metaId); - Assert.assertNotNull(deletedMails); - Assert.assertTrue(deletedMails.isEmpty()); - } - - @Test - public void testDeleteUserData_separatedMail() { - //send a mail as separated e-mails to three ids - String metaId = UUID.randomUUID().toString(); - Identity fromId = JunitTestHelper.createAndPersistIdentityAsUser("mail-7-" + UUID.randomUUID().toString()); - Identity toId_1 = JunitTestHelper.createAndPersistIdentityAsUser("mail-8-" + UUID.randomUUID().toString()); - Identity toId_2 = JunitTestHelper.createAndPersistIdentityAsUser("mail-9-" + UUID.randomUUID().toString()); - Identity toId_3 = JunitTestHelper.createAndPersistIdentityAsUser("mail-10-" + UUID.randomUUID().toString()); - - MailBundle bundle_1 = new MailBundle(); - bundle_1.setFromId(fromId); - bundle_1.setToId(toId_1); - bundle_1.setMetaId(metaId); - bundle_1.setContent("Hello ccList", "Content of ccList"); - - MailerResult result1 = mailManager.sendMessage(bundle_1); - Assert.assertNotNull(result1); - Assert.assertEquals(MailerResult.OK, result1.getReturnCode()); - - MailBundle bundle_2 = new MailBundle(); - bundle_2.setFromId(fromId); - bundle_2.setToId(toId_2); - bundle_2.setMetaId(metaId); - bundle_2.setContent("Hello ccList", "Content of ccList"); - - MailerResult result2 = mailManager.sendMessage(bundle_2); - Assert.assertNotNull(result2); - Assert.assertEquals(MailerResult.OK, result2.getReturnCode()); - - MailBundle bundle_3 = new MailBundle(); - bundle_3.setFromId(fromId); - bundle_3.setToId(toId_3); - bundle_3.setMetaId(metaId); - bundle_3.setContent("Hello ccList", "Content of ccList"); - - MailerResult result3 = mailManager.sendMessage(bundle_3); - Assert.assertNotNull(result3); - Assert.assertEquals(MailerResult.OK, result3.getReturnCode()); - dbInstance.commitAndCloseSession(); - - //delete the 4 users datas - mailBoxExtension.deleteUserData(fromId, "lalala"); - mailBoxExtension.deleteUserData(toId_1, "lalala"); - mailBoxExtension.deleteUserData(toId_2, "lalala"); - mailBoxExtension.deleteUserData(toId_3, "lalala"); - dbInstance.commitAndCloseSession(); - - //check mail by meta id - List<DBMailLight> deletedMails = mailManager.getEmailsByMetaId(metaId); - Assert.assertNotNull(deletedMails); - Assert.assertTrue(deletedMails.isEmpty()); - } @Test public void testParalellSubscribers() { diff --git a/src/test/java/org/olat/core/util/mail/manager/MailUserDataManagerTest.java b/src/test/java/org/olat/core/util/mail/manager/MailUserDataManagerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b1d6b2d6ca6cb87c1bd713023116194bff5b35d7 --- /dev/null +++ b/src/test/java/org/olat/core/util/mail/manager/MailUserDataManagerTest.java @@ -0,0 +1,158 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.util.mail.manager; + +import java.util.List; +import java.util.UUID; + +import org.junit.Assert; +import org.junit.Test; +import org.olat.core.commons.persistence.DB; +import org.olat.core.id.Identity; +import org.olat.core.util.mail.ContactList; +import org.olat.core.util.mail.MailBundle; +import org.olat.core.util.mail.MailManager; +import org.olat.core.util.mail.MailerResult; +import org.olat.core.util.mail.model.DBMailLight; +import org.olat.test.JunitTestHelper; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Initial date: 25 mai 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class MailUserDataManagerTest { + + @Autowired + private DB dbInstance; + @Autowired + private MailManager mailManager; + @Autowired + private MailUserDataManager mailBoxExtension; + + + @Test + public void testDeleteUserData_groupedMail() { + //send a mail to three ids + String metaId = UUID.randomUUID().toString(); + Identity fromId = JunitTestHelper.createAndPersistIdentityAsUser("mail-7-" + UUID.randomUUID().toString()); + Identity toId_1 = JunitTestHelper.createAndPersistIdentityAsUser("mail-8-" + UUID.randomUUID().toString()); + Identity toId_2 = JunitTestHelper.createAndPersistIdentityAsUser("mail-9-" + UUID.randomUUID().toString()); + Identity toId_3 = JunitTestHelper.createAndPersistIdentityAsUser("mail-10-" + UUID.randomUUID().toString()); + + ContactList ccs = new ContactList("unit-test-cc"); + ccs.add(toId_1); + ccs.add(toId_2); + ccs.add(toId_3); + ccs.add(fromId); + + MailBundle bundle = new MailBundle(); + bundle.setFromId(fromId); + bundle.setContactList(ccs); + bundle.setMetaId(metaId); + bundle.setContent("Hello delList", "Content of delList"); + + MailerResult result = mailManager.sendMessage(bundle); + Assert.assertNotNull(result); + Assert.assertEquals(MailerResult.OK, result.getReturnCode()); + dbInstance.commitAndCloseSession(); + + //delete the 4 users datas + mailBoxExtension.deleteUserData(toId_1, "lalala"); + mailBoxExtension.deleteUserData(toId_2, "lalala"); + mailBoxExtension.deleteUserData(toId_3, "lalala"); + mailBoxExtension.deleteUserData(fromId, "lalala"); + dbInstance.commitAndCloseSession(); + + //check inbox / outbox + List<DBMailLight> deletedMails_1 = mailManager.getInbox(toId_1, null, null, null, 0, -1); + Assert.assertNotNull(deletedMails_1); + Assert.assertTrue(deletedMails_1.isEmpty()); + List<DBMailLight> deletedMails_2 = mailManager.getInbox(toId_2, null, null, null, 0, -1); + Assert.assertNotNull(deletedMails_2); + Assert.assertTrue(deletedMails_2.isEmpty()); + List<DBMailLight> deletedMails_3 = mailManager.getInbox(toId_3, null, null, null, 0, -1); + Assert.assertNotNull(deletedMails_3); + Assert.assertTrue(deletedMails_3.isEmpty()); + List<DBMailLight> deletedMails_4 = mailManager.getOutbox(fromId, 0, -1, true); + Assert.assertNotNull(deletedMails_4); + Assert.assertTrue(deletedMails_4.isEmpty()); + //check mail by meta id + List<DBMailLight> deletedMails = mailManager.getEmailsByMetaId(metaId); + Assert.assertNotNull(deletedMails); + Assert.assertTrue(deletedMails.isEmpty()); + } + + @Test + public void testDeleteUserData_separatedMail() { + //send a mail as separated e-mails to three ids + String metaId = UUID.randomUUID().toString(); + Identity fromId = JunitTestHelper.createAndPersistIdentityAsUser("mail-7-" + UUID.randomUUID().toString()); + Identity toId_1 = JunitTestHelper.createAndPersistIdentityAsUser("mail-8-" + UUID.randomUUID().toString()); + Identity toId_2 = JunitTestHelper.createAndPersistIdentityAsUser("mail-9-" + UUID.randomUUID().toString()); + Identity toId_3 = JunitTestHelper.createAndPersistIdentityAsUser("mail-10-" + UUID.randomUUID().toString()); + + MailBundle bundle_1 = new MailBundle(); + bundle_1.setFromId(fromId); + bundle_1.setToId(toId_1); + bundle_1.setMetaId(metaId); + bundle_1.setContent("Hello ccList", "Content of ccList"); + + MailerResult result1 = mailManager.sendMessage(bundle_1); + Assert.assertNotNull(result1); + Assert.assertEquals(MailerResult.OK, result1.getReturnCode()); + + MailBundle bundle_2 = new MailBundle(); + bundle_2.setFromId(fromId); + bundle_2.setToId(toId_2); + bundle_2.setMetaId(metaId); + bundle_2.setContent("Hello ccList", "Content of ccList"); + + MailerResult result2 = mailManager.sendMessage(bundle_2); + Assert.assertNotNull(result2); + Assert.assertEquals(MailerResult.OK, result2.getReturnCode()); + + MailBundle bundle_3 = new MailBundle(); + bundle_3.setFromId(fromId); + bundle_3.setToId(toId_3); + bundle_3.setMetaId(metaId); + bundle_3.setContent("Hello ccList", "Content of ccList"); + + MailerResult result3 = mailManager.sendMessage(bundle_3); + Assert.assertNotNull(result3); + Assert.assertEquals(MailerResult.OK, result3.getReturnCode()); + dbInstance.commitAndCloseSession(); + + //delete the 4 users datas + mailBoxExtension.deleteUserData(fromId, "lalala"); + mailBoxExtension.deleteUserData(toId_1, "lalala"); + mailBoxExtension.deleteUserData(toId_2, "lalala"); + mailBoxExtension.deleteUserData(toId_3, "lalala"); + dbInstance.commitAndCloseSession(); + + //check mail by meta id + List<DBMailLight> deletedMails = mailManager.getEmailsByMetaId(metaId); + Assert.assertNotNull(deletedMails); + Assert.assertTrue(deletedMails.isEmpty()); + } + +} diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java index 57abead6cd860458f62c2862188e54ba9f20ea42..8e0e2d27417b2a7facbefd8bdb4adc4ba129085f 100644 --- a/src/test/java/org/olat/test/AllTestsJunit4.java +++ b/src/test/java/org/olat/test/AllTestsJunit4.java @@ -73,6 +73,7 @@ import org.junit.runners.Suite; org.olat.core.util.IPUtilsValidRangeTest.class, org.olat.core.util.mail.EmailAddressValidatorTest.class, org.olat.core.util.mail.manager.MailManagerTest.class, + org.olat.core.util.mail.manager.MailUserDataManagerTest.class, org.olat.core.util.openxml.OpenXmlWorkbookTest.class, org.olat.core.util.openxml.OpenXMLDocumentTest.class, org.olat.core.util.xml.XMLDigitalSignatureUtilTest.class,