示例#1
0
        public async Task Should_not_set_container_when_container_information_extractor_returns_false()
        {
            var containerInformationExtractor = new ContainerInformationExtractor(
                (IReadOnlyDictionary <string, string> headers, out ContainerInformation? container) =>
            {
                container = null;
                return(false);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(new PartitionKeyExtractor(), containerInformationExtractor);

            var context = new TestableTransportReceiveContext();

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(context.Extensions.TryGet <ContainerInformation>(out _), Is.False);
        }
示例#2
0
        public async Task Should_set_container_when_container_information_extractor_returns_true()
        {
            var containerInformationExtractor = new ContainerInformationExtractor(
                (IReadOnlyDictionary <string, string> headers, out ContainerInformation? container) =>
            {
                container = new ContainerInformation("containerName", new PartitionKeyPath("/deep/down"));
                return(true);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(new CosmosDB.PartitionKeyExtractor(), containerInformationExtractor);

            var context = new TestableTransportReceiveContext();

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(context.Extensions.TryGet <ContainerInformation>(out var containerInformation), Is.True);
            Assert.AreEqual(new ContainerInformation("containerName", new PartitionKeyPath("/deep/down")), containerInformation);
        }
示例#3
0
        public async Task Should_set_partition_key_when_partition_key_extractor_returns_true()
        {
            var partitionKeyExtractor = new PartitionKeyExtractor(
                (IReadOnlyDictionary <string, string> headers, out PartitionKey? key) =>
            {
                key = new PartitionKey(true);
                return(true);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(partitionKeyExtractor, new ContainerInformationExtractor());

            var context = new TestableTransportReceiveContext();

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(context.Extensions.TryGet <PartitionKey>(out var partitionKey), Is.True);
            Assert.AreEqual(new PartitionKey(true), partitionKey);
        }
示例#4
0
        public async Task Should_pass_headers_to_partition_key_extractor()
        {
            IReadOnlyDictionary <string, string> capturedHeaders = null;
            var partitionKeyExtractor = new PartitionKeyExtractor(
                (IReadOnlyDictionary <string, string> headers, out PartitionKey? key) =>
            {
                key             = null;
                capturedHeaders = headers;
                return(false);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(partitionKeyExtractor, new ContainerInformationExtractor());

            var context = new TestableTransportReceiveContext();

            context.Message.Headers.Add("TheAnswer", "Is42");

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(capturedHeaders, Is.EqualTo(context.Message.Headers));
        }