Skip to content
Snippets Groups Projects
Commit fa03de50 authored by Simon Urli's avatar Simon Urli
Browse files

XWIKI-20187: The TOC in notifications emails displays "$title" instead of the actual page title

  * Use proper context user to evaluate email template

(cherry picked from commit fc688b1b)
parent e8015a94
No related branches found
No related tags found
No related merge requests found
...@@ -411,11 +411,14 @@ public MimeMessage next() ...@@ -411,11 +411,14 @@ public MimeMessage next()
XWikiContext xcontext = this.xcontextProvider.get(); XWikiContext xcontext = this.xcontextProvider.get();
WikiReference currentWiki = xcontext.getWikiReference(); WikiReference currentWiki = xcontext.getWikiReference();
DocumentReference currentContextUser = xcontext.getUserReference();
ExtendedMimeMessage message = null; ExtendedMimeMessage message = null;
try { try {
// Switch to user's wiki to make sure the mail is generated from target user point of view // Switch to user's wiki to make sure the mail is generated from target user point of view
xcontext.setWikiReference(this.currentUser.getWikiReference()); xcontext.setWikiReference(this.currentUser.getWikiReference());
// Ensure to use the user we target in email to properly create notifications.
xcontext.setUserReference(this.currentUser);
DocumentReference templateDocumentReference = DocumentReference templateDocumentReference =
this.documentReferenceResolver.resolve(this.templateReference, this.currentUser); this.documentReferenceResolver.resolve(this.templateReference, this.currentUser);
...@@ -434,6 +437,8 @@ public MimeMessage next() ...@@ -434,6 +437,8 @@ public MimeMessage next()
} finally { } finally {
// Restore wiki // Restore wiki
xcontext.setWikiReference(currentWiki); xcontext.setWikiReference(currentWiki);
// Restore context user
xcontext.setUserReference(currentContextUser);
} }
// Look for the next email to send // Look for the next email to send
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.inject.Named; import javax.inject.Named;
import javax.inject.Provider;
import javax.mail.internet.InternetAddress; import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage;
...@@ -61,6 +62,7 @@ ...@@ -61,6 +62,7 @@
import org.xwiki.user.UserReferenceResolver; import org.xwiki.user.UserReferenceResolver;
import org.xwiki.wiki.descriptor.WikiDescriptorManager; import org.xwiki.wiki.descriptor.WikiDescriptorManager;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.api.Attachment; import com.xpn.xwiki.api.Attachment;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
...@@ -73,6 +75,7 @@ ...@@ -73,6 +75,7 @@
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
...@@ -130,6 +133,11 @@ class DefaultPeriodicMimeMessageIteratorTest ...@@ -130,6 +133,11 @@ class DefaultPeriodicMimeMessageIteratorTest
@MockComponent @MockComponent
private NotificationConfiguration notificationConfiguration; private NotificationConfiguration notificationConfiguration;
@MockComponent
private Provider<XWikiContext> contextProvider;
private XWikiContext context;
@BeforeComponent @BeforeComponent
void beforeComponent(MockitoComponentManager componentManager) throws Exception void beforeComponent(MockitoComponentManager componentManager) throws Exception
{ {
...@@ -146,6 +154,8 @@ void beforeEach() ...@@ -146,6 +154,8 @@ void beforeEach()
when(this.wikiDescriptorManager.getCurrentWikiId()).thenReturn("xwiki"); when(this.wikiDescriptorManager.getCurrentWikiId()).thenReturn("xwiki");
when(this.mailSenderConfiguration.getFromAddress()).thenReturn("xwiki@xwiki.org"); when(this.mailSenderConfiguration.getFromAddress()).thenReturn("xwiki@xwiki.org");
when(this.documentReferenceResolver.resolve(eq(TEMPLATE_REFERENCE), any())).thenReturn(TEMPLATE_REFERENCE); when(this.documentReferenceResolver.resolve(eq(TEMPLATE_REFERENCE), any())).thenReturn(TEMPLATE_REFERENCE);
this.context = mock(XWikiContext.class);
when(this.contextProvider.get()).thenReturn(this.context);
} }
@Test @Test
...@@ -165,7 +175,7 @@ void test() throws Exception ...@@ -165,7 +175,7 @@ void test() throws Exception
when(this.documentAccessBridge.getProperty(userB, userClass, 0, "email")).thenReturn("bad email"); when(this.documentAccessBridge.getProperty(userB, userClass, 0, "email")).thenReturn("bad email");
when(this.documentAccessBridge.getProperty(userC, userClass, 0, "email")).thenReturn("userC@xwiki.org"); when(this.documentAccessBridge.getProperty(userC, userClass, 0, "email")).thenReturn("userC@xwiki.org");
when(this.serializer.serialize(userA)).thenReturn("xwiki:XWiki.UserA"); when(this.serializer.serialize(userA)).thenReturn("xwiki:XWiki.UserA");
when(this.serializer.serialize(userB)).thenReturn("xwiki:XWiki.UserA"); when(this.serializer.serialize(userB)).thenReturn("xwiki:XWiki.UserB");
when(this.serializer.serialize(userC)).thenReturn("xwiki:XWiki.UserC"); when(this.serializer.serialize(userC)).thenReturn("xwiki:XWiki.UserC");
CompositeEvent compositeEvent1UserA = mock(CompositeEvent.class); CompositeEvent compositeEvent1UserA = mock(CompositeEvent.class);
...@@ -289,6 +299,10 @@ void test() throws Exception ...@@ -289,6 +299,10 @@ void test() throws Exception
// Verify // Verify
verify(this.serializer, never()).serialize(userB); verify(this.serializer, never()).serialize(userB);
verify(this.context, times(2)).setUserReference(userA);
verify(this.context, never()).setUserReference(userB);
verify(this.context).setUserReference(userC);
verify(this.context, times(3)).setUserReference(null);
assertEquals(this.iterator, this.iterator.iterator()); assertEquals(this.iterator, this.iterator.iterator());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment