Repository: james-project
Updated Branches:
  refs/heads/master 110e9a2a2 -> 3764ac48e


http://git-wip-us.apache.org/repos/asf/james-project/blob/ae28a25a/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 73521c7..7676b6f 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
@@ -81,7 +81,9 @@ class ExpungedSerializationTest {
         "      \"123456\": {" +
         "        \"uid\": 123456," +
         "        \"modSeq\": 35," +
-        "        \"flags\": [\"User Custom Flag\", \"\\\\Answered\", 
\"\\\\Draft\"]," +
+        "        \"flags\": {" +
+        "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+        "          \"userFlags\":[\"User Custom Flag\"]}," +
         "        \"size\": 45,  " +
         "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
         "        \"messageId\": \"42\"" +
@@ -162,7 +164,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": []," +
+                "        \"flags\": {" +
+                "          \"systemFlags\":[], " +
+                "          \"userFlags\":[]}," +
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                 "        \"messageId\": \"42\"" +
@@ -209,7 +213,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": [\"Custom 1\", \"Custom 2\", \"\"]," +
+                "        \"flags\": {" +
+                "          \"systemFlags\":[], " +
+                "          \"userFlags\":[\"Custom 1\", \"Custom 2\", \"\"]}," 
+
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                 "        \"messageId\": \"42\"" +
@@ -257,7 +263,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": [\"\\\\Seen\", \"\\\\Answered\", 
\"\\\\Deleted\"]," +
+                "        \"flags\": {" +
+                "          
\"systemFlags\":[\"Seen\",\"Answered\",\"Deleted\"], " +
+                "          \"userFlags\":[]}," +
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                 "        \"messageId\": \"42\"" +
@@ -281,44 +289,6 @@ class ExpungedSerializationTest {
                     .isEqualTo(onlySystemFlagsExpungedEvent);
             }
         }
-
-        @Nested
-        class WithFlagCaseSensitive {
-
-            private static final String CASE_SENSITIVE_SYSTEM_FLAGS_EVENT_JSON 
=
-                "{" +
-                "  \"Expunged\": {" +
-                "    \"path\": {" +
-                "      \"namespace\": \"#private\"," +
-                "      \"user\": \"user\"," +
-                "      \"name\": \"mailboxName\"" +
-                "    }," +
-                "    \"mailboxId\": \"18\"," +
-                "    \"expunged\": {" +
-                "      \"123456\": {" +
-                "        \"uid\": 123456," +
-                "        \"modSeq\": 35," +
-                "        \"flags\": [\"User Custom Flag\", \"\\\\answereD\", 
\"\\\\dRaFt\"]," +
-                "        \"size\": 45,  " +
-                "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
-                "        \"messageId\": \"42\"" +
-                "      }" +
-                "    }," +
-                "    \"sessionId\": 42," +
-                "    \"user\": \"user\"" +
-                "  }" +
-                "}";
-
-             @Test
-            void expungedShouldCareAboutSystemFlagsCaseSensitive() {
-                 MailboxListener.Expunged deSerializedEvent = 
(MailboxListener.Expunged) EVENT_SERIALIZER
-                     .fromJson(CASE_SENSITIVE_SYSTEM_FLAGS_EVENT_JSON)
-                     .get();
-
-                 
assertThat(deSerializedEvent.getMetaData(MESSAGE_UID).getFlags().getSystemFlags())
-                     .isEmpty();
-            }
-        }
     }
 
     @Nested
@@ -343,7 +313,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": [\"User Custom Flag\", \"\\\\Answered\", 
\"\\\\Draft\"]," +
+                "        \"flags\": {" +
+                "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                "          \"userFlags\":[\"User Custom Flag\"]}," +
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41:51+00:00\"," +
                 "        \"messageId\": \"42\"" +
@@ -375,7 +347,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": [\"User Custom Flag\", \"\\\\Answered\", 
\"\\\\Draft\"]," +
+                "        \"flags\": {" +
+                "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                "          \"userFlags\":[\"User Custom Flag\"]}," +
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41:51Z\"," +
                 "        \"messageId\": \"42\"" +
@@ -407,7 +381,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": [\"User Custom Flag\", \"\\\\Answered\", 
\"\\\\Draft\"]," +
+                "        \"flags\": {" +
+                "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                "          \"userFlags\":[\"User Custom Flag\"]}," +
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41Z\"," +
                 "        \"messageId\": \"42\"" +
