public virtual ReleaseOverviewData PopulateOverviewData(List <Release> releaseList, DateTimeOffset finishDate, bool assessmentsTeam, bool enterpriseTeam) { var lastReleaseByEnvironment = new Dictionary <int, Release>(); DateTimeOffset?earliestReleaseFinishTime = null; var sumTimeToRestore = 0.0m; foreach (var item in releaseList) { if (!lastReleaseByEnvironment.ContainsKey(item.ReleaseEnvironment.Id)) { lastReleaseByEnvironment.Add(item.ReleaseEnvironment.Id, new Release()); } if (item.FinishTime < earliestReleaseFinishTime || earliestReleaseFinishTime == null) { earliestReleaseFinishTime = item.FinishTime; } if (item.Attempts > 1 && lastReleaseByEnvironment[item.ReleaseEnvironment.Id].Name != item.Name && ReleaseVersionIsLater(item.Name, lastReleaseByEnvironment[item.ReleaseEnvironment.Id].Name)) { sumTimeToRestore = (decimal)(item.FinishTime - lastReleaseByEnvironment[item.ReleaseEnvironment.Id].FinishTime).Value .TotalMinutes; } lastReleaseByEnvironment[item.ReleaseEnvironment.Id] = item; } var releaseWeeks = (finishDate - earliestReleaseFinishTime)?.Days / 7m; var rolledBackReleases = GetRolledBackReleases(releaseList); var releaseOverviewData = new ReleaseOverviewData(); releaseOverviewData.TotalDeploys = releaseList.Count; releaseOverviewData.SuccessfulDeploys = releaseList.Count - rolledBackReleases.Count; releaseOverviewData.RolledBackDeploys = rolledBackReleases.Count; releaseOverviewData.DeployFrequency = releaseWeeks != 0 ? decimal.Round(decimal.Parse((releaseOverviewData.TotalDeploys / releaseWeeks)?.ToString("0.##") !), 2, MidpointRounding.AwayFromZero) : 0; releaseOverviewData.MeanTimeToRestore = rolledBackReleases.Count != 0 ? decimal.Round(decimal.Parse((sumTimeToRestore / rolledBackReleases.Count).ToString("0.##") !), 2, MidpointRounding.AwayFromZero) : 0; releaseOverviewData.ChangeFailPercentage = releaseList.Count != 0 ? decimal.Round( decimal.Parse(((decimal)rolledBackReleases.Count / releaseList.Count * 100).ToString("0.##") !), 2, MidpointRounding.AwayFromZero) : 0; return(releaseOverviewData); }
public async Task When_getting_release_overview_data() { var releaseList = new List <Release> { new Release { Id = 1 }, new Release { Id = 2 } }; var overviewData = new ReleaseOverviewData { ChangeFailPercentage = 4.23m, DeployFrequency = 5.3m, MeanTimeToRestore = 4.68m, RolledBackDeploys = 2, SuccessfulDeploys = 43, TotalDeploys = 45 }; var mockReleaseRepository = new Mock <ReleaseRepository>(); mockReleaseRepository .Setup(x => x.GetReleaseListAsync(It.IsAny <DateTimeOffset>(), It.IsAny <DateTimeOffset>())) .ReturnsAsync(releaseList); var mockReleaseHelper = new Mock <ReleaseHelper>(); mockReleaseHelper.Setup(x => x.DevTeamForReleaseIsSelected(true, true, It.IsAny <Release>())) .Returns(true); mockReleaseHelper .Setup(x => x.PopulateOverviewData(It.IsAny <List <Release> >(), It.IsAny <DateTimeOffset>(), true, true)).Returns(overviewData); var tempOverviewHelper = new OverviewHelper(mockReleaseRepository.Object, mockReleaseHelper.Object); var result = await tempOverviewHelper.GetReleaseOverviewDataAsync(new DateTimeOffset(new DateTime(2021, 1, 11)), new DateTimeOffset(new DateTime(2021, 1, 11)), true, true); Assert.That(result.ChangeFailPercentage, Is.EqualTo(overviewData.ChangeFailPercentage)); Assert.That(result.DeployFrequency, Is.EqualTo(overviewData.DeployFrequency)); Assert.That(result.MeanTimeToRestore, Is.EqualTo(overviewData.MeanTimeToRestore)); Assert.That(result.RolledBackDeploys, Is.EqualTo(overviewData.RolledBackDeploys)); Assert.That(result.SuccessfulDeploys, Is.EqualTo(overviewData.SuccessfulDeploys)); Assert.That(result.TotalDeploys, Is.EqualTo(overviewData.TotalDeploys)); }
public async Task <ReleaseOverviewData> GetReleaseOverviewDataAsync(DateTimeOffset startDate, DateTimeOffset finishDate, bool assessmentsTeam, bool enterpriseTeam) { AssessmentsTeam = assessmentsTeam; EnterpriseTeam = enterpriseTeam; var releaseList = await GetReleaseData(startDate, finishDate); var selectedReleases = releaseList.Where(release => releaseHelper.DevTeamForReleaseIsSelected(assessmentsTeam, enterpriseTeam, release)).ToList(); var overviewData = new ReleaseOverviewData(); if (selectedReleases.Count != 0) { overviewData = releaseHelper.PopulateOverviewData(selectedReleases, finishDate, assessmentsTeam, enterpriseTeam); } return(overviewData); }