public async Task Should_pass_message_and_headers_to_partition_key_extractor() { object capturedMessageInstanceFromPartionKeyExtractor = null; IReadOnlyDictionary <string, string> capturedHeadersFromPartionKeyExtractor = null; var partitionKeyExtractor = new PartitionKeyExtractor( (object msg, IReadOnlyDictionary <string, string> headers, out PartitionKey? partitionKey) => { partitionKey = null; capturedMessageInstanceFromPartionKeyExtractor = msg; capturedHeadersFromPartionKeyExtractor = headers; return(true); }); var behavior = new TransactionInformationBeforeTheLogicalOutboxBehavior(partitionKeyExtractor, new ContainerInformationExtractor()); var messageHeaders = new Dictionary <string, string> { { "HeaderKey", "HeaderValue" } }; var messageInstance = new object(); var context = new TestableIncomingLogicalMessageContext { MessageHeaders = messageHeaders, Message = new LogicalMessage(new MessageMetadata(typeof(object)), messageInstance) }; await behavior.Invoke(context, _ => Task.CompletedTask); Assert.That(capturedMessageInstanceFromPartionKeyExtractor, Is.Not.Null.And.EqualTo(messageInstance)); Assert.That(capturedHeadersFromPartionKeyExtractor, Is.Not.Null.And.EqualTo(messageHeaders)); }
public async Task Should_not_set_container_information_when_container_information_extractor_returns_false() { var extractor = new ContainerInformationExtractor( (object msg, IReadOnlyDictionary <string, string> headers, out ContainerInformation? container) => { container = null; return(false); }); var behavior = new TransactionInformationBeforeTheLogicalOutboxBehavior(new CosmosDB.PartitionKeyExtractor(), extractor); var context = new TestableIncomingLogicalMessageContext(); 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 extractor = new ContainerInformationExtractor( (object msg, IReadOnlyDictionary <string, string> headers, out ContainerInformation? container) => { container = new ContainerInformation("containerName", new PartitionKeyPath("/deep/down")); return(true); }); var behavior = new TransactionInformationBeforeTheLogicalOutboxBehavior(new PartitionKeyExtractor(), extractor); var context = new TestableIncomingLogicalMessageContext(); 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( (object msg, IReadOnlyDictionary <string, string> headers, out PartitionKey? key) => { key = new PartitionKey(true); return(true); }); var behavior = new TransactionInformationBeforeTheLogicalOutboxBehavior(partitionKeyExtractor, new ContainerInformationExtractor()); var context = new TestableIncomingLogicalMessageContext(); await behavior.Invoke(context, _ => Task.CompletedTask); Assert.That(context.Extensions.TryGet <PartitionKey>(out var partitionKey), Is.True); Assert.AreEqual(new PartitionKey(true), partitionKey); }