use of org.xwiki.component.util.DefaultParameterizedType in project xwiki-platform by xwiki.
the class TemplateMimeBodyPartFactoryTest method createWithAttachmentAndTemplateAttachments.
@Test
public void createWithAttachmentAndTemplateAttachments() throws Exception {
MimeBodyPartFactory<String> htmlMimeBodyPartFactory = this.mocker.getInstance(new DefaultParameterizedType(null, MimeBodyPartFactory.class, String.class), "text/html");
Attachment attachment1 = mock(Attachment.class, "attachment1");
Map<String, Object> bodyPartParameters = new HashMap<>();
bodyPartParameters.put("velocityVariables", new HashMap<String, String>());
bodyPartParameters.put("attachments", Collections.singletonList(attachment1));
bodyPartParameters.put("includeTemplateAttachments", true);
// Mock the retrieval and conversion of attachments from the Template document
DocumentAccessBridge dab = this.mocker.getInstance(DocumentAccessBridge.class);
XWikiDocument xwikiDocument = mock(XWikiDocument.class);
when(dab.getDocumentInstance(this.documentReference)).thenReturn(xwikiDocument);
XWikiAttachment xwikiAttachment = mock(XWikiAttachment.class);
when(xwikiDocument.getAttachmentList()).thenReturn(Collections.singletonList(xwikiAttachment));
AttachmentConverter attachmentConverter = this.mocker.getInstance(AttachmentConverter.class);
Attachment attachment2 = mock(Attachment.class, "attachment2");
when(attachmentConverter.convert(Collections.singletonList(xwikiAttachment))).thenReturn(Collections.singletonList(attachment2));
this.mocker.getComponentUnderTest().create(this.documentReference, bodyPartParameters);
Map<String, Object> htmlParameters = new HashMap<>();
htmlParameters.put("alternate", "Hello John Doe, john@doe.com");
htmlParameters.put("attachments", Arrays.asList(attachment1, attachment2));
verify(htmlMimeBodyPartFactory).create("Hello <b>John Doe</b> <br />john@doe.com", htmlParameters);
}
use of org.xwiki.component.util.DefaultParameterizedType in project xwiki-platform by xwiki.
the class MailStorageScriptServiceTest method setUp.
@Before
public void setUp() throws Exception {
Provider<ComponentManager> componentManagerProvider = this.mocker.registerMockComponent(new DefaultParameterizedType(null, Provider.class, ComponentManager.class), "context");
when(componentManagerProvider.get()).thenReturn(this.mocker);
Execution execution = this.mocker.getInstance(Execution.class);
ExecutionContext executionContext = new ExecutionContext();
when(execution.getContext()).thenReturn(executionContext);
}
use of org.xwiki.component.util.DefaultParameterizedType in project xwiki-platform by xwiki.
the class UsersMimeMessageFactoryTest method createMessageWhenNotExistingMimeMessageFactory.
@Test
public void createMessageWhenNotExistingMimeMessageFactory() throws Exception {
DocumentReference userReference = new DocumentReference("wiki", "space", "page");
Map<String, Object> parameters = new HashMap<>();
parameters.put("hint", "factoryHint");
parameters.put("source", "factoryHint");
Provider<ComponentManager> componentManagerProvider = this.mocker.registerMockComponent(new DefaultParameterizedType(null, Provider.class, ComponentManager.class), "context");
when(componentManagerProvider.get()).thenReturn(this.mocker);
try {
this.mocker.getComponentUnderTest().createMessage(Arrays.asList(userReference), parameters);
fail("Should have thrown an exception");
} catch (MessagingException expected) {
assertEquals("Failed to find a [MimeMessageFactory<MimeMessage>] for hint [factoryHint]", expected.getMessage());
}
}
use of org.xwiki.component.util.DefaultParameterizedType in project xwiki-platform by xwiki.
the class PrepareMailRunnableTest method prepareMailWhenContentStoreFails.
@Test
public void prepareMailWhenContentStoreFails() throws Exception {
Properties properties = new Properties();
Session session = Session.getDefaultInstance(properties);
MimeMessage message1 = new MimeMessage(session);
message1.setText("Content1");
MimeMessage message2 = new MimeMessage(session);
message2.setText("Content2");
String batchId1 = UUID.randomUUID().toString();
String batchId2 = UUID.randomUUID().toString();
ExecutionContext context1 = new ExecutionContext();
XWikiContext xContext1 = new XWikiContext();
xContext1.setWikiId("wiki1");
context1.setProperty(XWikiContext.EXECUTIONCONTEXT_KEY, xContext1);
ExecutionContext context2 = new ExecutionContext();
XWikiContext xContext2 = new XWikiContext();
xContext2.setWikiId("wiki2");
context2.setProperty(XWikiContext.EXECUTIONCONTEXT_KEY, xContext2);
MemoryMailListener listener1 = this.mocker.getInstance(MailListener.class, "memory");
PrepareMailQueueItem item1 = new PrepareMailQueueItem(Arrays.asList(message1), session, listener1, batchId1, context1);
MemoryMailListener listener2 = this.mocker.getInstance(MailListener.class, "memory");
PrepareMailQueueItem item2 = new PrepareMailQueueItem(Arrays.asList(message2), session, listener2, batchId2, context2);
MailQueueManager mailQueueManager = this.mocker.getInstance(new DefaultParameterizedType(null, MailQueueManager.class, PrepareMailQueueItem.class));
// Make the content store save fail
MailContentStore contentStore = this.mocker.getInstance(MailContentStore.class, "filesystem");
doThrow(new MailStoreException("error")).when(contentStore).save(any(String.class), any(ExtendedMimeMessage.class));
// Prepare 2 mails. Both will fail but we want to verify that the second one is processed even though the first
// one failed.
mailQueueManager.addToQueue(item1);
mailQueueManager.addToQueue(item2);
MailRunnable runnable = this.mocker.getComponentUnderTest();
Thread thread = new Thread(runnable);
thread.start();
// Wait for the mails to have been processed.
try {
listener1.getMailStatusResult().waitTillProcessed(10000L);
listener2.getMailStatusResult().waitTillProcessed(10000L);
} finally {
runnable.stopProcessing();
thread.interrupt();
thread.join();
}
MailStatusResult result1 = listener1.getMailStatusResult();
MailStatusResult result2 = listener2.getMailStatusResult();
// Despite the errors, both process should be ended with known total number of mails
assertTrue(result1.isProcessed());
assertTrue(result2.isProcessed());
// This is the real test: we verify that there's been an error while sending each email.
MailStatus status1 = result1.getByState(MailState.PREPARE_ERROR).next();
assertEquals("MailStoreException: error", status1.getErrorSummary());
MailStatus status2 = result2.getByState(MailState.PREPARE_ERROR).next();
assertEquals("MailStoreException: error", status2.getErrorSummary());
}
use of org.xwiki.component.util.DefaultParameterizedType in project xwiki-platform by xwiki.
the class SendMailRunnableTest method sendMailWhenSendingFails.
@Test
public void sendMailWhenSendingFails() throws Exception {
// Create a Session with an invalid host so that it generates an error
Properties properties = new Properties();
properties.setProperty("mail.smtp.host", "xwiki-unknown");
Session session = Session.getDefaultInstance(properties);
MimeMessage msg1 = new MimeMessage(session);
msg1.setText("Content1");
ExtendedMimeMessage message1 = new ExtendedMimeMessage(msg1);
String id1 = message1.getUniqueMessageId();
MimeMessage msg2 = new MimeMessage(session);
msg2.setText("Content2");
ExtendedMimeMessage message2 = new ExtendedMimeMessage(msg2);
String id2 = message2.getUniqueMessageId();
MemoryMailListener listener = this.mocker.getInstance(MailListener.class, "memory");
String batchId = UUID.randomUUID().toString();
listener.onPrepareBegin(batchId, Collections.<String, Object>emptyMap());
((UpdateableMailStatusResult) listener.getMailStatusResult()).setTotalSize(2);
SendMailQueueItem item1 = new SendMailQueueItem(id1, session, listener, batchId, "xwiki");
SendMailQueueItem item2 = new SendMailQueueItem(id2, session, listener, batchId, "xwiki");
MailQueueManager mailQueueManager = this.mocker.getInstance(new DefaultParameterizedType(null, MailQueueManager.class, SendMailQueueItem.class));
// Simulate loading the message from the content store
MailContentStore contentStore = this.mocker.getInstance(MailContentStore.class, "filesystem");
when(contentStore.load(session, batchId, id1)).thenReturn(message1);
when(contentStore.load(session, batchId, id2)).thenReturn(message2);
// Send 2 mails. Both will fail but we want to verify that the second one is processed even though the first
// one failed.
mailQueueManager.addToQueue(item1);
mailQueueManager.addToQueue(item2);
MailRunnable runnable = this.mocker.getComponentUnderTest();
Thread thread = new Thread(runnable);
thread.start();
// Wait for the mails to have been processed.
try {
listener.getMailStatusResult().waitTillProcessed(10000L);
} finally {
runnable.stopProcessing();
thread.interrupt();
thread.join();
}
// This is the real test: we verify that there's been an error while sending each email.
Iterator<MailStatus> statuses = listener.getMailStatusResult().getByState(MailState.SEND_ERROR);
int errorCount = 0;
while (statuses.hasNext()) {
MailStatus status = statuses.next();
// Note: I would have liked to assert the exact message but it seems there can be different ones returned.
// During my tests I got 2 different ones:
// "UnknownHostException: xwiki-unknown"
// "ConnectException: Connection refused"
// Thus for now I only assert that there's an error set, but not its content.
assertTrue(status.getErrorSummary() != null);
errorCount++;
}
assertEquals(2, errorCount);
}
Aggregations