コード例 #1
0
        public async Task ShouldScheduleEvent4()
        {
            // arrange
            string topic     = Guid.NewGuid().ToString();
            var    processor = new TestMessageProcessor();

            host.RegisterMessageProcessor("barbaz", processor);

            var settings = publisterSettings.Copy();

            settings.Topic = topic;
            var publisher     = new DomainEventPublisher(settings, new NullLogger <DomainEventPublisher>());
            var correlationId = Guid.NewGuid().ToString();
            var scheduleDate  = DateTime.UtcNow.AddDays(1);

            // act
            var @event = new TestEvent()
            {
                IntValue = random.Next(), StringValue = Guid.NewGuid().ToString()
            };
            await publisher.ScheduleAsync <TestEvent>(@event, scheduleDate, new EventProperties()
            {
                EventType = "foo", Topic = "bar", RoutingKey = "baz", CorrelationId = correlationId
            }).ConfigureAwait(false);

            // assert
            Assert.Single(processor.Messages);
            var message = processor.Messages[0];

            Assert.Equal(@event.IntValue, JsonConvert.DeserializeObject <TestEvent>(message.GetBody <string>()).IntValue);
            Assert.Equal(@event.StringValue, JsonConvert.DeserializeObject <TestEvent>(message.GetBody <string>()).StringValue);
            Assert.Equal("foo", message.ApplicationProperties[Constants.MESSAGE_TYPE_KEY]);
            Assert.Equal(correlationId, message.Properties.CorrelationId);
            ((DateTime)message.MessageAnnotations[new Symbol(Constants.SCHEDULED_ENQUEUE_TIME_UTC)]).Should().BeCloseTo(scheduleDate);
        }