예제 #1
0
        public Envelope <IEvent> Parse(StoredEvent storedEvent)
        {
            Guard.NotNull(storedEvent, nameof(storedEvent));

            var eventData = storedEvent.Data;

            var payloadType  = typeNameRegistry.GetType(eventData.Type);
            var payloadValue = serializer.Deserialize <IEvent>(eventData.Payload, payloadType);

            if (payloadValue is IMigrated <IEvent> migratedEvent)
            {
                payloadValue = migratedEvent.Migrate();

                if (ReferenceEquals(migratedEvent, payloadValue))
                {
                    Debug.WriteLine("Migration should return new event.");
                }
            }

            var envelope = new Envelope <IEvent>(payloadValue, eventData.Headers);

            envelope.SetEventPosition(storedEvent.EventPosition);
            envelope.SetEventStreamNumber(storedEvent.EventStreamNumber);

            return(envelope);
        }
예제 #2
0
        public void Should_set_and_get_event_number()
        {
            const string eventNumber = "123";

            sut.SetEventPosition(eventNumber);

            Assert.Equal(eventNumber, sut.Headers.EventPosition());
            Assert.Equal(eventNumber, sut.Headers["EventNumber"].ToString());
        }
        public void Should_serialize_and_deserialize_envelope()
        {
            var commitId = Guid.NewGuid();

            var inputEvent = new Envelope <MyEvent>(new MyEvent {
                MyProperty = "My-Property"
            });

            inputEvent.SetAggregateId(Guid.NewGuid());
            inputEvent.SetCommitId(commitId);
            inputEvent.SetEventId(Guid.NewGuid());
            inputEvent.SetEventPosition("1");
            inputEvent.SetEventStreamNumber(1);
            inputEvent.SetTimestamp(SystemClock.Instance.GetCurrentInstant());

            var eventData = sut.ToEventData(inputEvent.To <IEvent>(), commitId);

            var outputEvent = sut.Parse(eventData).To <MyEvent>();

            AssertHeaders(inputEvent.Headers, outputEvent.Headers);
            AssertPayload(inputEvent, outputEvent);
        }