public void GetSynchronizeOffers_WhenMultipleBoundTargetForMultiplePackages_ShouldDoNothing() { var synchronizer = new VersionsSynchronizer(); var actual = synchronizer.GetSynchronizeOffers(new[] { new PackageMeta("", true, new PackageInfo { Name = "A1", Dependencies = new [] { new Dependency { Name = "B1", Version = new VersionTarget(new VersionFilter(3, null, null), new VersionFilter(4, null, null)) } } }), new PackageMeta("", true, new PackageInfo { Name = "A2", Dependencies = new [] { new Dependency { Name = "B2", Version = new VersionTarget(new VersionFilter(1, null, null), new VersionFilter(2, null, null)) } } }) }) .ToArray(); Assert.That(actual, Is.Empty); }
public void GetSynchronizeOffers_WhenMultipleBoundTarget_ShouldSyncBottomAndUpperBounds() { var synchronizer = new VersionsSynchronizer(); var actual = synchronizer.GetSynchronizeOffers(new[] { new PackageMeta("", true, new PackageInfo { Name = "A1", Dependencies = new [] { new Dependency { Name = "B", Version = new VersionTarget(new VersionFilter(3, null, null), new VersionFilter(4, null, null)) } } }), new PackageMeta("", true, new PackageInfo { Name = "A2", Dependencies = new [] { new Dependency { Name = "B", Version = new VersionTarget(new VersionFilter(1, null, null), new VersionFilter(2, null, null)) } } }) }) .ToArray(); Assert.That(actual, Has.Length.EqualTo(1)); Assert.That( actual, Has.Some.Matches <VersionsSynchronizer.SynchronizeVersionOffer>( x => x.SourceMeta.PackageInfo.Name == "A2" && x.DependencyToUpdate == "B" && x.NewDependencyTarget.TargetRange.Lower == new VersionFilter(3, null, null) && x.NewDependencyTarget.TargetRange.Upper == new VersionFilter(4, null, null))); }
private static void HandleVersionSynchronization(PackageMeta[] localPackages) { var versionsSynchronizer = new VersionsSynchronizer(); var versionSynchronizationOffers = versionsSynchronizer.GetSynchronizeOffers(localPackages).ToArray(); foreach (var synchronizationOffer in versionSynchronizationOffers) { var userAnswer = ConsoleAsk($"{synchronizationOffer.Description}. " + $"Source package: {synchronizationOffer.SourceMeta.PackageInfo.Name}. " + $"Dependency: {synchronizationOffer.DependencyToUpdate}. " + $"Offer update from: {synchronizationOffer.SourceMeta.PackageInfo.Dependencies.First(x => x.Name == synchronizationOffer.DependencyToUpdate)} " + $"Offer update to: {synchronizationOffer.NewDependencyTarget}"); if (userAnswer) { var newPackageInfo = new PackageInfo { Name = synchronizationOffer.SourceMeta.PackageInfo.Name, Version = synchronizationOffer.SourceMeta.PackageInfo.Version, Dependencies = synchronizationOffer .SourceMeta .PackageInfo .Dependencies .Select(x => x.Name != synchronizationOffer.DependencyToUpdate ? new Dependency { Name = x.Name, Version = x.Version } : new Dependency { Name = x.Name, Version = synchronizationOffer.NewDependencyTarget }) .ToArray() }; File.WriteAllText(synchronizationOffer.SourceMeta.Path, JsonConvert.SerializeObject(newPackageInfo, Formatting.Indented)); } } }