Inheritance: Taskling.InfrastructureContracts.Blocks.BlockRequestBase
        public void When_FailedDateRangeBlocksExistInTargetPeriodAndNumberIsLessThanBlocksLimit_ThenReturnAllFailedBlocks()
        {
            // ARRANGE
            var now = DateTime.UtcNow;
            var taskExecution1 = _executionHelper.InsertOverrideTaskExecution(_taskDefinitionId, new TimeSpan(0, 1, 0), now.AddMinutes(-12), now.AddMinutes(-1));
            var block1 = _blocksHelper.InsertDateRangeBlock(_taskDefinitionId, now.AddMinutes(-2), now.AddMinutes(-1));
            var block2 = _blocksHelper.InsertDateRangeBlock(_taskDefinitionId, now.AddMinutes(-12), now.AddMinutes(-11));
            _blocksHelper.InsertBlockExecution(taskExecution1, block1, now.AddMinutes(-2), now.AddMinutes(-2), now.AddMinutes(-1), BlockExecutionStatus.Failed);
            _blocksHelper.InsertBlockExecution(taskExecution1, block2, now.AddMinutes(-12), now.AddMinutes(-12), now.AddMinutes(-11), BlockExecutionStatus.Completed);

            var request = new FindFailedBlocksRequest(new TaskId(TestConstants.ApplicationName, TestConstants.TaskName),
                "1",
                BlockType.DateRange,
                DateTime.UtcNow.AddMinutes(-20),
                DateTime.UtcNow,
                2,
                3);

            // ACT
            var sut = CreateSut();
            var failedBlocks = sut.FindFailedRangeBlocks(request);

            // ASSERT
            Assert.AreEqual(1, failedBlocks.Count);
            Assert.AreEqual(block1.ToString(), failedBlocks[0].RangeBlockId);
        }
        public void When_FailedDateRangeBlocksExistInTargetPeriodAndNumberIsGreaterThanBlocksLimit_ThenReturnOldestBlocksUpToCountLimit()
        {
            // ARRANGE
            var now = DateTime.UtcNow;
            var taskExecution1 = _executionHelper.InsertOverrideTaskExecution(_taskDefinitionId, new TimeSpan(0, 1, 0), now.AddMinutes(-32), now.AddMinutes(-1));
            var block1 = _blocksHelper.InsertDateRangeBlock(_taskDefinitionId, now.AddMinutes(-2), now.AddMinutes(-1));
            var block2 = _blocksHelper.InsertDateRangeBlock(_taskDefinitionId, now.AddMinutes(-12), now.AddMinutes(-11));
            var block3 = _blocksHelper.InsertDateRangeBlock(_taskDefinitionId, now.AddMinutes(-22), now.AddMinutes(-21));
            var block4 = _blocksHelper.InsertDateRangeBlock(_taskDefinitionId, now.AddMinutes(-32), now.AddMinutes(-31));
            _blocksHelper.InsertBlockExecution(taskExecution1, block1, now.AddMinutes(-2), now.AddMinutes(-2), now.AddMinutes(-1), BlockExecutionStatus.Failed);
            _blocksHelper.InsertBlockExecution(taskExecution1, block2, now.AddMinutes(-12), now.AddMinutes(-12), now.AddMinutes(-11), BlockExecutionStatus.Failed);
            _blocksHelper.InsertBlockExecution(taskExecution1, block3, now.AddMinutes(-22), now.AddMinutes(-22), now.AddMinutes(-21), BlockExecutionStatus.Failed);
            _blocksHelper.InsertBlockExecution(taskExecution1, block4, now.AddMinutes(-32), now.AddMinutes(-32), now.AddMinutes(-31), BlockExecutionStatus.Completed);

            int blockCountLimit = 2;

            var request = new FindFailedBlocksRequest(new TaskId(TestConstants.ApplicationName, TestConstants.TaskName),
                "1",
                BlockType.DateRange,
                DateTime.UtcNow.AddMinutes(-200),
                DateTime.UtcNow,
                blockCountLimit,
                3);

            // ACT
            var sut = CreateSut();
            var failedBlocks = sut.FindFailedRangeBlocks(request);

            // ASSERT
            Assert.AreEqual(blockCountLimit, failedBlocks.Count);
            Assert.IsTrue(failedBlocks.Any(x => x.RangeBlockId == block2.ToString()));
            Assert.IsTrue(failedBlocks.Any(x => x.RangeBlockId == block3.ToString()));
        }
        public void When_FailedObjectBlocksExistOutsideTargetPeriod_ThenReturnNoBlocks()
        {
            // ARRANGE
            var now = DateTime.UtcNow;
            var taskExecution1 = _executionHelper.InsertOverrideTaskExecution(_taskDefinitionId, new TimeSpan(0, 1, 0), now.AddMinutes(-212), now.AddMinutes(-200));
            var block1 = _blocksHelper.InsertObjectBlock(_taskDefinitionId, now.AddMinutes(-200), Guid.NewGuid().ToString());
            var block2 = _blocksHelper.InsertObjectBlock(_taskDefinitionId, now.AddMinutes(-212), Guid.NewGuid().ToString());
            _blocksHelper.InsertBlockExecution(taskExecution1, block1, now.AddMinutes(-200), now.AddMinutes(-200), now.AddMinutes(-201), BlockExecutionStatus.Failed);
            _blocksHelper.InsertBlockExecution(taskExecution1, block2, now.AddMinutes(-212), now.AddMinutes(-212), now.AddMinutes(-211), BlockExecutionStatus.Completed);

            var request = new FindFailedBlocksRequest(new TaskId(TestConstants.ApplicationName, TestConstants.TaskName),
                "1",
                BlockType.Object,
                DateTime.UtcNow.AddMinutes(-20),
                DateTime.UtcNow,
                2,
                3);

            // ACT
            var sut = CreateSut();
            var failedBlocks = sut.FindFailedObjectBlocks<string>(request);

            // ASSERT
            Assert.AreEqual(0, failedBlocks.Count);
        }