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 2019/01/08 08:00:23 UTC

[04/47] james-project git commit: MAILBOX-359 Factorize tests for Flags ser-deserialization

MAILBOX-359 Factorize tests for Flags ser-deserialization


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

Branch: refs/heads/master
Commit: 5d365c14313a6179b00eb0cdca3d19b637e007eb
Parents: d7910fc
Author: Benoit Tellier <bt...@linagora.com>
Authored: Mon Dec 24 14:40:58 2018 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Tue Jan 8 14:37:57 2019 +0700

----------------------------------------------------------------------
 .../event/json/AddedSerializationTest.java      | 372 +-------------
 .../event/json/ExpungedSerializationTest.java   | 372 +-------------
 .../json/FlagsUpdatedSerializationTest.java     | 488 +------------------
 .../apache/james/event/json/dtos/FlagsTest.java | 240 +++++++++
 4 files changed, 263 insertions(+), 1209 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5d365c14/mailbox/event/json/src/test/java/org/apache/james/event/json/AddedSerializationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/AddedSerializationTest.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/AddedSerializationTest.java
index d71b9e8..61ce957 100644
--- a/mailbox/event/json/src/test/java/org/apache/james/event/json/AddedSerializationTest.java
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/AddedSerializationTest.java
@@ -20,7 +20,6 @@
 package org.apache.james.event.json;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
@@ -140,157 +139,6 @@ class AddedSerializationTest {
     }
 
     @Nested
