Skip to content

Commit

Permalink
(GH-1212) Fix: downgrade should not run w/out version
Browse files Browse the repository at this point in the history
When adding in `--allow-downgrade` to your upgrade options and you have
a prerelease installed, it should not attempt to downgrade to the last
stable version, unless you explicitly pass the version you want it to
upgrade (or downgrade in this case) to. When version is null, it means
that it should function as if it is on the latest release and do
nothing.
  • Loading branch information
ferventcoder committed Mar 28, 2017
1 parent 9743e93 commit 55db927
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 1 deletion.
94 changes: 94 additions & 0 deletions src/chocolatey.tests.integration/scenarios/UpgradeScenarios.cs
Original file line number Diff line number Diff line change
Expand Up @@ -804,6 +804,100 @@ public void should_not_have_warning_package_result()
_packageResult.Warning.ShouldBeFalse();
}

[Fact]
public void should_only_find_the_last_stable_version()
{
_packageResult.Version.ShouldEqual("1.1.0");
}
}

[Concern(typeof(ChocolateyUpgradeCommand))]
public class when_upgrading_an_existing_prerelease_package_with_allow_downgrade_with_excludeprelease_and_without_prerelease_specified : ScenariosBase
{
private PackageResult _packageResult;

public override void Context()
{
base.Context();
Configuration.Prerelease = true;
Scenario.install_package(Configuration, "upgradepackage", "1.1.1-beta");
Configuration.Prerelease = false;
Configuration.UpgradeCommand.ExcludePrerelease = true;
Configuration.AllowDowngrade = true;
}

public override void Because()
{
Results = Service.upgrade_run(Configuration);
_packageResult = Results.FirstOrDefault().Value;
}

[Fact]
public void should_contain_a_message_that_you_have_the_latest_version_available()
{
bool expectedMessage = false;
foreach (var message in MockLogger.MessagesFor(LogLevel.Info).or_empty_list_if_null())
{
if (message.Contains("upgradepackage v1.1.1-beta is newer")) expectedMessage = true;
}

expectedMessage.ShouldBeTrue();
}

[Fact]
public void should_contain_a_message_that_no_packages_were_upgraded()
{
bool expectedMessage = false;
foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).or_empty_list_if_null())
{
if (message.Contains("upgraded 0/1 ")) expectedMessage = true;
}

expectedMessage.ShouldBeTrue();
}

[Fact]
public void should_not_create_a_rollback()
{
var packageDir = Path.Combine(Scenario.get_top_level(), "lib-bkp", Configuration.PackageNames);

Directory.Exists(packageDir).ShouldBeFalse();
}

[Fact]
public void should_not_remove_the_package_from_the_lib_directory()
{
var packageDir = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames);

Directory.Exists(packageDir).ShouldBeTrue();
}

[Fact]
public void should_be_the_same_version_of_the_package()
{
var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + Constants.PackageExtension);
var package = new OptimizedZipPackage(packageFile);
package.Version.Version.to_string().ShouldEqual("1.1.1.0");
}

[Fact]
public void should_have_a_successful_package_result()
{
_packageResult.Success.ShouldBeTrue();
}

[Fact]
public void should_have_inconclusive_package_result()
{
_packageResult.Inconclusive.ShouldBeTrue();
}

[Fact]
public void should_not_have_warning_package_result()
{
_packageResult.Warning.ShouldBeFalse();
}

[Fact]
public void should_only_find_the_last_stable_version()
{
Expand Down
2 changes: 1 addition & 1 deletion src/chocolatey/infrastructure.app/services/NugetService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,7 @@ public ConcurrentDictionary<string, PackageResult> upgrade_run(ChocolateyConfigu

var packageResult = packageInstalls.GetOrAdd(packageName, new PackageResult(availablePackage, _fileSystem.combine_paths(ApplicationParameters.PackagesLocation, availablePackage.Id)));

if (installedPackage.Version > availablePackage.Version && !config.AllowDowngrade)
if (installedPackage.Version > availablePackage.Version && (!config.AllowDowngrade || (config.AllowDowngrade && version == null)))
{
string logMessage = "{0} v{1} is newer than the most recent.{2} You must be smarter than the average bear...".format_with(installedPackage.Id, installedPackage.Version, Environment.NewLine);
packageResult.Messages.Add(new ResultMessage(ResultType.Inconclusive, logMessage));
Expand Down

0 comments on commit 55db927

Please sign in to comment.