Skip to content

Commit

Permalink
PackageManagementFormat only updates settings when it has a value (#6016
Browse files Browse the repository at this point in the history
)
  • Loading branch information
donnie-msft authored Sep 10, 2024
1 parent 249a633 commit 785d8bb
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class PackageManagementFormat
// keep track of current value for selected package format
private int _selectedPackageFormat = -1;

// keep track of current value for shwo dialog checkbox
// keep track of current value for show dialog checkbox
private bool? _showDialogValue;

public PackageManagementFormat(Configuration.ISettings settings)
Expand Down Expand Up @@ -102,10 +102,17 @@ public int SelectedPackageManagementFormat

public void ApplyChanges()
{
_settings.AddOrUpdate(ConfigurationConstants.PackageManagementSection,
new AddItem(ConfigurationConstants.DefaultPackageManagementFormatKey, _selectedPackageFormat.ToString(CultureInfo.InvariantCulture)));
_settings.AddOrUpdate(ConfigurationConstants.PackageManagementSection,
new AddItem(ConfigurationConstants.DoNotShowPackageManagementSelectionKey, _showDialogValue.Value.ToString(CultureInfo.InvariantCulture)));
if (_selectedPackageFormat != -1)
{
_settings.AddOrUpdate(ConfigurationConstants.PackageManagementSection,
new AddItem(ConfigurationConstants.DefaultPackageManagementFormatKey, _selectedPackageFormat.ToString(CultureInfo.InvariantCulture)));
}

if (_showDialogValue.HasValue)
{
_settings.AddOrUpdate(ConfigurationConstants.PackageManagementSection,
new AddItem(ConfigurationConstants.DoNotShowPackageManagementSelectionKey, _showDialogValue.Value.ToString(CultureInfo.InvariantCulture)));
}
_settings.SaveToDisk();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Globalization;
using Moq;
using NuGet.Configuration;
using Xunit;

namespace NuGet.VisualStudio.Common.Test
{
public class PackageManagementFormatTests
{
private Mock<ISettings> _settings;
private PackageManagementFormat _packageManagementFormat;

public PackageManagementFormatTests()
{
_settings = new Mock<ISettings>();
_packageManagementFormat = new PackageManagementFormat(_settings.Object);
}

[Fact]
public void ApplyChanges_WhenPropertiesNotChanged_DoesNotThrowOrUpdateSettings()
{
// Act
_packageManagementFormat.ApplyChanges();

// Assert
// Ensure no settings change calls are made.
_settings.Verify(settings => settings.AddOrUpdate(It.IsAny<string>(), It.IsAny<SettingItem>()), Times.Never);

// Calling to save settings should always happen, regardless of values.
_settings.Verify(settings => settings.SaveToDisk(), Times.Once());
}

[Fact]
public void ApplyChanges_WhenEnabledIsSet_SavesAndDoesNotThrow()
{
// Arrange
_packageManagementFormat.Enabled = false;
string expectedBooleanAsString = false.ToString(CultureInfo.InvariantCulture);

// Act
_packageManagementFormat.ApplyChanges();

// Assert
_settings.Verify(settings => settings.AddOrUpdate(ConfigurationConstants.PackageManagementSection,
It.Is<AddItem>(addItem => addItem.Key == ConfigurationConstants.DoNotShowPackageManagementSelectionKey && addItem.Value == expectedBooleanAsString)),
Times.Once);

// Calling to save settings should always happen, regardless of values.
_settings.Verify(settings => settings.SaveToDisk(), Times.Once());

_settings.VerifyNoOtherCalls();
}

[Fact]
public void ApplyChanges_WhenSelectedPackageManagementFormatIsSet_SavesAndDoesNotThrow()
{
// Arrange
_packageManagementFormat.SelectedPackageManagementFormat = 0;
string expectedIntegerAsString = 0.ToString(CultureInfo.InvariantCulture);

// Act
_packageManagementFormat.ApplyChanges();

// Assert
_settings.Verify(settings => settings.AddOrUpdate(ConfigurationConstants.PackageManagementSection,
It.Is<AddItem>(addItem => addItem.Key == ConfigurationConstants.DefaultPackageManagementFormatKey && addItem.Value == expectedIntegerAsString)),
Times.Once);

// Calling to save settings should always happen, regardless of values.
_settings.Verify(settings => settings.SaveToDisk(), Times.Once());

_settings.VerifyNoOtherCalls();
}
}
}

0 comments on commit 785d8bb

Please sign in to comment.