예제 #1
0
        public void Serialize_DeserializeAsRootType_TypeInformationIsPreserved()
        {
            // Arrange
            var sessionId = Guid.NewGuid();
            var timestamp = DateTime.UtcNow;
            var e         = new UserSessionTimeoutEvent
            {
                Timeout   = TimeSpan.FromMinutes(15),
                UserId    = "The magnificent user",
                Timestamp = timestamp,
                SessionId = sessionId
            };

            var expectedEvent = new UserSessionTimeoutEvent
            {
                Timeout       = TimeSpan.FromMinutes(15),
                UserId        = "The magnificent user",
                Timestamp     = timestamp,
                SessionId     = sessionId,
                ExtensionData = new ExtensionData() // Nothing unknown
            };

            // Pre-asert topic
            e.Topic.Should().Be("User.Session.Timeout", "topic should be automatically assigned from Topic attributes");

            // Act
            var serialized = JsonSerializer.Serialize(e, _jsonSerializerOptions);

            var deserialized = JsonSerializer.Deserialize <Event>(serialized, _jsonSerializerOptions);

            // Assert
            deserialized.Should().BeEquivalentTo(expectedEvent, options => options.RespectingRuntimeTypes(), "type information should be preserved when deserializing as root type");
        }
예제 #2
0
        public void Serialize_DeserializeAsClosestKnownType_UnknownSubTopicAndMember_TypeInformationIsPreserved_ExtensionDataIsPopulated()
        {
            // Arrange
            var sessionId = Guid.NewGuid();
            var timestamp = new DateTime(2020,
                                         1,
                                         13,
                                         14,
                                         44,
                                         27,
                                         987,
                                         DateTimeKind.Utc);
            var serialized =
                $"{{\"Topic\":\"User.Session.Timeout.Monitored\",\"Monitor\":\"MonitoringSystem\",\"Timeout\":\"00:15:00\",\"SessionId\":\"{sessionId}\",\"UserId\":\"The magnificent user\",\"Timestamp\":\"{timestamp:yyyy-MM-ddTHH:mm:ss.FFFFFFFK}\"}}";

            var expectedEvent = new UserSessionTimeoutEvent
            {
                Topic         = "User.Session.Timeout.Monitored",
                Timeout       = TimeSpan.FromMinutes(15),
                UserId        = "The magnificent user",
                Timestamp     = timestamp,
                SessionId     = sessionId,
                ExtensionData = new ExtensionData
                {
                    TypeDescriptor   = null, // Represented by Topic
                    ExtensionMembers =
                    {
                        [1] = new ExtensionMember
                        {
                        Index = 1,
                        Name  = "Monitor",
                        Value = "MonitoringSystem"
                        }
                    }
                }
            };

            // Act
            var deserialized = JsonSerializer.Deserialize <UserSessionTimeoutEvent>(serialized, _jsonSerializerOptions);

            var reSerialized = JsonSerializer.Serialize(deserialized, _jsonSerializerOptions);

            // Assert
            deserialized.Should().BeEquivalentTo(expectedEvent, options => options.RespectingRuntimeTypes(), "type information should be preserved when deserializing as root type");
            reSerialized.Should().BeEquivalentTo(serialized, "serialized data should be preserved when re-serializing");
        }