-    class WithFlags {
-
-        @Nested
-        class WithEmptyFlags {
-            private final Flags emptyFlags = new FlagsBuilder().build();
-            private final MailboxListener.Added emptyFlagsAddedEvent = new MailboxListener.Added(SESSION_ID, USER, MAILBOX_PATH, MAILBOX_ID,
-                ImmutableSortedMap.of(
-                    MESSAGE_UID,
-                    new MessageMetaData(MESSAGE_UID, MOD_SEQ, emptyFlags, SIZE, Date.from(INSTANT), MESSAGE_ID)));
-
-            private final String emptyFlagsAddedEventJson =
-                "{" +
-                "  \"Added\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"added\": {" +
-                "      \"123456\": {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"flags\": {" +
-                "          \"systemFlags\":[], " +
-                "          \"userFlags\":[]}," +
-                "        \"size\": 45,  " +
-                "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                "        \"messageId\": \"42\"" +
-                "      }" +
-                "    }," +
-                "    \"sessionId\": 42," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void addedShouldBeWellSerializedWhenEmptyFlags() {
-                assertThatJson(EVENT_SERIALIZER.toJson(emptyFlagsAddedEvent))
-                    .isEqualTo(emptyFlagsAddedEventJson);
-            }
-
-            @Test
-            void addedShouldBeWellDeSerializedWhenEmptyFlags() {
-                assertThat(EVENT_SERIALIZER.fromJson(emptyFlagsAddedEventJson).get())
-                    .isEqualTo(emptyFlagsAddedEvent);
-            }
-        }
-
-        @Nested
-        class WithOnlyUserFlags {
-            private final Flags onlyUserFlags = new FlagsBuilder()
-                .add("Custom 1", "Custom 2", "")
-                .build();
-            private final MailboxListener.Added onlyUserFlagsAddedEvent = new MailboxListener.Added(SESSION_ID, USER, MAILBOX_PATH, MAILBOX_ID,
-                ImmutableSortedMap.of(
-                    MESSAGE_UID,
-                    new MessageMetaData(MESSAGE_UID, MOD_SEQ, onlyUserFlags, SIZE, Date.from(INSTANT), MESSAGE_ID)));
-
-            private final String userOnlyFlagsAddedEventJson =
-                "{" +
-                "  \"Added\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"added\": {" +
-                "      \"123456\": {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"flags\": {" +
-                "          \"systemFlags\":[], " +
-                "          \"userFlags\":[\"Custom 1\", \"Custom 2\", \"\"]}," +
-                "        \"size\": 45,  " +
-                "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                "        \"messageId\": \"42\"" +
-                "      }" +
-                "    }," +
-                "    \"sessionId\": 42," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void addedShouldBeWellSerializedWhenOnlyUserFlags() {
-                assertThatJson(EVENT_SERIALIZER.toJson(onlyUserFlagsAddedEvent))
-                    .when(IGNORING_ARRAY_ORDER)
-                    .isEqualTo(userOnlyFlagsAddedEventJson);
-            }
-
-            @Test
-            void addedShouldBeWellDeSerializedWhenOnlyUserFlags() {
-                assertThat(EVENT_SERIALIZER.fromJson(userOnlyFlagsAddedEventJson).get())
-                    .isEqualTo(onlyUserFlagsAddedEvent);
-            }
-        }
-
-        @Nested
-        class WithOnlySystemFlags {
-            private final Flags onlySystemFlags = new FlagsBuilder()
-                .add(Flags.Flag.SEEN, Flags.Flag.ANSWERED, Flags.Flag.DELETED)
-                .build();
-            private final MailboxListener.Added onlySystemFlagsAddedEvent = new MailboxListener.Added(SESSION_ID, USER, MAILBOX_PATH, MAILBOX_ID,
-                ImmutableSortedMap.of(
-                    MESSAGE_UID,
-                    new MessageMetaData(MESSAGE_UID, MOD_SEQ, onlySystemFlags, SIZE, Date.from(INSTANT), MESSAGE_ID)));
-
-            private final String systemOnlyFlagsAddedEventJson =
-                "{" +
-                "  \"Added\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"added\": {" +
-                "      \"123456\": {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"flags\": {" +
-                "          \"systemFlags\":[\"Seen\",\"Answered\",\"Deleted\"], " +
-                "          \"userFlags\":[]}," +
-                "        \"size\": 45,  " +
-                "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                "        \"messageId\": \"42\"" +
-                "      }" +
-                "    }," +
-                "    \"sessionId\": 42," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void addedShouldBeWellSerializedWhenOnlySystemFlags() {
-                assertThatJson(EVENT_SERIALIZER.toJson(onlySystemFlagsAddedEvent))
-                    .when(IGNORING_ARRAY_ORDER)
-                    .isEqualTo(systemOnlyFlagsAddedEventJson);
-            }
-
-            @Test
-            void addedShouldBeWellDeSerializedWhenOnlySystemFlags() {
-                assertThat(EVENT_SERIALIZER.fromJson(systemOnlyFlagsAddedEventJson).get())
-                    .isEqualTo(onlySystemFlagsAddedEvent);
-            }
-        }
-    }
-
-    @Nested
     class WithInternalDate {
 
         @Test
@@ -1000,13 +848,10 @@ class AddedSerializationTest {
                 }
             }
 
