public BuildStatus GetBuildInformation(int maxDays = 5, int maxRuns = 10, string teamProject = "*", string buildDefinition = "")
        {
            var buildStatus = new BuildStatus();

            var builds = GetBuildsFromTfs(maxDays, teamProject, buildDefinition);

            var currentDefinition = string.Empty;

            foreach (var build in builds)
            {
                string definitionName = build.BuildDefinition.Name;
                var project = MapBuildToProject(build, definitionName);

                if (IsChildBuild(currentDefinition, definitionName))
                {
                    AddBuildToParentProject(buildStatus, definitionName, project, maxRuns);
                }
                else
                {
                    currentDefinition = definitionName;
                    AddBuild(buildStatus, project);
                }
            }

            return buildStatus;
        }
        public void IndexExpectCorrectRunMapping()
        {
            const string definitionName = "Definition";
            const string projectName = "Project Name";
            const string status = "Success";
            DateTime start = DateTime.Now.AddMinutes(-4d);
            DateTime end = DateTime.Now;

            var buildStatus = new BuildStatus();
            var project = new Project();
            var run = new Project
            {
                DefinitionName = definitionName,
                Name = projectName,
                Status = status,
                StartTime = start,
                FinishTime = end
            };
            project.Runs.Add(run);
            buildStatus.Projects.Add(project);

            this.buildCommunicator
                .Stub(bc => bc.GetBuildInformation(2, 4, "*", string.Empty))
                .Return(buildStatus);

            var buildsController = new BuildsController(buildCommunicator, 2, 4);
            var result = buildsController.Index() as ViewResult;

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Model);

            var model = result.Model as BuildStatusModel;

            Assert.AreEqual(definitionName, model.Projects[0].PreviousRuns[0].DefinitionName);
            Assert.AreEqual(projectName, model.Projects[0].PreviousRuns[0].Name);
            Assert.AreEqual(status, model.Projects[0].PreviousRuns[0].Status);
            Assert.AreEqual(start, model.Projects[0].PreviousRuns[0].StartTime);
            Assert.AreEqual(end, model.Projects[0].PreviousRuns[0].FinishTime);
        }
 private void AddBuildToParentProject(BuildStatus buildStatus, string definitionName, Project project, int maxRuns)
 {
     var parent = buildStatus.Projects.First(p => p.DefinitionName == definitionName);
     if (parent.Runs.Count < maxRuns)
     {
         parent.Runs.Add(project);
     }
 }
 private static void AddBuild(BuildStatus buildStatus, Project project)
 {
     buildStatus.Projects.Add(project);
 }