Skip to content

Commit a65898d

Browse files
committed
added some test around stats
Signed-off-by: Neil South <[email protected]>
1 parent 02b489e commit a65898d

File tree

2 files changed

+99
-1
lines changed

2 files changed

+99
-1
lines changed

src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ public async Task<IActionResult> GetDailyStatsAsync([FromQuery] TimeFilter filte
143143
TotalAwaitingReview = g.Count(i => string.Compare(i.Status, ApplicationReviewStatus.AwaitingReview.ToString(), true) == 0),
144144
});
145145

146+
147+
146148
var pagedStats = statsDto.Skip((filter.PageNumber - 1) * pageSize).Take(pageSize);
147149

148150
var res = CreateStatsPagedResponse(pagedStats, validFilter, statsDto.Count(), _uriService, route);
@@ -152,7 +154,7 @@ public async Task<IActionResult> GetDailyStatsAsync([FromQuery] TimeFilter filte
152154
res.PeriodEnd = filter.EndTime;
153155
res.TotalExecutions = allStats.Count();
154156
res.TotalSucceeded = statsDto.Sum(s => s.TotalApprovals);
155-
res.TotalFailures = statsDto.Sum(s => s.TotalFailures);
157+
res.TotalFailures = statsDto.Sum(s => s.TotalFailures + s.TotalCancelled + s.TotalRejections);
156158
res.TotalInprogress = statsDto.Sum(s => s.TotalAwaitingReview);
157159
res.AverageTotalExecutionSeconds = Math.Round(avgTotalExecution, 2);
158160
res.AverageArgoExecutionSeconds = Math.Round(avgArgoExecution, 2);

tests/UnitTests/WorkflowManager.Tests/Controllers/TaskExecutionStatsControllerTests.cs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,102 @@ public async Task GetAllStatsAsync_Pass_All_Arguments_To_GetStatsAsync_In_Repo()
336336
It.Is<string>(s => s.Equals("")))
337337
);
338338
}
339+
340+
[Fact]
341+
public async Task GetAllStatsAsync_Get_Correct_Reject_Count()
342+
{
343+
var startTime = new DateTime(2023, 4, 4);
344+
var endTime = new DateTime(2023, 4, 5);
345+
const int pageNumber = 1;
346+
const int pageSize = 10;
347+
348+
var executionStats = new ExecutionStats[]
349+
{
350+
new ExecutionStats
351+
{
352+
ExecutionId = Guid.NewGuid().ToString(),
353+
StartedUTC = _startTime,
354+
WorkflowInstanceId= "workflow",
355+
TaskId = "task",
356+
Status = "Failed",
357+
Reason = Messaging.Events.FailureReason.Rejected,
358+
},
359+
};
360+
361+
_repo.Setup(w => w.GetAllStatsAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(executionStats);
362+
363+
var result = await StatsController.GetDailyStatsAsync(new TimeFilter { StartTime = startTime, EndTime = endTime, PageNumber = pageNumber, PageSize = pageSize }, "workflow");
364+
365+
var resultCollection = result.As<OkObjectResult>().Value.As<StatsPagedResponse<IEnumerable<ExecutionStatDayOverview>>>().Data;
366+
367+
Assert.Equal(1, resultCollection.First().TotalExecutions);
368+
Assert.Equal(1, resultCollection.First().TotalRejections);
369+
Assert.Equal(1, resultCollection.First().TotalFailures);
370+
}
371+
372+
[Fact]
373+
public async Task GetAllStatsAsync_Get_Correct_Canceled_Count()
374+
{
375+
var startTime = new DateTime(2023, 4, 4);
376+
var endTime = new DateTime(2023, 4, 5);
377+
const int pageNumber = 1;
378+
const int pageSize = 10;
379+
380+
var executionStats = new ExecutionStats[]
381+
{
382+
new ExecutionStats
383+
{
384+
ExecutionId = Guid.NewGuid().ToString(),
385+
StartedUTC = _startTime,
386+
WorkflowInstanceId= "workflow",
387+
TaskId = "task",
388+
Status = "Failed",
389+
Reason = Messaging.Events.FailureReason.TimedOut,
390+
},
391+
};
392+
393+
_repo.Setup(w => w.GetAllStatsAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(executionStats);
394+
395+
var result = await StatsController.GetDailyStatsAsync(new TimeFilter { StartTime = startTime, EndTime = endTime, PageNumber = pageNumber, PageSize = pageSize }, "workflow");
396+
397+
var resultCollection = result.As<OkObjectResult>().Value.As<StatsPagedResponse<IEnumerable<ExecutionStatDayOverview>>>().Data;
398+
399+
Assert.Equal(1, resultCollection.First().TotalExecutions);
400+
Assert.Equal(1, resultCollection.First().TotalCancelled);
401+
Assert.Equal(0, resultCollection.First().TotalFailures);
402+
}
403+
404+
[Fact]
405+
public async Task GetAllStatsAsync_Get_Correct_Accepted_Count()
406+
{
407+
var startTime = new DateTime(2023, 4, 4);
408+
var endTime = new DateTime(2023, 4, 5);
409+
const int pageNumber = 1;
410+
const int pageSize = 10;
411+
412+
var executionStats = new ExecutionStats[]
413+
{
414+
new ExecutionStats
415+
{
416+
ExecutionId = Guid.NewGuid().ToString(),
417+
StartedUTC = _startTime,
418+
WorkflowInstanceId= "workflow",
419+
TaskId = "task",
420+
Status = "Succeeded",
421+
Reason = Messaging.Events.FailureReason.None,
422+
},
423+
};
424+
425+
_repo.Setup(w => w.GetAllStatsAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>())).ReturnsAsync(executionStats);
426+
427+
var result = await StatsController.GetDailyStatsAsync(new TimeFilter { StartTime = startTime, EndTime = endTime, PageNumber = pageNumber, PageSize = pageSize }, "workflow");
428+
429+
var resultCollection = result.As<OkObjectResult>().Value.As<StatsPagedResponse<IEnumerable<ExecutionStatDayOverview>>>().Data;
430+
431+
Assert.Equal(1, resultCollection.First().TotalExecutions);
432+
Assert.Equal(1, resultCollection.First().TotalApprovals);
433+
Assert.Equal(0, resultCollection.First().TotalFailures);
434+
}
339435
}
340436
#pragma warning restore CS8604 // Possible null reference argument.
341437
#pragma warning restore CS8602 // Dereference of a possibly null reference.

0 commit comments

Comments
 (0)