-            @Nested
-            class DeserializationErrorOnFlags {
-
-                @Test
-                void addedShouldThrowWhenFlagsIsNull() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
+            @Test
+            void addedShouldThrowWhenFlagsIsNull() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
                         "  \"Added\": {" +
                         "    \"path\": {" +
                         "      \"namespace\": \"#private\"," +
@@ -1029,215 +874,6 @@ class AddedSerializationTest {
                         "  }" +
                         "}").get())
                     .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenSystemFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Added\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[null, \"Draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenUserFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Added\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                            "        \"flags\": {" +
-                            "          \"systemFlags\":[\"Draft\"], " +
-                            "          \"userFlags\":[\"User Custom Flag\", null]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenSystemFlagsContainsNumberElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Added\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[42, \"Draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenUserFlagsContainsNumberElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Added\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                            "        \"flags\": {" +
-                            "          \"systemFlags\":[\"Draft\"], " +
-                            "          \"userFlags\":[\"User Custom Flag\", 42]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenSystemFlagsDoNotHaveTheRightCase() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Added\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[\"draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenNoSystemFlags() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Added\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenNoUserFlags() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                            "  \"Added\": {" +
-                            "    \"path\": {" +
-                            "      \"namespace\": \"#private\"," +
-                            "      \"user\": \"user\"," +
-                            "      \"name\": \"mailboxName\"" +
-                            "    }," +
-                            "    \"mailboxId\": \"18\"," +
-                            "    \"added\": {" +
-                            "      \"123456\": {" +
-                            "        \"uid\": 123456," +
-                            "        \"modSeq\": 35," +
-                            "        \"flags\": {" +
-                            "          \"systemFlags\":[\"Draft\"]}," +
-                            "        \"size\": 45,  " +
-                            "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                            "        \"messageId\": \"42\"" +
-                            "      }" +
-                            "    }," +
-                            "    \"sessionId\": 42," +
-                            "    \"user\": \"user\"" +
-                            "  }" +
-                            "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5d365c14/mailbox/event/json/src/test/java/org/apache/james/event/json/ExpungedSerializationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/ExpungedSerializationTest.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/ExpungedSerializationTest.java
index 40a7054..336aafa 100644
--- a/mailbox/event/json/src/test/java/org/apache/james/event/json/ExpungedSerializationTest.java
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/ExpungedSerializationTest.java
@@ -20,7 +20,6 @@
 package org.apache.james.event.json;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
-import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
@@ -140,157 +139,6 @@ class ExpungedSerializationTest {
     }
 
     @Nested
-    class WithFlags {
-
-        @Nested
-        class WithEmptyFlags {
-            private final Flags emptyFlags = new FlagsBuilder().build();
-            private final MailboxListener.Expunged emptyFlagsExpungedEvent = new MailboxListener.Expunged(SESSION_ID, USER, MAILBOX_PATH, MAILBOX_ID,
-                ImmutableMap.of(
-                    MESSAGE_UID,
-                    new MessageMetaData(MESSAGE_UID, MOD_SEQ, emptyFlags, SIZE, Date.from(INSTANT), MESSAGE_ID)));
-
-            private final String emptyFlagsExpungedEventJson =
-                "{" +
-                "  \"Expunged\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"expunged\": {" +
-                "      \"123456\": {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"flags\": {" +
-                "          \"systemFlags\":[], " +
-                "          \"userFlags\":[]}," +
-                "        \"size\": 45,  " +
-                "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                "        \"messageId\": \"42\"" +
-                "      }" +
-                "    }," +
-                "    \"sessionId\": 42," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void expungedShouldBeWellSerializedWhenEmptyFlags() {
-                assertThatJson(EVENT_SERIALIZER.toJson(emptyFlagsExpungedEvent))
-                    .isEqualTo(emptyFlagsExpungedEventJson);
-            }
-
-            @Test
-            void expungedShouldBeWellDeSerializedWhenEmptyFlags() {
-                assertThat(EVENT_SERIALIZER.fromJson(emptyFlagsExpungedEventJson).get())
-                    .isEqualTo(emptyFlagsExpungedEvent);
-            }
-        }
-
-        @Nested
-        class WithOnlyUserFlags {
-            private final Flags onlyUserFlags = new FlagsBuilder()
-                .add("Custom 1", "Custom 2", "")
-                .build();
-            private final MailboxListener.Expunged onlyUserFlagsExpungedEvent = new MailboxListener.Expunged(SESSION_ID, USER, MAILBOX_PATH, MAILBOX_ID,
-                ImmutableMap.of(
-                    MESSAGE_UID,
-                    new MessageMetaData(MESSAGE_UID, MOD_SEQ, onlyUserFlags, SIZE, Date.from(INSTANT), MESSAGE_ID)));
-
-            private final String userOnlyFlagsExpungedEventJson =
-                "{" +
-                "  \"Expunged\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"expunged\": {" +
-                "      \"123456\": {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"flags\": {" +
-                "          \"systemFlags\":[], " +
-                "          \"userFlags\":[\"Custom 1\", \"Custom 2\", \"\"]}," +
-                "        \"size\": 45,  " +
-                "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                "        \"messageId\": \"42\"" +
-                "      }" +
-                "    }," +
-                "    \"sessionId\": 42," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void expungedShouldBeWellSerializedWhenOnlyUserFlags() {
-                assertThatJson(EVENT_SERIALIZER.toJson(onlyUserFlagsExpungedEvent))
-                    .when(IGNORING_ARRAY_ORDER)
-                    .isEqualTo(userOnlyFlagsExpungedEventJson);
-            }
-
-            @Test
-            void expungedShouldBeWellDeSerializedWhenOnlyUserFlags() {
-                assertThat(EVENT_SERIALIZER.fromJson(userOnlyFlagsExpungedEventJson).get())
-                    .isEqualTo(onlyUserFlagsExpungedEvent);
-            }
-        }
-
-        @Nested
-        class WithOnlySystemFlags {
-            private final Flags onlySystemFlags = new FlagsBuilder()
-                .add(Flags.Flag.SEEN, Flags.Flag.ANSWERED, Flags.Flag.DELETED)
-                .build();
-            private final MailboxListener.Expunged onlySystemFlagsExpungedEvent = new MailboxListener.Expunged(SESSION_ID, USER, MAILBOX_PATH, MAILBOX_ID,
-                ImmutableMap.of(
-                    MESSAGE_UID,
-                    new MessageMetaData(MESSAGE_UID, MOD_SEQ, onlySystemFlags, SIZE, Date.from(INSTANT), MESSAGE_ID)));
-
-            private final String systemOnlyFlagsExpungedEventJson =
-                "{" +
-                "  \"Expunged\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"expunged\": {" +
-                "      \"123456\": {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"flags\": {" +
-                "          \"systemFlags\":[\"Seen\",\"Answered\",\"Deleted\"], " +
-                "          \"userFlags\":[]}," +
-                "        \"size\": 45,  " +
-                "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                "        \"messageId\": \"42\"" +
-                "      }" +
-                "    }," +
-                "    \"sessionId\": 42," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void expungedShouldBeWellSerializedWhenOnlySystemFlags() {
-                assertThatJson(EVENT_SERIALIZER.toJson(onlySystemFlagsExpungedEvent))
-                    .when(IGNORING_ARRAY_ORDER)
-                    .isEqualTo(systemOnlyFlagsExpungedEventJson);
-            }
-
-            @Test
-            void expungedShouldBeWellDeSerializedWhenOnlySystemFlags() {
-                assertThat(EVENT_SERIALIZER.fromJson(systemOnlyFlagsExpungedEventJson).get())
-                    .isEqualTo(onlySystemFlagsExpungedEvent);
-            }
-        }
-    }
-
-    @Nested
     class WithInternalDate {
 
         @Test
@@ -1001,13 +849,10 @@ class ExpungedSerializationTest {
                 }
             }
 
-            @Nested
-            class DeserializationErrorOnFlags {
-
-                @Test
-                void addedShouldThrowWhenFlagsIsNull() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
+            @Test
+            void addedShouldThrowWhenFlagsIsNull() {
+                assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
+                    "{" +
                         "  \"Expunged\": {" +
                         "    \"path\": {" +
                         "      \"namespace\": \"#private\"," +
@@ -1029,216 +874,7 @@ class ExpungedSerializationTest {
                         "    \"user\": \"user\"" +
                         "  }" +
                         "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenSystemFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Expunged\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"expunged\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[null, \"Draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenUserFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Expunged\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"expunged\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[\"Draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\", null]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenSystemFlagsContainsNumberElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Expunged\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"expunged\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[42, \"Draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenUserFlagsContainsNumberElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Expunged\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"expunged\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[\"Draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\", 42]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenSystemFlagsDoNotHaveTheRightCase() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Expunged\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"expunged\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[\"draft\"], " +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenNoSystemFlags() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Expunged\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"expunged\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"userFlags\":[\"User Custom Flag\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                        .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void addedShouldThrowWhenNoUserFlags() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"Expunged\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": \"#private\"," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"expunged\": {" +
-                        "      \"123456\": {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": 35," +
-                        "        \"flags\": {" +
-                        "          \"systemFlags\":[\"Draft\"]}," +
-                        "        \"size\": 45,  " +
-                        "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                        "        \"messageId\": \"42\"" +
-                        "      }" +
-                        "    }," +
-                        "    \"sessionId\": 42," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
                     .isInstanceOf(NoSuchElementException.class);
-                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5d365c14/mailbox/event/json/src/test/java/org/apache/james/event/json/FlagsUpdatedSerializationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/FlagsUpdatedSerializationTest.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/FlagsUpdatedSerializationTest.java
index 90c0a01..2c9bc1e 100644
--- a/mailbox/event/json/src/test/java/org/apache/james/event/json/FlagsUpdatedSerializationTest.java
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/FlagsUpdatedSerializationTest.java
@@ -136,16 +136,13 @@ class FlagsUpdatedSerializationTest {
     }
 
     @Nested
-    class WithUpdatedFlags {
+    class WithEmptyUpdatedFlags {
+        private final List<UpdatedFlags> emptyUpdatedFlags = ImmutableList.of();
+        private final MailboxListener.FlagsUpdated emptyUpdatedFlagsEvent = new MailboxListener.FlagsUpdated(SESSION_ID, USER, MAILBOX_PATH,
+            MAILBOX_ID, emptyUpdatedFlags);
 
-        @Nested
-        class EmptyUpdatedFlags {
-            private final List<UpdatedFlags> emptyUpdatedFlags = ImmutableList.of();
-            private final MailboxListener.FlagsUpdated emptyUpdatedFlagsEvent = new MailboxListener.FlagsUpdated(SESSION_ID, USER, MAILBOX_PATH,
-                MAILBOX_ID, emptyUpdatedFlags);
-
-            private static final String EVENT_JSON_WITH_EMPTY_UPDATED_FLAGS =
-                "{" +
+        private static final String EVENT_JSON_WITH_EMPTY_UPDATED_FLAGS =
+            "{" +
                 "  \"FlagsUpdated\": {" +
                 "    \"path\": {" +
                 "      \"namespace\": \"#private\"," +
@@ -159,159 +156,17 @@ class FlagsUpdatedSerializationTest {
                 "  }" +
                 "}";
 
-            @Test
-            void flagsUpdatedShouldBeWellSerialized() {
-                assertThatJson(EVENT_SERIALIZER.toJson(emptyUpdatedFlagsEvent))
-                    .when(Option.IGNORING_ARRAY_ORDER)
-                    .isEqualTo(EVENT_JSON_WITH_EMPTY_UPDATED_FLAGS);
-            }
-
-            @Test
-            void flagsUpdatedShouldBeWellDeSerialized() {
-                assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_EMPTY_UPDATED_FLAGS).get())
-                    .isEqualTo(emptyUpdatedFlagsEvent);
-            }
-        }
-
-        @Nested
-        class EmptyOldFlags {
-            private final UpdatedFlags emptyOldFlags = UpdatedFlags.builder()
-                .uid(MESSAGE_UID_1)
-                .modSeq(MOD_SEQ_1)
-                .oldFlags(FlagsBuilder.builder().build())
-                .newFlags(NEW_FLAGS_1)
-                .build();
-            private final MailboxListener.FlagsUpdated emptyOldFlagsUpdatedFlagsEvent = new MailboxListener.FlagsUpdated(SESSION_ID, USER, MAILBOX_PATH,
-                MAILBOX_ID, ImmutableList.of(emptyOldFlags));
-
-            private static final String EVENT_JSON_WITH_EMPTY_OLD_FLAGS =
-                "{" +
-                "  \"FlagsUpdated\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"sessionId\": 42," +
-                "    \"updatedFlags\": [" +
-                "      {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"oldFlags\": {\"systemFlags\":[],\"userFlags\":[]}," +
-                "        \"newFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                "      }" +
-                "    ]," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void flagsUpdatedShouldBeWellSerialized() {
-                assertThatJson(EVENT_SERIALIZER.toJson(emptyOldFlagsUpdatedFlagsEvent))
-                    .when(Option.IGNORING_ARRAY_ORDER)
-                    .isEqualTo(EVENT_JSON_WITH_EMPTY_OLD_FLAGS);
-            }
-
-            @Test
-            void flagsUpdatedShouldBeWellDeSerialized() {
-                assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_EMPTY_OLD_FLAGS).get())
-                    .isEqualTo(emptyOldFlagsUpdatedFlagsEvent);
-            }
-        }
-
-        @Nested
-        class EmptyNewFlags {
-            private final UpdatedFlags emptyNewFlags = UpdatedFlags.builder()
-                .uid(MESSAGE_UID_1)
-                .modSeq(MOD_SEQ_1)
-                .oldFlags(OLD_FLAGS_1)
-                .newFlags(FlagsBuilder.builder().build())
-                .build();
-            private final MailboxListener.FlagsUpdated emptyNewFlagsUpdatedFlagsEvent = new MailboxListener.FlagsUpdated(SESSION_ID, USER, MAILBOX_PATH,
-                MAILBOX_ID, ImmutableList.of(emptyNewFlags));
-
-            private static final String EVENT_JSON_WITH_EMPTY_NEW_FLAGS =
-                "{" +
-                "  \"FlagsUpdated\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"sessionId\": 42," +
-                "    \"updatedFlags\": [" +
-                "      {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"oldFlags\": {\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
-                "        \"newFlags\": {\"systemFlags\":[],\"userFlags\":[]}" +
-                "      }" +
-                "    ]," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void flagsUpdatedShouldBeWellSerialized() {
-                assertThatJson(EVENT_SERIALIZER.toJson(emptyNewFlagsUpdatedFlagsEvent))
-                    .when(Option.IGNORING_ARRAY_ORDER)
-                    .isEqualTo(EVENT_JSON_WITH_EMPTY_NEW_FLAGS);
-            }
-
-            @Test
-            void flagsUpdatedShouldBeWellDeSerialized() {
-                assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_EMPTY_NEW_FLAGS).get())
-                    .isEqualTo(emptyNewFlagsUpdatedFlagsEvent);
-            }
+        @Test
+        void flagsUpdatedShouldBeWellSerialized() {
+            assertThatJson(EVENT_SERIALIZER.toJson(emptyUpdatedFlagsEvent))
+                .when(Option.IGNORING_ARRAY_ORDER)
+                .isEqualTo(EVENT_JSON_WITH_EMPTY_UPDATED_FLAGS);
         }
 
-        @Nested
-        class EmptyOldFlagsAndNewFlags {
-            private final UpdatedFlags emptyFlags = UpdatedFlags.builder()
-                .uid(MESSAGE_UID_1)
-                .modSeq(MOD_SEQ_1)
-                .oldFlags(FlagsBuilder.builder().build())
-                .newFlags(FlagsBuilder.builder().build())
-                .build();
-            private final MailboxListener.FlagsUpdated emptyFlagsUpdatedFlagsEvent = new MailboxListener.FlagsUpdated(SESSION_ID, USER, MAILBOX_PATH,
-                MAILBOX_ID, ImmutableList.of(emptyFlags));
-
-            private static final String EVENT_JSON_WITH_EMPTY_OLD_AND_NEW_FLAGS =
-                "{" +
-                "  \"FlagsUpdated\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"sessionId\": 42," +
-                "    \"updatedFlags\": [" +
-                "      {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"oldFlags\": {\"systemFlags\":[],\"userFlags\":[]}," +
-                "        \"newFlags\": {\"systemFlags\":[],\"userFlags\":[]}" +
-                "      }" +
-                "    ]," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-            @Test
-            void flagsUpdatedShouldBeWellSerialized() {
-                assertThatJson(EVENT_SERIALIZER.toJson(emptyFlagsUpdatedFlagsEvent))
-                    .when(Option.IGNORING_ARRAY_ORDER)
-                    .isEqualTo(EVENT_JSON_WITH_EMPTY_OLD_AND_NEW_FLAGS);
-            }
-
-            @Test
-            void flagsUpdatedShouldBeWellDeSerialized() {
-                assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_EMPTY_OLD_AND_NEW_FLAGS).get())
-                    .isEqualTo(emptyFlagsUpdatedFlagsEvent);
-            }
+        @Test
+        void flagsUpdatedShouldBeWellDeSerialized() {
+            assertThat(EVENT_SERIALIZER.fromJson(EVENT_JSON_WITH_EMPTY_UPDATED_FLAGS).get())
+                .isEqualTo(emptyUpdatedFlagsEvent);
         }
     }
 
@@ -611,7 +466,6 @@ class FlagsUpdatedSerializationTest {
 
             @Nested
             class DeserializationErrorOnOldFlags {
-
                 @Test
                 void flagsUpdatedShouldThrowWhenOldFlagsIsNull() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
@@ -637,162 +491,6 @@ class FlagsUpdatedSerializationTest {
                         "}").get())
                     .isInstanceOf(NoSuchElementException.class);
                 }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": {\"systemFlags\":[null,\"Draft\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenUserFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Draft\"],\"userFlags\":[\"New Flag 1\", null]}," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsDoesNotContainString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": {\"systemFlags\":[42,\"Draft\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsContainsUnknownString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"unKnown\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsContainsBadCaseString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"dRaFt\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenUserFlagsDoesNotContainString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Draft\"],\"userFlags\":[\"New Flag 1\", 42]}," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
             }
 
             @Nested
@@ -822,162 +520,6 @@ class FlagsUpdatedSerializationTest {
                         "}").get())
                     .isInstanceOf(NoSuchElementException.class);
                 }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"newFlags\": {\"systemFlags\":[null,\"Draft\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenUserFlagsContainsNullElements() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Draft\"],\"userFlags\":[\"New Flag 1\", null]}," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsDoesNotContainString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"newFlags\": {\"systemFlags\":[42,\"Draft\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsContainsUnknownString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"newFlags\": {\"systemFlags\":[\"unKnown\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenSystemFlagsContainsBadCaseString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"newFlags\": {\"systemFlags\":[\"dRaFt\"],\"userFlags\":[\"New Flag 1\"]}," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
-
-                @Test
-                void flagsUpdatedShouldThrowWhenUserFlagsDoesNotContainString() {
-                    assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
-                        "{" +
-                        "  \"FlagsUpdated\": {" +
-                        "    \"path\": {" +
-                        "      \"namespace\": 482," +
-                        "      \"user\": \"user\"," +
-                        "      \"name\": \"mailboxName\"" +
-                        "    }," +
-                        "    \"mailboxId\": \"18\"," +
-                        "    \"sessionId\": 42," +
-                        "    \"updatedFlags\": [" +
-                        "      {" +
-                        "        \"uid\": 123456," +
-                        "        \"modSeq\": \"35\"," +
-                        "        \"newFlags\": {\"systemFlags\":[\"Draft\"],\"userFlags\":[\"New Flag 1\", 42]}," +
-                        "        \"oldFlags\": {\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
-                        "      }" +
-                        "    ]," +
-                        "    \"user\": \"user\"" +
-                        "  }" +
-                        "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
-                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5d365c14/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/FlagsTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/FlagsTest.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/FlagsTest.java
new file mode 100644
index 0000000..a41c245
--- /dev/null
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/FlagsTest.java
@@ -0,0 +1,240 @@
+/****************************************************************
+ * 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.dtos;
+
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.NoSuchElementException;
+
+import javax.mail.Flags;
+
+import org.apache.james.event.json.DTOs;
+import org.apache.james.event.json.JsonSerialize;
+import org.apache.james.mailbox.model.TestId;
+import org.apache.james.mailbox.model.TestMessageId;
+import org.junit.jupiter.api.Test;
+
+import play.api.libs.json.Json;
+
+class FlagsTest {
+    private static final JsonSerialize JSON_SERIALIZE = new JsonSerialize(new TestId.Factory(), new TestMessageId.Factory());
+
+    @Test
+    void emptyFlagsShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags()))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[],\"userFlags\":[]}");
+    }
+
+    @Test
+    void answeredShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags(Flags.Flag.ANSWERED)))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[\"Answered\"],\"userFlags\":[]}");
+    }
+
+    @Test
+    void deletedShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags(Flags.Flag.DELETED)))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[\"Deleted\"],\"userFlags\":[]}");
+    }
+
+    @Test
+    void draftShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags(Flags.Flag.DRAFT)))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[\"Draft\"],\"userFlags\":[]}");
+    }
+
+    @Test
+    void flaggedShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags(Flags.Flag.FLAGGED)))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[\"Flagged\"],\"userFlags\":[]}");
+    }
+
+    @Test
+    void recentShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags(Flags.Flag.RECENT)))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[\"Recent\"],\"userFlags\":[]}");
+    }
+
+    @Test
+    void seenShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags(Flags.Flag.SEEN)))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[\"Seen\"],\"userFlags\":[]}");
+    }
+
+    @Test
+    void userFlagShouldBeWellSerialized() {
+        assertThatJson(JSON_SERIALIZE.flagWrites().writes(DTOs.Flags$.MODULE$.fromJavaFlags(
+            new Flags("user flag")))
+            .toString())
+            .isEqualTo("{\"systemFlags\":[],\"userFlags\":[\"user flag\"]}");
+    }
+
+    @Test
+    void emptyFlagsShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[],\"userFlags\":[]}"))
+                .get()))
+            .isEqualTo(new Flags());
+    }
+
+    @Test
+    void answeredShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"Answered\"],\"userFlags\":[]}"))
+                .get()))
+            .isEqualTo(new Flags(Flags.Flag.ANSWERED));
+    }
+
+    @Test
+    void deletedShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"Deleted\"],\"userFlags\":[]}"))
+                .get()))
+            .isEqualTo(new Flags(Flags.Flag.DELETED));
+    }
+
+    @Test
+    void draftShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"Draft\"],\"userFlags\":[]}"))
+                .get()))
+            .isEqualTo(new Flags(Flags.Flag.DRAFT));
+    }
+
+    @Test
+    void flaggedShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"Flagged\"],\"userFlags\":[]}"))
+                .get()))
+            .isEqualTo(new Flags(Flags.Flag.FLAGGED));
+    }
+
+    @Test
+    void recentShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"Recent\"],\"userFlags\":[]}"))
+                .get()))
+            .isEqualTo(new Flags(Flags.Flag.RECENT));
+    }
+
+    @Test
+    void seenShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"Seen\"],\"userFlags\":[]}"))
+                .get()))
+            .isEqualTo(new Flags(Flags.Flag.SEEN));
+    }
+
+    @Test
+    void userFlagShouldBeWellDeSerialized() {
+        assertThat(DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[],\"userFlags\":[\"user flag\"]}"))
+                .get()))
+            .isEqualTo(new Flags("user flag"));
+    }
+
+    @Test
+    void deserializeShouldThrowWhenUnknownSystemFlag() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"unknown\"],\"userFlags\":[]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenBadCaseSystemFlag() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[\"AnSwErEd\"],\"userFlags\":[]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenNullSystemFlag() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":null,\"userFlags\":[]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenSystemFlagContainsNullElements() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[null,\"Draft\"],\"userFlags\":[]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenSystemFlagContainsNotStringElements() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[42,\"Draft\"],\"userFlags\":[]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenUserFlagsContainsNullElements() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[],\"userFlags\":[null, \"a\"]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenUserFlagsContainsNonStringElements() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[],\"userFlags\":[42, \"a\"]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenNoUserFlags() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"systemFlags\":[]}"))
+                .get()))
+            .isInstanceOf(NoSuchElementException.class);
+    }
+
+    @Test
+    void deserializeShouldThrowWhenNoSystemFlags() {
+        assertThatThrownBy(() -> DTOs.Flags$.MODULE$.toJavaFlags(
+            JSON_SERIALIZE.flagsReads().reads(Json.parse("{\"userFlags\":[]}"))
+                .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