@@ -437,7 +413,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": [\"User Custom Flag\", \"\\\\Answered\", 
\"\\\\Draft\"]," +
+                "        \"flags\": {" +
+                "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                "          \"userFlags\":[\"User Custom Flag\"]}," +
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                 "        \"messageId\": \"42\"" +
@@ -465,7 +443,9 @@ class ExpungedSerializationTest {
                 "      \"123456\": {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"flags\": [\"User Custom Flag\", \"\\\\Answered\", 
\"\\\\Draft\"]," +
+                "        \"flags\": {" +
+                "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                "          \"userFlags\":[\"User Custom Flag\"]}," +
                 "        \"size\": 45,  " +
                 "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                 "        \"messageId\": \"42\"" +
@@ -501,7 +481,9 @@ class ExpungedSerializationTest {
             "      \"123456\": {" +
             "        \"uid\": 123456," +
             "        \"modSeq\": 35," +
-            "        \"flags\": [\"User Custom Flag\", \"\\\\Answered\", 
\"\\\\Draft\"]," +
+            "        \"flags\": {" +
+            "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+            "          \"userFlags\":[\"User Custom Flag\"]}," +
             "        \"size\": 45,  " +
             "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
             "        \"messageId\": \"42\"" +
@@ -545,7 +527,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -572,7 +556,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -600,7 +586,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -631,7 +619,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -658,7 +648,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -686,7 +678,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -716,7 +710,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -744,7 +740,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -772,7 +770,9 @@ class ExpungedSerializationTest {
                     "      \"123456\": {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                    "        \"flags\": {" +
+                    "          \"systemFlags\":[\"Answered\",\"Draft\"], " +
+                    "          \"userFlags\":[\"User Custom Flag\"]}," +
                     "        \"size\": 45,  " +
                     "        \"internalDate\": \"2018-12-14T09:41:51.541Z\"," +
                     "        \"messageId\": \"42\"" +
@@ -806,7 +806,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -837,7 +839,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -869,7 +873,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -897,7 +903,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -951,7 +959,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": \"123456\"," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -979,7 +989,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": null," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -1011,7 +1023,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -1039,7 +1053,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": null," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -1072,7 +1088,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": \"45\",  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -1100,7 +1118,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": null,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -1132,7 +1152,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": 42" +
@@ -1160,7 +1182,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": null" +
@@ -1191,7 +1215,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": \"2018-12-14 
12:52:36+07:00\"," +
                         "        \"messageId\": \"42\"" +
@@ -1219,7 +1245,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": \"2018-12-14\"," +
                         "        \"messageId\": \"42\"" +
@@ -1247,7 +1275,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": \"2018-12-14TZ\"," +
                         "        \"messageId\": \"42\"" +
@@ -1275,7 +1305,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": 
\"2018-12-14T09:41:51.541\"," +
                         "        \"messageId\": \"42\"" +
@@ -1303,7 +1335,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": \"2018-12-14Z\"," +
                         "        \"messageId\": \"42\"" +
@@ -1331,7 +1365,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": \"\"," +
                         "        \"messageId\": \"42\"" +
@@ -1359,7 +1395,9 @@ class ExpungedSerializationTest {
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"User Custom Flag\", 
\"\\\\Answered\", \"\\\\Draft\"]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Answered\",\"Draft\"], " 
+
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
                         "        \"internalDate\": null," +
                         "        \"messageId\": \"42\"" +
@@ -1377,7 +1415,7 @@ class ExpungedSerializationTest {
             class DeserializationErrorOnFlags {
 
                 @Test
-                void expungedShouldThrowWhenFlagsIsNull() {
+                void addedShouldThrowWhenFlagsIsNull() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
                         "  \"Expunged\": {" +
@@ -1393,7 +1431,7 @@ class ExpungedSerializationTest {
                         "        \"modSeq\": 35," +
                         "        \"flags\": null," +
                         "        \"size\": 45,  " +
-                        "        \"internalDate\": \"\"," +
+                        "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
                         "      }" +
                         "    }," +
@@ -1401,27 +1439,29 @@ class ExpungedSerializationTest {
                         "    \"user\": \"user\"" +
                         "  }" +
                         "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
+                        .isInstanceOf(NoSuchElementException.class);
                 }
 
                 @Test
-                void expungedShouldThrowWhenFlagsContainsNullElements() {
+                void addedShouldThrowWhenSystemFlagsContainsNullElements() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
-                        "  \"Added\": {" +
+                        "  \"Expunged\": {" +
                         "    \"path\": {" +
                         "      \"namespace\": \"#private\"," +
                         "      \"user\": \"user\"," +
                         "      \"name\": \"mailboxName\"" +
                         "    }," +
                         "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
+                        "    \"expunged\": {" +
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"flag 1\", null, \"flags 2\", 
null]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[null, \"Draft\"], " +
+                        "          \"userFlags\":[\"User Custom Flag\"]}," +
                         "        \"size\": 45,  " +
-                        "        \"internalDate\": \"\"," +
+                        "        \"internalDate\": 
\"2018-12-14T09:41:51.541Z\"," +
                         "        \"messageId\": \"42\"" +
                         "      }" +
                         "    }," +
@@ -1429,27 +1469,177 @@ class ExpungedSerializationTest {
                         "    \"user\": \"user\"" +
                         "  }" +
                         "}").get())
-                    .isInstanceOf(NoSuchElementException.class);
+                        .isInstanceOf(NoSuchElementException.class);
                 }
 
                 @Test
-                void expungedShouldThrowWhenFlagsContainsNumberElements() {
+                void addedShouldThrowWhenUserFlagsContainsNullElements() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
-                        "  \"Added\": {" +
+                        "  \"Expunged\": {" +
                         "    \"path\": {" +
                         "      \"namespace\": \"#private\"," +
                         "      \"user\": \"user\"," +
                         "      \"name\": \"mailboxName\"" +
                         "    }," +
                         "    \"mailboxId\": \"18\"," +
-                        "    \"added\": {" +
+                        "    \"expunged\": {" +
                         "      \"123456\": {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"flags\": [\"flag 1\", 1254, \"flags 2\", 
125.36]," +
+                        "        \"flags\": {" +
+                        "          \"systemFlags\":[\"Draft\"], " +
+                        "          \"userFlags\":[\"User Custom Flag\", 
null]}," +
                         "        \"size\": 45,  " +
-                        "        \"internalDate\": \"\"," +
+                        "        \"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\"" +
                         "      }" +
                         "    }," +

http://git-wip-us.apache.org/repos/asf/james-project/blob/ae28a25a/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 63316e1..e6e12ba 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
@@ -106,14 +106,14 @@ class FlagsUpdatedSerializationTest {
         "      {" +
         "        \"uid\": 123456," +
         "        \"modSeq\": 35," +
-        "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-        "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
         "      }," +
         "      {" +
         "        \"uid\": 654321," +
         "        \"modSeq\": 36," +
-        "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-        "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", \"\\\\Seen\" 
]" +
+        "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
         "      }" +
         "    ]," +
         "    \"user\": \"user\"" +
@@ -154,14 +154,14 @@ class FlagsUpdatedSerializationTest {
                 "      {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                 "      }," +
                 "      {" +
                 "        \"uid\": 654321," +
                 "        \"modSeq\": 36," +
-                "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                 "      }" +
                 "    ]," +
                 "    \"user\": \"user\"" +
@@ -186,14 +186,14 @@ class FlagsUpdatedSerializationTest {
                 "      {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                 "      }," +
                 "      {" +
                 "        \"uid\": 654321," +
                 "        \"modSeq\": 36," +
-                "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                 "      }" +
                 "    ]," +
                 "    \"user\": \"user\"" +
@@ -223,14 +223,14 @@ class FlagsUpdatedSerializationTest {
             "      {" +
             "        \"uid\": 123456," +
             "        \"modSeq\": 35," +
-            "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-            "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+            "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+            "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
             "      }," +
             "      {" +
             "        \"uid\": 654321," +
             "        \"modSeq\": 36," +
-            "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-            "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+            "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+            "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
             "      }" +
             "    ]," +
             "    \"user\": \"user\"" +
@@ -314,8 +314,8 @@ class FlagsUpdatedSerializationTest {
                 "      {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"oldFlags\": []," +
-                "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                "        \"oldFlags\": {\"systemFlags\":[],\"userFlags\":[]}," 
+
+                "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                 "      }" +
                 "    ]," +
                 "    \"user\": \"user\"" +
@@ -361,8 +361,8 @@ class FlagsUpdatedSerializationTest {
                 "      {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                "        \"newFlags\": []" +
+                "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                "        \"newFlags\": {\"systemFlags\":[],\"userFlags\":[]}" +
                 "      }" +
                 "    ]," +
                 "    \"user\": \"user\"" +
@@ -408,8 +408,8 @@ class FlagsUpdatedSerializationTest {
                 "      {" +
                 "        \"uid\": 123456," +
                 "        \"modSeq\": 35," +
-                "        \"oldFlags\": []," +
-                "        \"newFlags\": []" +
+                "        \"oldFlags\": {\"systemFlags\":[],\"userFlags\":[]}," 
+
+                "        \"newFlags\": {\"systemFlags\":[],\"userFlags\":[]}" +
                 "      }" +
                 "    ]," +
                 "    \"user\": \"user\"" +
@@ -451,14 +451,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": \"user\"" +
@@ -483,14 +483,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": \"user\"" +
@@ -515,14 +515,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": \"user\"" +
@@ -550,14 +550,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]" +
                     "  }" +
@@ -581,14 +581,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": 4569" +
@@ -613,14 +613,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": \"user@user@anotherUser\"" +
@@ -647,14 +647,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": \"user\"" +
@@ -679,14 +679,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": \"user\"" +
@@ -711,14 +711,14 @@ class FlagsUpdatedSerializationTest {
                     "      {" +
                     "        \"uid\": 123456," +
                     "        \"modSeq\": 35," +
-                    "        \"oldFlags\": [\"Old Flag 1\", \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                    "        \"newFlags\": [\"New Flag 1\", \"\\\\Answered\", 
\"\\\\Draft\"]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                     "      }," +
                     "      {" +
                     "        \"uid\": 654321," +
                     "        \"modSeq\": 36," +
-                    "        \"oldFlags\": [\"Old Flag 2\", \"\\\\Flagged\", 
\"\\\\Recent\"]," +
-                    "        \"newFlags\": [\"New Flag 2\", \"\\\\Answered\", 
\"\\\\Seen\" ]" +
+                    "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                    "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                     "      }" +
                     "    ]," +
                     "    \"user\": \"user\"" +
@@ -749,14 +749,14 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }," +
                         "      {" +
                         "        \"uid\": 654321," +
                         "        \"modSeq\": 36," +
-                        "        \"oldFlags\": [\"Old Flag 2\", 
\"\\\\Flagged\", \"\\\\Recent\"]," +
-                        "        \"newFlags\": [\"New Flag 2\", 
\"\\\\Answered\", \"\\\\Seen\" ]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -784,14 +784,14 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }," +
                         "      {" +
                         "        \"uid\": 654321," +
                         "        \"modSeq\": 36," +
-                        "        \"oldFlags\": [\"Old Flag 2\", 
\"\\\\Flagged\", \"\\\\Recent\"]," +
-                        "        \"newFlags\": [\"New Flag 2\", 
\"\\\\Answered\", \"\\\\Seen\" ]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -820,14 +820,14 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }," +
                         "      {" +
                         "        \"uid\": 654321," +
                         "        \"modSeq\": 36," +
-                        "        \"oldFlags\": [\"Old Flag 2\", 
\"\\\\Flagged\", \"\\\\Recent\"]," +
-                        "        \"newFlags\": [\"New Flag 2\", 
\"\\\\Answered\", \"\\\\Seen\" ]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -852,14 +852,14 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }," +
                         "      {" +
                         "        \"uid\": 654321," +
                         "        \"modSeq\": 36," +
-                        "        \"oldFlags\": [\"Old Flag 2\", 
\"\\\\Flagged\", \"\\\\Recent\"]," +
-                        "        \"newFlags\": [\"New Flag 2\", 
\"\\\\Answered\", \"\\\\Seen\" ]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Flagged\",\"Recent\"],\"userFlags\":[\"Old Flag 2\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Seen\"],\"userFlags\":[\"New Flag 2\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -892,8 +892,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": \"123456\"," +
                         "        \"modSeq\": 35," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -918,8 +918,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": null," +
                         "        \"modSeq\": 35," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -944,8 +944,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 12563.3564," +
                         "        \"modSeq\": 35," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -974,8 +974,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1000,8 +1000,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": null," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1026,8 +1026,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": 35.2567454," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Deleted\",\"Seen\"],\"userFlags\":[\"Old Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1057,7 +1057,7 @@ class FlagsUpdatedSerializationTest {
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
                         "        \"oldFlags\": null," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1067,7 +1067,7 @@ class FlagsUpdatedSerializationTest {
                 }
 
                 @Test
-                void flagsUpdatedShouldThrowWhenOldFlagsContainsNullElements() 
{
+                void 
flagsUpdatedShouldThrowWhenSystemFlagsContainsNullElements() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
                         "  \"FlagsUpdated\": {" +
@@ -1082,8 +1082,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [null, null, \"\\\\Deleted\", 
\"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[null,\"Draft\"],\"userFlags\":[\"New Flag 1\"]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1093,7 +1093,7 @@ class FlagsUpdatedSerializationTest {
                 }
 
                 @Test
-                void 
flagsUpdatedShouldThrowWhenOldFlagsContainsNotStringElements() {
+                void 
flagsUpdatedShouldThrowWhenUserFlagsContainsNullElements() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
                         "  \"FlagsUpdated\": {" +
@@ -1108,8 +1108,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 1256, 
5894.9523]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Draft\"],\"userFlags\":[\"New Flag 1\", null]}," +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1119,7 +1119,7 @@ class FlagsUpdatedSerializationTest {
                 }
 
                 @Test
-                void flagsUpdatedShouldThrowWhenOldFlagsContainsNestedArray() {
+                void 
flagsUpdatedShouldThrowWhenSystemFlagsDoesNotContainString() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
                         "  \"FlagsUpdated\": {" +
@@ -1134,8 +1134,86 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
[\"\\\\Answered\", \"\\\\Draft\"]]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
\"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"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\"" +
@@ -1163,8 +1241,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": null" +
+                        "        \"newFlags\": null," +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1174,7 +1252,7 @@ class FlagsUpdatedSerializationTest {
                 }
 
                 @Test
-                void flagsUpdatedShouldThrowWhenNewFlagsContainsNullElements() 
{
+                void 
flagsUpdatedShouldThrowWhenSystemFlagsContainsNullElements() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
                         "  \"FlagsUpdated\": {" +
@@ -1189,8 +1267,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [null, \"\\\\Answered\", 
\"\\\\Draft\", null]" +
+                        "        \"newFlags\": 
{\"systemFlags\":[null,\"Draft\"],\"userFlags\":[\"New Flag 1\"]}," +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1200,7 +1278,7 @@ class FlagsUpdatedSerializationTest {
                 }
 
                 @Test
-                void 
flagsUpdatedShouldThrowWhenNewFlagsContainsNotStringElements() {
+                void 
flagsUpdatedShouldThrowWhenUserFlagsContainsNullElements() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
                         "  \"FlagsUpdated\": {" +
@@ -1215,8 +1293,8 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 1666.3984, 
2152, \"\\\\Answered\", \"\\\\Draft\"]" +
+                        "        \"newFlags\": 
{\"systemFlags\":[\"Draft\"],\"userFlags\":[\"New Flag 1\", null]}," +
+                        "        \"oldFlags\": 
{\"systemFlags\":[\"Answered\",\"Draft\"],\"userFlags\":[\"New Flag 1\"]}" +
                         "      }" +
                         "    ]," +
                         "    \"user\": \"user\"" +
@@ -1226,7 +1304,7 @@ class FlagsUpdatedSerializationTest {
                 }
 
                 @Test
-                void flagsUpdatedShouldThrowWhenNewFlagsContainsNestedArray() {
+                void 
flagsUpdatedShouldThrowWhenSystemFlagsDoesNotContainString() {
                     assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(
                         "{" +
                         "  \"FlagsUpdated\": {" +
@@ -1241,8 +1319,86 @@ class FlagsUpdatedSerializationTest {
                         "      {" +
                         "        \"uid\": 123456," +
                         "        \"modSeq\": \"35\"," +
-                        "        \"oldFlags\": [\"Old Flag 1\", 
\"\\\\Deleted\", \"\\\\Seen\"]," +
-                        "        \"newFlags\": [\"New Flag 1\", 
[\"\\\\Answered\", \"\\\\Draft\"]]" +
+                        "        \"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\"" +
@@ -1253,5 +1409,4 @@ class FlagsUpdatedSerializationTest {
             }
         }
     }
-
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to