public void TestingFullSetup() { var template = new BuildTemplate { BuildId = "bt1", BuildName = "Build1", BuildCount = 15, BuildNumberPattern = "1.{0}", StartBuildNumber = 2, FinishBuildNumber = 4, StartBuildPackages = new Dictionary<string, string> { { "Package1", "1.0" }, { "Package2", "1.0" } }, FinishBuildPackages = new Dictionary<string, string> { { "Package1", "1.1" }, { "Package2", "1.0" } }, IssueCount = 5, NestedIssueDepth = 1, NestedIssueChance = 80, CreateNuGetPackageChangeManifests = true }; var resolver = TestHelpers.CreateMockedAggregateBuildDeltaResolver(new[]{template}); var result = resolver.CreateChangeManifestFromBuildTypeId("bt1", null, "1.2", "1.4",false,true); //Assert Assert.AreEqual(2,result.ChangeDetails.Count); Assert.AreEqual(2,result.NuGetPackageChanges.Count); }
private static void SetExpectations(BuildTemplate template, ITeamCityApi api, IExternalIssueResolver issueResolver, PackageBuildMappingCache packageCache) { var startBuild = string.Format(template.BuildNumberPattern, template.StartBuildNumber); var finishBuild = string.Format(template.BuildNumberPattern, template.FinishBuildNumber); //BuildType/Builds/ChangeDetails A.CallTo(() => api.GetBuildTypeDetailsById(template.BuildId)) .Returns(new BuildTypeDetails { Id = template.BuildId, Name = template.BuildName, Description = template.BuildName, }); var changeDetails = SetupBuildTypeAndBuilds(api, template); A.CallTo(() => api.GetChangeDetailsByBuildTypeAndBuildNumber(template.BuildId, startBuild, finishBuild, A <IEnumerable <Build> > .Ignored)) .Returns(changeDetails.Where(c => Convert.ToInt16(c.Id) > template.StartBuildNumber && Convert.ToInt16(c.Id) <= template.FinishBuildNumber).ToList()); //Issues if (template.IssueCount > 0) { var issues = Enumerable.Range(1, template.IssueCount).Select(i => new Issue { Id = RandomNumber.Next(2000).ToString() }).ToList(); A.CallTo(() => api.GetIssuesByBuildTypeAndBuildRange(template.BuildId, startBuild, finishBuild, A <IEnumerable <Build> > .Ignored)) .Returns(issues); A.CallTo(issueResolver).WithReturnType <IEnumerable <ExternalIssueDetails> >() .Returns(CreateExternalIssueDetails(issues, template)); } //NuGetPackages SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); }
private static IEnumerable<ChangeDetail> SetupBuildTypeAndBuilds(ITeamCityApi api, BuildTemplate template) { A.CallTo(() => api.GetBuildDetailsByBuildId(template.BuildId)).Returns(new BuildDetails {BuildTypeId = template.BuildId, Name = template.BuildName, Id = template.BuildId}); var builds = Enumerable.Range(1, template.BuildCount).Select(i => new Build {BuildTypeId = template.BuildId, Id = i.ToString(), Number = String.Format(template.BuildNumberPattern, i)}); var changeDetails = Enumerable.Range(1, template.BuildCount).Select(i => new ChangeDetail { Comment = Company.CatchPhrase(), Id = i.ToString(), Username = Name.FullName(), Version = (100+i*10+RandomNumber.Next(9)).ToString(), Files = Enumerable.Range(1,RandomNumber.Next(1,50)).Select(j => new FileDetails { beforerevision = RandomNumber.Next(50,500).ToString(), afterrevision = RandomNumber.Next(450, 700).ToString(), File = Path.GetRandomFileName(), relativefile = Path.GetRandomFileName() }).ToList(), }); A.CallTo(() => api.GetBuildsByBuildType(template.BuildId)).Returns(builds); return changeDetails; }
private static void SetNugetPackageDependencyExpectations(ITeamCityApi api, PackageBuildMappingCache cache, BuildTemplate template, IExternalIssueResolver issueResolver) { var initial = template.StartBuildPackages.Select(p => new TeamCityApi.PackageDetails {Id = p.Key, Version = p.Value}).ToList(); var final = template.FinishBuildPackages.Select(p => new TeamCityApi.PackageDetails { Id = p.Key, Version = p.Value }).ToList(); if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.StartBuildNumber.ToString())) .Returns(initial); } if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.FinishBuildNumber.ToString())) .Returns(final); } if (template.CreateNuGetPackageChangeManifests && initial.Any() && final.Any()) { var packageDiffs = new PackageChangeComparator().GetPackageChanges(initial, final); foreach (var diff in packageDiffs.Where(d => d.Type == NuGetPackageChangeType.Modified)) { if (!cache.PackageBuildMappings.Any(c => c.PackageId.Equals(diff.PackageId) && c.BuildConfigurationId.Equals(diff.PackageId))) { cache.PackageBuildMappings.Add(new PackageBuildMapping { BuildConfigurationId = diff.PackageId, BuildConfigurationName = diff.PackageId, PackageId = diff.PackageId, Project = diff.PackageId, ServerUrl = api.Url }); } SetExpectations(new BuildTemplate { BuildId = diff.PackageId, BuildCount = 15, BuildName = diff.PackageId, BuildNumberPattern = "1.{0}", CreateNuGetPackageChangeManifests = false, StartBuildNumber = Convert.ToInt16(diff.OldVersion.Split('.')[1]), FinishBuildNumber = Convert.ToInt16(diff.NewVersion.Split('.')[1]), IssueCount = 1, NestedIssueChance = 100, NestedIssueDepth = 1, }, api, issueResolver, cache); } } }
private static void SetExpectations(BuildTemplate template, ITeamCityApi api, IExternalIssueResolver issueResolver, PackageBuildMappingCache packageCache) { var startBuild = string.Format(template.BuildNumberPattern, template.StartBuildNumber); var finishBuild = string.Format(template.BuildNumberPattern, template.FinishBuildNumber); //BuildType/Builds/ChangeDetails A.CallTo(() => api.GetBuildTypeDetailsById(template.BuildId)) .Returns(new BuildTypeDetails { Id = template.BuildId, Name = template.BuildName, Description = template.BuildName, }); var changeDetails = SetupBuildTypeAndBuilds(api, template); A.CallTo(() =>api.GetChangeDetailsByBuildTypeAndBuildNumber(template.BuildId, startBuild, finishBuild, A<IEnumerable<Build>>.Ignored)) .Returns(changeDetails.Where(c => Convert.ToInt16(c.Id) > template.StartBuildNumber && Convert.ToInt16(c.Id) <= template.FinishBuildNumber).ToList()); //Issues if (template.IssueCount > 0) { var issues = Enumerable.Range(1, template.IssueCount).Select(i => new Issue {Id = RandomNumber.Next(2000).ToString()}).ToList(); A.CallTo(() => api.GetIssuesByBuildTypeAndBuildRange(template.BuildId, startBuild, finishBuild, A<IEnumerable<Build>>.Ignored)) .Returns(issues); A.CallTo(issueResolver).WithReturnType<IEnumerable<ExternalIssueDetails>>() .Returns(CreateExternalIssueDetails(issues, template)); } //NuGetPackages SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); SetNugetPackageDependencyExpectations(api, packageCache, template, issueResolver); }
private static IEnumerable<ExternalIssueDetails> CreateExternalIssueDetails(IEnumerable<Issue> issues, BuildTemplate template) { var returnIssues = issues.Select(CreateRandomExternalIssue); var tempIssues = new List<ExternalIssueDetails>(); if (template.NestedIssueChance > 0 && template.NestedIssueDepth > 0) { for (int j = 0; j < template.NestedIssueDepth; j++) { foreach (var externalIssueDetails in returnIssues.ToList()) { if (RandomNumber.Next(0, 100) < template.NestedIssueChance) { var uniqueIssueId = Enumerable.Repeat(RandomNumber.Next(2000), 50) .First(r => returnIssues.All(i => Convert.ToInt16(i.Id) != r)); var parentIssue = CreateRandomExternalIssue(new Issue {Id = uniqueIssueId.ToString()}); parentIssue.SubIssues.Add(externalIssueDetails); tempIssues.Add(parentIssue); } } returnIssues = tempIssues; tempIssues = new List<ExternalIssueDetails>(); } } return returnIssues; }
private static IEnumerable <ExternalIssueDetails> CreateExternalIssueDetails(IEnumerable <Issue> issues, BuildTemplate template) { var returnIssues = issues.Select(CreateRandomExternalIssue); var tempIssues = new List <ExternalIssueDetails>(); if (template.NestedIssueChance > 0 && template.NestedIssueDepth > 0) { for (int j = 0; j < template.NestedIssueDepth; j++) { foreach (var externalIssueDetails in returnIssues.ToList()) { if (RandomNumber.Next(0, 100) < template.NestedIssueChance) { var uniqueIssueId = Enumerable.Repeat(RandomNumber.Next(2000), 50) .First(r => returnIssues.All(i => Convert.ToInt16(i.Id) != r)); var parentIssue = CreateRandomExternalIssue(new Issue { Id = uniqueIssueId.ToString() }); parentIssue.SubIssues.Add(externalIssueDetails); tempIssues.Add(parentIssue); } } returnIssues = tempIssues; tempIssues = new List <ExternalIssueDetails>(); } } return(returnIssues); }
private static IEnumerable <ChangeDetail> SetupBuildTypeAndBuilds(ITeamCityApi api, BuildTemplate template) { A.CallTo(() => api.GetBuildDetailsByBuildId(template.BuildId)).Returns(new BuildDetails { BuildTypeId = template.BuildId, Name = template.BuildName, Id = template.BuildId }); var builds = Enumerable.Range(1, template.BuildCount).Select(i => new Build { BuildTypeId = template.BuildId, Id = i.ToString(), Number = String.Format(template.BuildNumberPattern, i) }); var changeDetails = Enumerable.Range(1, template.BuildCount).Select(i => new ChangeDetail { Comment = Company.CatchPhrase(), Id = i.ToString(), Username = Name.FullName(), Version = (100 + i * 10 + RandomNumber.Next(9)).ToString(), Files = Enumerable.Range(1, RandomNumber.Next(1, 50)).Select(j => new FileDetails { beforerevision = RandomNumber.Next(50, 500).ToString(), afterrevision = RandomNumber.Next(450, 700).ToString(), File = Path.GetTempFileName(), relativefile = Path.GetTempFileName() }).ToList(), }); A.CallTo(() => api.GetBuildsByBuildType(template.BuildId)).Returns(builds); return(changeDetails); }
private static void SetNugetPackageDependencyExpectations(ITeamCityApi api, PackageBuildMappingCache cache, BuildTemplate template, IExternalIssueResolver issueResolver) { var initial = template.StartBuildPackages.Select(p => new TeamCityApi.PackageDetails { Id = p.Key, Version = p.Value }).ToList(); var final = template.FinishBuildPackages.Select(p => new TeamCityApi.PackageDetails { Id = p.Key, Version = p.Value }).ToList(); if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.StartBuildNumber.ToString())) .Returns(initial); } if (initial.Any()) { A.CallTo(() => api.GetNuGetDependenciesByBuildTypeAndBuildId(template.BuildId, template.FinishBuildNumber.ToString())) .Returns(final); } if (template.CreateNuGetPackageChangeManifests && initial.Any() && final.Any()) { var packageDiffs = new PackageChangeComparator().GetPackageChanges(initial, final); foreach (var diff in packageDiffs.Where(d => d.Type == NuGetPackageChangeType.Modified)) { if (!cache.PackageBuildMappings.Any(c => c.PackageId.Equals(diff.PackageId) && c.BuildConfigurationId.Equals(diff.PackageId))) { cache.PackageBuildMappings.Add(new PackageBuildMapping { BuildConfigurationId = diff.PackageId, BuildConfigurationName = diff.PackageId, PackageId = diff.PackageId, Project = diff.PackageId, ServerUrl = api.TeamCityServer }); } SetExpectations(new BuildTemplate { BuildId = diff.PackageId, BuildCount = 15, BuildName = diff.PackageId, BuildNumberPattern = "1.{0}", CreateNuGetPackageChangeManifests = false, StartBuildNumber = Convert.ToInt16(diff.OldVersion.Split('.')[1]), FinishBuildNumber = Convert.ToInt16(diff.NewVersion.Split('.')[1]), IssueCount = 1, NestedIssueChance = 100, NestedIssueDepth = 1, }, api, issueResolver, cache); } } }