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); }
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); }
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); }
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)); }