public void AddPartToPartitionedBatch() { BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part"); var process = TrackingRepository.SingleProcess( p => p.Name == Factory.Areas.Batch.Processes.Aggregate && p.BeginTime > StartTime && p.Value3 == "partition-z"); process.SingleMessagingStep( s => s.Name == BizTalkFactoryApplication.ReceiveLocation <UnitTestBatchAddPartReceiveLocation>().Name && s.MessageType == new SchemaMetadata <Any>().MessageType && s.Status == TrackingStatus.Received && _envelopeSpecName.StartsWith(s.Value1, StringComparison.Ordinal) && s.Value3 == "partition-z"); var addPartMessage = process.SingleMessagingStep( s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name && s.MessageType == new SchemaMetadata <Any>().MessageType && s.Status == TrackingStatus.Sent && _envelopeSpecName.StartsWith(s.Value1, StringComparison.Ordinal) && s.Value3 == "partition-z"); var part = BatchAdapter.Parts.Single(); Assert.That(part.MessagingStepActivityId, Is.EqualTo(addPartMessage.ActivityID)); Assert.That(part.Partition, Is.EqualTo("partition-z")); }
public void TrackBatchReleasedOnPolling() { BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part"); var process = TrackingRepository.SingleProcess( p => p.Name == Factory.Areas.Batch.Processes.Aggregate && p.BeginTime > StartTime); var addPartMessage1 = process.SingleMessagingStep( s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name && s.MessageType == new SchemaMetadata <Any>().MessageType && s.Status == TrackingStatus.Sent && _envelopeSpecName.StartsWith(s.Value1) && s.Value3 == "partition-z"); BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part"); process = TrackingRepository.SingleProcess( p => p.Name == Factory.Areas.Batch.Processes.Aggregate // ReSharper disable once AccessToModifiedClosure && p.BeginTime > process.EndTime); var addPartMessage2 = process.SingleMessagingStep( s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name && s.MessageType == new SchemaMetadata <Any>().MessageType && s.Status == TrackingStatus.Sent && _envelopeSpecName.StartsWith(s.Value1) && s.Value3 == "partition-z"); BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part"); process = TrackingRepository.SingleProcess( p => p.Name == Factory.Areas.Batch.Processes.Aggregate // ReSharper disable once AccessToModifiedClosure && p.BeginTime > process.EndTime); var addPartMessage3 = process.SingleMessagingStep( s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name && s.MessageType == new SchemaMetadata <Any>().MessageType && s.Status == TrackingStatus.Sent && _envelopeSpecName.StartsWith(s.Value1) && s.Value3 == "partition-z"); BatchReleasePort.Enable(); // batch controlled release process process = TrackingRepository.SingleProcess( p => p.Name == Factory.Areas.Batch.Processes.Release && p.BeginTime > StartTime && p.Status == TrackingStatus.Completed); // 1st part process.SingleMessagingStep(s => s.ActivityID == addPartMessage1.ActivityID); // 2nd part process.SingleMessagingStep(s => s.ActivityID == addPartMessage2.ActivityID); // 3rd part process.SingleMessagingStep(s => s.ActivityID == addPartMessage3.ActivityID); // batch content var releaseProcessBatchMessagingStep = process.SingleMessagingStep( s => s.Name == BizTalkFactoryApplication.ReceiveLocation <BatchReceiveLocation>().Name // TODO && s.MessageType == new SchemaMetadata<BatchContent>().MessageType && s.Status == TrackingStatus.Received); // batch content handling process process = TrackingRepository.SingleProcess( p => p.Name == Default.Processes.Unidentified && p.BeginTime > StartTime && p.Status == TrackingStatus.Completed && _envelopeSpecName.StartsWith(p.Value1) && p.Value3 == "partition-z"); var handlingProcessBatchMessagingStep = process.SingleMessagingStep( s => s.Name == BizTalkFactoryApplication.ReceiveLocation <BatchReceiveLocation>().Name // TODO && s.MessageType == new SchemaMetadata<BatchContent>().MessageType && s.Status == TrackingStatus.Received); Assert.That(releaseProcessBatchMessagingStep.ActivityID, Is.EqualTo(handlingProcessBatchMessagingStep.ActivityID)); // a part is linked to both its aggregate and release processes Assert.That(addPartMessage1.Processes.Count(), Is.EqualTo(2)); Assert.That(addPartMessage1.Processes.SingleOrDefault(p => p.Name == Factory.Areas.Batch.Processes.Aggregate), Is.Not.Null); Assert.That(addPartMessage1.Processes.SingleOrDefault(p => p.Name == Factory.Areas.Batch.Processes.Release), Is.Not.Null); // a batch is linked to both its release and handling processes Assert.That(releaseProcessBatchMessagingStep.Processes.Count(), Is.EqualTo(2)); Assert.That(releaseProcessBatchMessagingStep.Processes.SingleOrDefault(p => p.Name == Factory.Areas.Batch.Processes.Release), Is.Not.Null); Assert.That(releaseProcessBatchMessagingStep.Processes.SingleOrDefault(p => p.Name == Default.Processes.Unidentified), Is.Not.Null); }