public async Task When_Hash_Is_Found_In_Cache_RebuildFile_IsNot_Called_And_Cached_Status_Is_Used()
            {
                // Arrange
                ProcessingOutcome actualOutcome   = ProcessingOutcome.Unmanaged;
                ProcessingOutcome expectedOutcome = ProcessingOutcome.Failed;

                _mockContext.Setup(s => s.CallActivityAsync <OutcomeEntity>(
                                       It.Is <string>(s => s == "FileProcessing_GetEntityFromCache"),
                                       It.IsAny <object>()))
                .ReturnsAsync(new OutcomeEntity
                {
                    FileType   = "docx",
                    FileStatus = expectedOutcome.ToString()
                });

                _mockContext.Setup(s => s.CallActivityAsync <object>(
                                       It.Is <string>(s => s == "FileProcessing_SignalTransactionOutcome"),
                                       It.IsAny <object>()))
                .Callback <string, object>((s, obj) =>
                {
                    var rebuiltOutcome = (RebuildOutcome)obj.GetType().GetField("Item2").GetValue(obj);

                    actualOutcome = rebuiltOutcome.Outcome;
                });

                // Act
                await _fileProcessingOrchestrator.RunOrchestrator(_mockContext.Object, _cloudBlobContainer, _mockLogger.Object);

                // Assert
                _mockContext.Verify(s => s.CallActivityAsync <object>(
                                        It.Is <string>(s => s == "FileProcessing_RebuildFile"),
                                        It.IsAny <object>()), Times.Never);

                Assert.That(actualOutcome, Is.EqualTo(expectedOutcome));
            }
            public async Task When_RebuildOutcome_IsNot_Rebuilt_FailedOutcome_Is_Signaled(ProcessingOutcome returnedOutcome)
            {
                // Arrange
                RebuildOutcome actualOutcome  = null;
                string         actualBlobName = string.Empty;

                var expectedOutcome = new RebuildOutcome
                {
                    Outcome        = returnedOutcome,
                    RebuiltFileSas = string.Empty
                };

                _mockContext.Setup(s => s.CallActivityAsync <string>(
                                       It.Is <string>(s => s == "FileProcessing_GetFileType"),
                                       It.IsAny <object>()))
                .ReturnsAsync("success");

                _mockContext.Setup(s => s.CallActivityAsync <ProcessingOutcome>(
                                       It.Is <string>(s => s == "FileProcessing_RebuildFile"),
                                       It.IsAny <object>()))
                .ReturnsAsync(returnedOutcome);

                _mockContext.Setup(s => s.CallActivityAsync <object>(
                                       It.Is <string>(s => s == "FileProcessing_SignalTransactionOutcome"),
                                       It.IsAny <object>()))
                .Callback <string, object>((s, obj) =>
                {
                    actualBlobName = (string)obj.GetType().GetField("Item1").GetValue(obj);
                    actualOutcome  = (RebuildOutcome)obj.GetType().GetField("Item2").GetValue(obj);
                });

                // Act
                await _fileProcessingOrchestrator.RunOrchestrator(_mockContext.Object, _cloudBlobContainer, _mockLogger.Object);

                // Assert
                Assert.That(actualBlobName, Is.EqualTo(BlobName));
                Assert.That(actualOutcome.Outcome, Is.EqualTo(expectedOutcome.Outcome));
                Assert.That(actualOutcome.RebuiltFileSas, Is.EqualTo(expectedOutcome.RebuiltFileSas));
            }