public int DetectsModifiedPackages(string package1Final, string package2Final)
        {
            var initial = new[] {Tuple.Create("Package1", "1.0"), Tuple.Create("Package2", "1.0")};
            var final = new[] {Tuple.Create("Package1", package1Final), Tuple.Create("Package2", package2Final)};

            var compararator = new PackageChangeComparator();
            var results = compararator.GetPackageChanges(CreateNuGetPackegList(initial), CreateNuGetPackegList(final));

            return results.Count(r => r.Type == NuGetPackageChangeType.Modified);
        }
        public int DetectsAddedRemovedPackages(int initialCount, int finalCount, NuGetPackageChangeType changeType)
        {
            var initial = Enumerable.Range(1,initialCount).Select(i => Tuple.Create("Package" +i.ToString(CultureInfo.InvariantCulture), "1.0")).ToList();
            var final = Enumerable.Range(1,finalCount).Select(i => Tuple.Create("Package" + i.ToString(CultureInfo.InvariantCulture), "1.0")).ToList();

            var compararator = new PackageChangeComparator();
            var results = compararator.GetPackageChanges(CreateNuGetPackegList(initial), CreateNuGetPackegList(final));

            return results.Count(r => r.Type == changeType);
        }
        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);
                }
            }
        }