public void ToSummary_NoRecords()
        {
            var jenkensProjectsResult = new JenkensProjectsResult();
            var summary = _jenkensTextConverter.ToSummary(jenkensProjectsResult);
            summary.Should().Be("No jenkins data received. Please try again later!");

        }
 public string ToSummary(JenkensProjectsResult jenkensProjectsResult)
 {
     string[] strings = ToSummaryList(jenkensProjectsResult).ToArray();
     if (strings.Length > 0)
     {
         return string.Join(". ", strings);
     }
     return "No jenkins data received. Please try again later!";
 }
 public void ToSummary_OnlyOneGoodRecords()
 {
     var jenkensProjectsResult = new JenkensProjectsResult()
     {
         Jobs = new List<Job>() { 
             new Job() { Color = "blue", Name = "Build - Zapper DB", HealthReport = new List<Health>() { new Health() { Score = 100 } } } ,
         },
     };
     var summary = _jenkensTextConverter.ToSummary(jenkensProjectsResult);
     summary.Should().Contain(", there are currently 1 build on jenkins and they are all passing");
 }
 public void ToSummary_OnlyBadRecords()
 {
     var jenkensProjectsResult = new JenkensProjectsResult()
     {
         Jobs = new List<Job>() { 
             new Job() { Color = "red", Name = "Build - Zapper DB", HealthReport = new List<Health>() { new Health() { Score = 100 } } } ,
             new Job() { Color = "red", Name = "Build - Zapper IPN Service", HealthReport = new List<Health>() { new Health() { Score = 100 } } } 
         },
     };
     var summary = _jenkensTextConverter.ToSummary(jenkensProjectsResult);
     summary.Should().Be("There are currently 2 builds on jenkins and they are all broken. Maybe development is not for you");
 }
 public async Task GetAllProjects_Translate()
 {
     // arrange
     Setup();
     // action
     var projects = await JenkensProjectsResult();
     var jenkensProjectsResult = new JenkensProjectsResult();
     var jenkensTextConverter = new JenkensTextConverter();
     var summary = jenkensTextConverter.ToSummaryList(projects).ToArray();
     
     foreach (var line in summary)
     {
         _log.Info(line);  
     }
     // assert
     summary.Length.Should().BeGreaterOrEqualTo(1);
     
 }
        public IEnumerable<string> ToSummaryList(JenkensProjectsResult jenkensProjectsResult)
        {
            // ReSharper disable SimplifyLinqExpression
            if (jenkensProjectsResult.Jobs != null && !jenkensProjectsResult.Jobs.Any(x => x.IsFailed()))
            {
                yield return
                    string.Format("{2}, there are currently {0} {1} on jenkins and they are all passing",
                                  jenkensProjectsResult.Jobs.Count,
                                  jenkensProjectsResult.Jobs.Count == 1 ? "build" : "builds", GetWelDoneMessage());
            }

            else if (jenkensProjectsResult.Jobs != null && !jenkensProjectsResult.Jobs.Any(x => x.IsPassed()))

            {
                yield return
                    string.Format(
                        "There are currently {0} {1} on jenkins and they are all broken. Maybe development is not for you",
                        jenkensProjectsResult.Jobs.Count,
                        jenkensProjectsResult.Jobs.Count == 1 ? "build" : "builds");
            }
            else if (jenkensProjectsResult.Jobs != null && jenkensProjectsResult.Jobs.Any())
            {
                List<Job> failedValues = jenkensProjectsResult.Jobs.Where(x => x.IsFailed()).ToList();
                yield return
                    string.Format("You have failed me, there are currently {0} {2} on jenkins with {1} {3} failing",
                                  jenkensProjectsResult.Jobs.Count,
                                  failedValues.Count,
                                  jenkensProjectsResult.Jobs.Count == 1 ? "build" : "builds",
                                  failedValues.Count == 1 ? "build" : "builds"
                        );
                string[] failedBuildDetail = FailedBuildDetail(failedValues).ToArray();
                foreach (string failedValue in failedBuildDetail)
                {
                    yield return failedValue;
                }
            }
            // ReSharper restore SimplifyLinqExpression
            string slowestAndFastedBuild = GetSlowestAndFastedBuild(jenkensProjectsResult);
            if (slowestAndFastedBuild != null) yield return slowestAndFastedBuild;

            string mostSuccessFullBuild = GetMostSuccessFullBuild(jenkensProjectsResult);
            if (mostSuccessFullBuild != null) yield return mostSuccessFullBuild;
        }
 public static IEnumerable<Job> GetMyBuildingJobs(this ISettingsManager settingsmanager, JenkensProjectsResult allProjects)
 {
     var myBuildingJobs = GetMyBuildingJobs(settingsmanager);
     return allProjects.Jobs.Where(
         x => myBuildingJobs.Any(b => x.Name.Equals(b, StringComparison.InvariantCultureIgnoreCase)));
 }
        public void ToSummary_OneGoodAndOneBad()
        {
            var jenkensProjectsResult = new JenkensProjectsResult()
            {
                Jobs = new List<Job>() { 
                    new Job() { Color = "blue", Name = "Build - Zapper DB", HealthReport = new List<Health>() { new Health() { Score = 100 } } } ,
                    new Job() { Color = "red", Name = "Build - Zapper IPN Service", 
                        LastFailedBuild = new LastFailedBuild() { 
                            ChangeSet = new ChangeSet() { 
                                items = new List<Item>() {
                                    new Item {author = new Author() {fullName = "Rolf Wessels"}},
                                }},
                                Timestamp = DateTime.Now.AddDays(-1).ToEpochTimeStamp()
                        }
                    }
                },
            };
            var summary = _jenkensTextConverter.ToSummary(jenkensProjectsResult);
            summary.Should()
                   .Be(
                       "You have failed me, there are currently 2 builds on jenkins with 1 build failing. The Build - Zapper IPN Service last failed 1 day ago, It was last modified by Rolf Wessels");

        }
        private static JenkensProjectsResult JenkensProjectsResult()
        {
            if (_jenkensProjectsResult == null)
            {
                var fileStream = File.ReadAllText("save json");
                var jsonDeserializer = new JsonDeserializer();

                _jenkensProjectsResult =
                    jsonDeserializer.Deserialize<JenkensProjectsResult>(new RestResponse() {Content = fileStream});
                _jenkensProjectsResult.Jobs.Count.Should().BeGreaterOrEqualTo(1);
            }

            return _jenkensProjectsResult;
        }
        private string GetMostSuccessFullBuild(JenkensProjectsResult jenkensProjectsResult)
        {
            if (jenkensProjectsResult.Jobs != null)
            {
                var orderedEnumerable =
                    jenkensProjectsResult.Jobs.Where(x => x.Builds != null && x.Builds.Count > 3)
                                         .Select(x => new {x.Name, SuccessFullBuilds = SuccessfulBuildInARow(x.Builds)})
                                         .OrderByDescending(x => x.SuccessFullBuilds)
                                         .ToArray();

                if (orderedEnumerable.Length > 2)
                {
                    return
                        string.Format("{0} has {1} succesfull builds in a row. {2} has {3} succesfull builds in a row",
                                      orderedEnumerable.First().Name,
                                      orderedEnumerable.First().SuccessFullBuilds,
                                      orderedEnumerable.Last().Name,
                                      orderedEnumerable.Last().SuccessFullBuilds);
                }
            }

            return null;
        }
        private string GetSlowestAndFastedBuild(JenkensProjectsResult jenkensProjectsResult)
        {
            if (jenkensProjectsResult.Jobs != null)
            {
                var orderedEnumerable =
                    jenkensProjectsResult.Jobs.Where(x => x.Builds != null && x.Builds.Count > 3)
                                         .Select(x => new {x.Name, Duration = x.Builds.Average(s => s.Duration)})
                                         .OrderBy(x => x.Duration)
                                         .ToArray();

                if (orderedEnumerable.Length > 2)
                {
                    return
                        string.Format(
                            "The fastest build is {0} at {1} per build. The slowest build is {2} at {3} per build",
                            orderedEnumerable.First().Name,
                            HumanReadable(TimeSpan.FromMilliseconds(orderedEnumerable.First().Duration), ""),
                            orderedEnumerable.Last().Name,
                            HumanReadable(TimeSpan.FromMilliseconds(orderedEnumerable.Last().Duration), ""));
                }
            }

            return null;
        }
 private async Task<JenkensProjectsResult> JenkensProjectsResult()
 {
     return _allProjects ?? (_allProjects = await _jenkensApi.GetAllProjects());
 }