Пример #1
0
        public async Task ThenItIsUsed()
        {
            // Arrange
            var handler  = new InspectableHandler <SimpleMessage>();
            var accessor = new RecordingMessageContextAccessor(new MessageContextAccessor());

            var subject         = Guid.NewGuid().ToString();
            var subjectProvider = new ConstantSubjectProvider(subject);

            var services = GivenJustSaying()
                           .ConfigureJustSaying((builder) =>
                                                builder.WithLoopbackTopic <SimpleMessage>(UniqueName))
                           .ConfigureJustSaying(builder =>
                                                builder.Services(s => s.WithMessageContextAccessor(() => accessor)))
                           .ConfigureJustSaying((builder) =>
                                                builder.Messaging(m =>
                                                                  m.WithMessageSubjectProvider(subjectProvider)))
                           .AddSingleton <IHandlerAsync <SimpleMessage> >(handler);

            var id      = Guid.NewGuid();
            var message = new SimpleMessage()
            {
                Id = id
            };

            using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1));

            await WhenAsync(
                services,
                async (publisher, listener, cancellationToken) =>
            {
                await listener.StartAsync(cancellationToken);
                await publisher.StartAsync(cancellationToken);

                // Let's send an OrderPlaced, but the subject will be a GUID
                // because of the custom subject provider
                await publisher.PublishAsync(message, cancellationToken);

                await Patiently.AssertThatAsync(OutputHelper,
                                                () =>
                {
                    var receivedMessage = handler.ReceivedMessages.ShouldHaveSingleItem();
                    receivedMessage.Id.ShouldBe(id);

                    var context    = accessor.ValuesWritten.ShouldHaveSingleItem();
                    dynamic json   = JsonConvert.DeserializeObject(context.Message.Body);
                    string subject = json.Subject;
                    subject.ShouldBe(subject);
                });
            });
        }
Пример #2
0
    public async Task Then_The_Message_Is_Handled()
    {
        // Arrange
        var future   = new Future <SimpleMessage>();
        var accessor = new RecordingMessageContextAccessor(new MessageContextAccessor());

        var services = GivenJustSaying()
                       .ConfigureJustSaying(
            (builder) => builder.WithLoopbackQueue <SimpleMessage>(UniqueName))
                       .ConfigureJustSaying(
            (builder) => builder.Services(
                (options) => options.WithMessageContextAccessor(() => accessor)))

                       .AddSingleton(future)
                       .AddSingleton <IMessageContextAccessor>(accessor)
                       .AddJustSayingHandler <SimpleMessage, HandlerWithMessageContext>();

        string content = Guid.NewGuid().ToString();

        var message = new SimpleMessage
        {
            Content = content
        };

        await WhenAsync(
            services,
            async (publisher, listener, cancellationToken) =>
        {
            await listener.StartAsync(cancellationToken);
            await publisher.StartAsync(cancellationToken);

            // Act
            await publisher.PublishAsync(message, cancellationToken);

            // Assert
            await future.DoneSignal;

            accessor.ValuesWritten.Count.ShouldBe(1);
        });
    }