You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/12/14 10:34:34 UTC

[18/18] james-project git commit: MAILBOX-359 MailboxRenamed Scala Event Serialization

MAILBOX-359 MailboxRenamed Scala Event Serialization


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3b89930f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3b89930f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3b89930f

Branch: refs/heads/master
Commit: 3b89930f6e6d741a8458329f0a9cad21c5a19ce2
Parents: 5837532
Author: tran tien duc <dt...@linagora.com>
Authored: Thu Dec 13 16:32:11 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Dec 14 17:13:32 2018 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxListener.java   |  19 +
 .../james/mailbox/MailboxListenerTest.java      |   5 +
 .../james/event/json/EventSerializer.scala      |  14 +-
 .../json/MailboxRenamedSerializationTest.java   | 732 +++++++++++++++++++
 4 files changed, 769 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3b89930f/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index 9c89b8e..128e134 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -265,6 +265,25 @@ public interface MailboxListener {
         public MailboxPath getNewPath() {
             return newPath;
         }
+
+        @Override
+        public final boolean equals(Object o) {
+            if (o instanceof MailboxRenamed) {
+                MailboxRenamed that = (MailboxRenamed) o;
+
+                return Objects.equals(this.sessionId, that.sessionId)
+                    && Objects.equals(this.user, that.user)
+                    && Objects.equals(this.path, that.path)
+                    && Objects.equals(this.mailboxId, that.mailboxId)
+                    && Objects.equals(this.newPath, that.newPath);
+            }
+            return false;
+        }
+
+        @Override
+        public final int hashCode() {
+            return Objects.hash(sessionId, user, path, mailboxId, newPath);
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b89930f/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxListenerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxListenerTest.java
index bcad8b3..b3b3585 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxListenerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxListenerTest.java
@@ -28,4 +28,9 @@ class MailboxListenerTest {
     void mailboxAddedShouldMatchBeanContract() {
         EqualsVerifier.forClass(MailboxListener.MailboxAdded.class).verify();
     }
+
+    @Test
+    void mailboxRenamedShouldMatchBeanContract() {
+        EqualsVerifier.forClass(MailboxListener.MailboxRenamed.class).verify();
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b89930f/mailbox/event/json/src/main/scala/org/apache/james/event/json/EventSerializer.scala
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/main/scala/org/apache/james/event/json/EventSerializer.scala b/mailbox/event/json/src/main/scala/org/apache/james/event/json/EventSerializer.scala
index 3248713..5085640 100644
--- a/mailbox/event/json/src/main/scala/org/apache/james/event/json/EventSerializer.scala
+++ b/mailbox/event/json/src/main/scala/org/apache/james/event/json/EventSerializer.scala
@@ -25,7 +25,7 @@ import java.util.Optional
 import julienrf.json.derived
 import org.apache.james.core.quota.{QuotaCount, QuotaSize, QuotaValue}
 import org.apache.james.core.{Domain, User}
-import org.apache.james.mailbox.MailboxListener.{MailboxAdded => JavaMailboxAdded, QuotaUsageUpdatedEvent => JavaQuotaUsageUpdatedEvent}
+import org.apache.james.mailbox.MailboxListener.{MailboxAdded => JavaMailboxAdded, MailboxRenamed => JavaMailboxRenamed, QuotaUsageUpdatedEvent => JavaQuotaUsageUpdatedEvent}
 import org.apache.james.mailbox.MailboxSession.SessionId
 import org.apache.james.mailbox.model.{MailboxId, QuotaRoot, MailboxPath => JavaMailboxPath, Quota => JavaQuota}
 import org.apache.james.mailbox.{Event => JavaEvent}
@@ -67,6 +67,10 @@ private object DTO {
   case class MailboxAdded(mailboxPath: MailboxPath, mailboxId: MailboxId, user: User, sessionId: SessionId) extends Event {
     override def toJava: JavaEvent = new JavaMailboxAdded(sessionId, user, mailboxPath.toJava, mailboxId)
   }
+
+  case class MailboxRenamed(sessionId: SessionId, user: User, path: MailboxPath, mailboxId: MailboxId, newPath: MailboxPath) extends Event {
+    override def toJava: JavaEvent = new JavaMailboxRenamed(sessionId, user, path.toJava, mailboxId, newPath.toJava)
+  }
 }
 
 private object ScalaConverter {
@@ -88,9 +92,17 @@ private object ScalaConverter {
     user = event.getUser,
     sessionId = event.getSessionId)
 
+  private def toScala(event: JavaMailboxRenamed): DTO.MailboxRenamed = DTO.MailboxRenamed(
+    sessionId = event.getSessionId,
+    user = event.getUser,
+    path = DTO.MailboxPath.fromJava(event.getMailboxPath),
+    mailboxId = event.getMailboxId,
+    newPath = DTO.MailboxPath.fromJava(event.getNewPath))
+
   def toScala(javaEvent: JavaEvent): Event = javaEvent match {
     case e: JavaQuotaUsageUpdatedEvent => toScala(e)
     case e: JavaMailboxAdded => toScala(e)
+    case e: JavaMailboxRenamed => toScala(e)
     case _ => throw new RuntimeException("no Scala convertion known")
   }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3b89930f/mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxRenamedSerializationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxRenamedSerializationTest.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxRenamedSerializationTest.java
new file mode 100644
index 0000000..c4841c5
--- /dev/null
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxRenamedSerializationTest.java
@@ -0,0 +1,732 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.event.json;
+
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.mailbox.model.MailboxConstants.USER_NAMESPACE;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.NoSuchElementException;
+
+import org.apache.james.core.User;
+import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.TestId;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+class MailboxRenamedSerializationTest {
+
+    private static final User DEFAULT_USER = User.fromUsername("user");
+    private static final String OLD_MAILBOX_NAME = "oldMailboxName";
+    private static final MailboxPath DEFAULT_OLD_MAILBOX_PATH = new MailboxPath(USER_NAMESPACE, DEFAULT_USER.asString(), OLD_MAILBOX_NAME);
+    private static final String NEW_MAILBOX_NAME = "newMailboxName";
+    private static final MailboxPath DEFAULT_NEW_MAILBOX_PATH = new MailboxPath(USER_NAMESPACE, DEFAULT_USER.asString(), NEW_MAILBOX_NAME);
+    private static final MailboxSession.SessionId DEFAULT_SESSION_ID = MailboxSession.SessionId.of(123456789);
+    private static final MailboxId DEFAULT_MAILBOX_ID = TestId.of(123456);
+    private static final MailboxListener.MailboxRenamed DEFAULT_MAILBOX_RENAMED_EVENT = new MailboxListener.MailboxRenamed(
+        DEFAULT_SESSION_ID,
+        DEFAULT_USER,
+        DEFAULT_OLD_MAILBOX_PATH,
+        DEFAULT_MAILBOX_ID,
+        DEFAULT_NEW_MAILBOX_PATH);
+
+    private static final String DEFAULT_MAILBOX_RENAMED_EVENT_JSON =
+            "{" +
+            "  \"MailboxRenamed\":{" +
+            "    \"sessionId\":123456789," +
+            "    \"user\":\"user\"," +
+            "    \"path\":{" +
+            "      \"namespace\":\"#private\"," +
+            "      \"user\":\"user\"," +
+            "      \"name\":\"oldMailboxName\"" +
+            "     }," +
+            "    \"mailboxId\":\"123456\"," +
+            "    \"newPath\":{" +
+            "      \"namespace\":\"#private\"," +
+            "      \"user\":\"user\"," +
+            "      \"name\":\"newMailboxName\"" +
+            "     }" +
+            "  }" +
+            "}";
+
+    private static final EventSerializer EVENT_SERIALIZER = new EventSerializer(new TestId.Factory());
+
+    @Test
+    void mailboxRenamedShouldBeWellSerialized() {
+        assertThatJson(EVENT_SERIALIZER.toJson(DEFAULT_MAILBOX_RENAMED_EVENT))
+            .isEqualTo(DEFAULT_MAILBOX_RENAMED_EVENT_JSON);
+    }
+
+    @Test
+    void mailboxRenamedShouldBeWellDeSerialized() {
+        assertThat(EVENT_SERIALIZER.fromJson(DEFAULT_MAILBOX_RENAMED_EVENT_JSON).get())
+            .isEqualTo(DEFAULT_MAILBOX_RENAMED_EVENT);
+    }
+
+    @Nested
+    class NullUserInMailboxPath {
+
+        @Nested
+        class NullUserInOldPath {
+            private final String nullUser = null;
+            private final MailboxListener.MailboxRenamed eventWithNullUserOldPath = new MailboxListener.MailboxRenamed(
+                DEFAULT_SESSION_ID,
+                DEFAULT_USER,
+                new MailboxPath(USER_NAMESPACE, nullUser, OLD_MAILBOX_NAME),
+                DEFAULT_MAILBOX_ID,
+                DEFAULT_NEW_MAILBOX_PATH);
+
+            private static final String EVENT_JSON_WITH_NULL_USER_OLD_PATH = "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}";
+
+            @Test
+            void mailboxRenamedShouldBeWellSerialized() {
+                assertThatJson(EVENT_SERIALIZER.toJson(eventWithNullUserOldPath))
+                    .isEqualTo(EVENT_JSON_WITH_NULL_USER_OLD_PATH);
+            }
+
+            @Test
+            void mailboxRenamedShouldBeWellDeSerialized() {
+                assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_NULL_USER_OLD_PATH).get())
+                    .isEqualTo(eventWithNullUserOldPath);
+            }
+        }
+
+        @Nested
+        class NullUserInNewPath {
+            private final String nullUser = null;
+            private final MailboxListener.MailboxRenamed eventWithNullUserNewPath = new MailboxListener.MailboxRenamed(
+                DEFAULT_SESSION_ID,
+                DEFAULT_USER,
+                DEFAULT_OLD_MAILBOX_PATH,
+                DEFAULT_MAILBOX_ID,
+                new MailboxPath(USER_NAMESPACE, nullUser, NEW_MAILBOX_NAME));
+
+            private static final String EVENT_JSON_WITH_NULL_USER_NEW_PATH = "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}";
+
+            @Test
+            void mailboxRenamedShouldBeWellSerialized() {
+                assertThatJson(EVENT_SERIALIZER.toJson(eventWithNullUserNewPath))
+                    .isEqualTo(EVENT_JSON_WITH_NULL_USER_NEW_PATH);
+            }
+
+            @Test
+            void mailboxRenamedShouldBeWellDeSerialized() {
+                assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_NULL_USER_NEW_PATH).get())
+                    .isEqualTo(eventWithNullUserNewPath);
+            }
+        }
+
+        @Nested
+        class NullUserInOldPathAndNewPath {
+            private final String nullUser = null;
+            private final MailboxListener.MailboxRenamed eventWithNullUserBothPath = new MailboxListener.MailboxRenamed(
+                DEFAULT_SESSION_ID,
+                DEFAULT_USER,
+                new MailboxPath(USER_NAMESPACE, nullUser, OLD_MAILBOX_NAME),
+                DEFAULT_MAILBOX_ID,
+                new MailboxPath(USER_NAMESPACE, nullUser, NEW_MAILBOX_NAME));
+
+            private static final String EVENT_JSON_WITH_NULL_USER_BOTH_PATH =
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}";
+
+            @Test
+            void mailboxRenamedShouldBeWellSerialized() {
+                assertThatJson(EVENT_SERIALIZER.toJson(eventWithNullUserBothPath))
+                    .isEqualTo(EVENT_JSON_WITH_NULL_USER_BOTH_PATH);
+            }
+
+            @Test
+            void mailboxRenamedShouldBeWellDeSerialized() {
+                assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_NULL_USER_BOTH_PATH).get())
+                    .isEqualTo(eventWithNullUserBothPath);
+            }
+        }
+    }
+
+    @Nested
+    class EmptyNameSpaceInMailboxPath {
+
+        @Test
+        void mailboxRenamedShouldBeWellDeSerializedWhenEmptyNameSpaceOldPath() {
+            assertThat(EVENT_SERIALIZER.fromJson(
+                "{" +
+                "  \"MailboxRenamed\":{" +
+                "    \"sessionId\":123456789," +
+                "    \"user\":\"user\"," +
+                "    \"path\":{" +
+                "      \"user\":\"user\"," +
+                "      \"namespace\":\"\"," +
+                "      \"name\":\"oldMailboxName\"" +
+                "     }," +
+                "    \"mailboxId\":\"123456\"," +
+                "    \"newPath\":{" +
+                "      \"namespace\":\"#private\"," +
+                "      \"user\":\"user\"," +
+                "      \"name\":\"newMailboxName\"" +
+                "     }" +
+                "  }" +
+                "}").get())
+            .isEqualTo(DEFAULT_MAILBOX_RENAMED_EVENT);
+        }
+
+        @Test
+        void mailboxRenamedShouldBeWellDeSerializedWhenEmptyNameSpaceNewPath() {
+            assertThat(EVENT_SERIALIZER.fromJson(
+                "{" +
+                "  \"MailboxRenamed\":{" +
+                "    \"sessionId\":123456789," +
+                "    \"user\":\"user\"," +
+                "    \"path\":{" +
+                "      \"user\":\"user\"," +
+                "      \"namespace\":\"#private\"," +
+                "      \"name\":\"oldMailboxName\"" +
+                "     }," +
+                "    \"mailboxId\":\"123456\"," +
+                "    \"newPath\":{" +
+                "      \"namespace\":\"\"," +
+                "      \"user\":\"user\"," +
+                "      \"name\":\"newMailboxName\"" +
+                "     }" +
+                "  }" +
+                "}").get())
+            .isEqualTo(DEFAULT_MAILBOX_RENAMED_EVENT);
+        }
+
+        @Test
+        void mailboxRenamedShouldBeWellDeSerializedWhenEmptyNameSpaceBothPath() {
+            assertThat(EVENT_SERIALIZER.fromJson(
+                "{" +
+                "  \"MailboxRenamed\":{" +
+                "    \"sessionId\":123456789," +
+                "    \"user\":\"user\"," +
+                "    \"path\":{" +
+                "      \"user\":\"user\"," +
+                "      \"namespace\":\"\"," +
+                "      \"name\":\"oldMailboxName\"" +
+                "     }," +
+                "    \"mailboxId\":\"123456\"," +
+                "    \"newPath\":{" +
+                "      \"namespace\":\"\"," +
+                "      \"user\":\"user\"," +
+                "      \"name\":\"newMailboxName\"" +
+                "     }" +
+                "  }" +
+                "}").get())
+            .isEqualTo(DEFAULT_MAILBOX_RENAMED_EVENT);
+        }
+    }
+
+    @Nested
+    class DeserializationErrors {
+
+        @Nested
+        class DeserializationErrorOnUser {
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNullUser() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenEmptyUser() {
+                String eventWithEmptyUser =
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}";
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(eventWithEmptyUser).get())
+                    .isInstanceOf(IllegalArgumentException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenBadUser() {
+                String eventWithBadUser =
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user@user@user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}";
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(eventWithBadUser).get())
+                    .isInstanceOf(IllegalArgumentException.class);
+            }
+        }
+
+        @Nested
+        class DeserializationErrorOnSessionId {
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenStringSessionId() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":\"123456789\"," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNullSessionId() {
+                String eventWithNullSessionId =
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "     }," +
+                    "    \"mailboxId\":\"123456\"," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}";
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(eventWithNullSessionId).get())
+                    .isInstanceOf(NoSuchElementException.class);
+            }
+        }
+
+        @Nested
+        class DeserializationErrorOnMailBoxId {
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNumberMailboxId() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNullMailboxId() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+        }
+
+        @Nested
+        class DeserializationErrorOnOldMailboxPath {
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenMissingOldPathNameSpace() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenOldPathNameSpaceNotString() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":999," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenMissingOldPathUser() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNotStringOldPathUser() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":666," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenMissingOldPathName() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNotStringOldPathName() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":1456" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenMissingNewPathNameSpace() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNewPathNameSpaceNotString() {
+                String eventWithNumberMailboxId =
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":999," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}";
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(eventWithNumberMailboxId).get())
+                    .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenMissingNewPathUser() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNotStringNewPathUser() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"oldMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":4569," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenMissingNewPathName() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+
+            @Test
+            void mailboxRenamedDeSerializeShouldThrowWhenNotStringNewPathName() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
+                    "  \"MailboxRenamed\":{" +
+                    "    \"sessionId\":123456789," +
+                    "    \"user\":\"user\"," +
+                    "    \"path\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":\"newMailboxName\"" +
+                    "    }," +
+                    "    \"mailboxId\":123456," +
+                    "    \"newPath\":{" +
+                    "      \"namespace\":\"#private\"," +
+                    "      \"user\":\"user\"," +
+                    "      \"name\":7529" +
+                    "     }" +
+                    "  }" +
+                    "}").get())
+                .isInstanceOf(NoSuchElementException.class);
+            }
+        }
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org