From eccc7f55a6788bdb4f9f40bb57546c3da5ac4576 Mon Sep 17 00:00:00 2001
From: Eduard Moraru <Enygma2002@gmail.com>
Date: Tue, 16 Dec 2014 16:59:21 +0200
Subject: [PATCH] XWIKI-10998: After a user deletes his avatar, "User Avatar"
 is not correctly displayed - Added tests to preserve previous coverage.

---
 .../macro/useravatar/UserAvatarMacro.java         |  2 +-
 .../macro/useravatar/IntegrationTests.java        | 15 +++++++++++++++
 .../src/test/resources/macrouseravatar5.test      | 14 ++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/resources/macrouseravatar5.test

diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/main/java/org/xwiki/rendering/internal/macro/useravatar/UserAvatarMacro.java b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/main/java/org/xwiki/rendering/internal/macro/useravatar/UserAvatarMacro.java
index 49dedb4844e..f9023ada46a 100644
--- a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/main/java/org/xwiki/rendering/internal/macro/useravatar/UserAvatarMacro.java
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/main/java/org/xwiki/rendering/internal/macro/useravatar/UserAvatarMacro.java
@@ -160,7 +160,7 @@ public List<Block> execute(UserAvatarMacroParameters parameters, String content,
             } catch (Exception e) {
                 // Log and fallback on default.
                 logger.warn("Failed to get the avatar for user [{}]. Using default.",
-                    this.compactWikiEntityReferenceSerializer.serialize(userReference));
+                    this.compactWikiEntityReferenceSerializer.serialize(userReference), e);
             }
         }
         ImageBlock imageBlock = new ImageBlock(imageReference, false);
diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/java/org/xwiki/rendering/macro/useravatar/IntegrationTests.java b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/java/org/xwiki/rendering/macro/useravatar/IntegrationTests.java
index f14a7e01683..8a98ede4545 100644
--- a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/java/org/xwiki/rendering/macro/useravatar/IntegrationTests.java
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/java/org/xwiki/rendering/macro/useravatar/IntegrationTests.java
@@ -69,6 +69,8 @@ public void initialize(ComponentManager componentManager) throws Exception
         final DocumentReference userNotExistingReference = new DocumentReference("wiki", "XWiki", "UserNotExisting");
         final DocumentReference userWithNonExistingAvatarFileReference =
             new DocumentReference("wiki", "XWiki", "UserWithNonExistingAvatarFile");
+        final DocumentReference userWithExceptionRetrievingAvatarFileReference =
+            new DocumentReference("wiki", "XWiki", "UserWithExceptionRetrievingAvatarFile");
         final DocumentReference userClassReference = new DocumentReference("wiki", "XWiki", "XWikiUsers");
         final DocumentAccessBridge mockDocumentAccessBridge =
             registerMockComponent(componentManager, mockery, DocumentAccessBridge.class);
@@ -78,6 +80,7 @@ public void initialize(ComponentManager componentManager) throws Exception
             allowing(mockDocumentAccessBridge).exists(with(any(String.class))); will(returnValue(false));
             allowing(mockDocumentAccessBridge).exists(userNotExistingReference); will(returnValue(false));
             allowing(mockDocumentAccessBridge).exists(userWithNonExistingAvatarFileReference); will(returnValue(true));
+            allowing(mockDocumentAccessBridge).exists(userWithExceptionRetrievingAvatarFileReference); will(returnValue(true));
 
             allowing(mockDocumentAccessBridge).getProperty(adminUserReference, userClassReference, "avatar");
                 will(returnValue("mockAvatar.png"));
@@ -85,11 +88,15 @@ public void initialize(ComponentManager componentManager) throws Exception
                 "avatar"); will(returnValue(null));
             allowing(mockDocumentAccessBridge).getProperty(userWithNonExistingAvatarFileReference,
                 userClassReference, "avatar"); will(returnValue("mockAvatar.png"));
+            allowing(mockDocumentAccessBridge).getProperty(userWithExceptionRetrievingAvatarFileReference,
+                userClassReference, "avatar"); will(returnValue("mockAvatar.png"));
 
             allowing(mockDocumentAccessBridge).getAttachmentVersion(new AttachmentReference("mockAvatar.png",
                 adminUserReference)); will(returnValue("1.1"));
             allowing(mockDocumentAccessBridge).getAttachmentVersion(new AttachmentReference("mockAvatar.png",
                 userWithNonExistingAvatarFileReference)); will(returnValue(null));
+            allowing(mockDocumentAccessBridge).getAttachmentVersion(new AttachmentReference("mockAvatar.png",
+                userWithExceptionRetrievingAvatarFileReference)); will(throwException(new Exception("Sum Ting Wong")));
         }});
 
         // Document Resolver Mock
@@ -108,6 +115,9 @@ public void initialize(ComponentManager componentManager) throws Exception
             allowing(mockDocumentReferenceResolver).resolve("XWiki.UserWithNonExistingAvatarFile",
                 new EntityReference("XWiki", EntityType.SPACE));
                 will(returnValue(userWithNonExistingAvatarFileReference));
+            allowing(mockDocumentReferenceResolver).resolve("XWiki.UserWithExceptionRetrievingAvatarFile",
+                new EntityReference("XWiki", EntityType.SPACE));
+                will(returnValue(userWithExceptionRetrievingAvatarFileReference));
         }});
 
         // Entity Reference Serializer Mock
@@ -122,6 +132,11 @@ public void initialize(ComponentManager componentManager) throws Exception
             allowing(mockEntityReferenceSerializer).serialize(
                 new AttachmentReference("mockAvatar.png", userWithNonExistingAvatarFileReference));
                 will(returnValue("XWiki.UserWithNonExistingAvatarFile@mockAvatar.png"));
+            allowing(mockEntityReferenceSerializer).serialize(
+                new AttachmentReference("mockAvatar.png", userWithExceptionRetrievingAvatarFileReference));
+                will(returnValue("XWiki.UserWithExceptionRetrievingAvatarFile@mockAvatar.png"));
+            allowing(mockEntityReferenceSerializer).serialize(userWithExceptionRetrievingAvatarFileReference);
+                will(returnValue("XWiki.UserWithExceptionRetrievingAvatarFile"));
         }});
 
         // Entity Reference Serializer Mock
diff --git a/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/resources/macrouseravatar5.test b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/resources/macrouseravatar5.test
new file mode 100644
index 00000000000..486e67b6bae
--- /dev/null
+++ b/xwiki-platform-core/xwiki-platform-rendering/xwiki-platform-rendering-macros/xwiki-platform-rendering-macro-useravatar/src/test/resources/macrouseravatar5.test
@@ -0,0 +1,14 @@
+.runTransformations
+.#--------------------------------------------------------------------
+.input|xwiki/2.0
+.# Verify that the macro generates an error if the user doesn't exist.
+.#--------------------------------------------------------------------
+{{useravatar username="XWiki.UserWithExceptionRetrievingAvatarFile" /}}
+.#--------------------------------------------------------------------
+.expect|event/1.0
+.#--------------------------------------------------------------------
+beginDocument
+beginMacroMarkerStandalone [useravatar] [username=XWiki.UserWithExceptionRetrievingAvatarFile]
+onImage [Typed = [true] Type = [url] Reference = [/xwiki/noavatar.png]] [false] [[alt]=[Picture of UserWithExceptionRetrievingAvatarFile][title]=[UserWithExceptionRetrievingAvatarFile]]
+endMacroMarkerStandalone [useravatar] [username=XWiki.UserWithExceptionRetrievingAvatarFile]
+endDocument
\ No newline at end of file
-- 
GitLab