public void SettingsFile_Remove_LastValueInSection_RemovesSection() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <add key=""DeleteMe"" value=""value2"" /> </SectionName> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var settingsFile = new SettingsFile(Path.Combine(mockBaseDirectory)); // Act & Assert var section = settingsFile.GetSection("SectionName"); section.Should().NotBeNull(); var item = section.GetFirstItemWithAttribute <AddItem>("key", "DeleteMe"); item.Should().NotBeNull(); item.Value.Should().Be("value2"); settingsFile.Remove("SectionName", item); settingsFile.SaveToDisk(); SettingsTestUtils.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath))).Should().Be(SettingsTestUtils.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?><configuration></configuration>")); section = settingsFile.GetSection("SectionName"); section.Should().BeNull(); } }
public void SettingsFile_AddOrUpdate_WithMachineWideSettings_Throws() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key0' value='value0' /> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); var settingsFile = new SettingsFile(mockBaseDirectory, nugetConfigPath, isMachineWide: true); // Act var ex = Record.Exception(() => settingsFile.AddOrUpdate("section", new AddItem("SomeKey", "SomeValue"))); ex.Should().NotBeNull(); ex.Should().BeOfType <InvalidOperationException>(); ex.Message.Should().Be("Unable to update setting since it is in a machine-wide NuGet.Config."); settingsFile.SaveToDisk(); var section = settingsFile.GetSection("Section"); section.Items.Count.Should().Be(1); var updatedFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().BeEquivalentTo(configFileHash); } }
public void SettingsFile_AddOrUpdate_SectionThatExist_WillAddToSection() { // Arrange var configFile = "NuGet.Config"; using (var mockBaseDirectory = TestDirectory.Create()) { var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <add key=""key"" value=""value"" /> </SectionName> </configuration>"; SettingsTestUtils.CreateConfigurationFile(configFile, mockBaseDirectory, config); var settingsFile = new SettingsFile(mockBaseDirectory); // Act settingsFile.AddOrUpdate("SectionName", new AddItem("keyTwo", "valueTwo")); settingsFile.SaveToDisk(); // Assert var result = SettingsTestUtils.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <add key=""key"" value=""value"" /> <add key=""keyTwo"" value=""valueTwo"" /> </SectionName> </configuration>"); SettingsTestUtils.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, configFile))).Should().Be(result); } }
public void SettingSection_Remove_OnlyOneChild_SucceedsAndRemovesSection() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key0' value='value0' /> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); var settingsFile = new SettingsFile(mockBaseDirectory); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); var child = section.GetFirstItemWithAttribute <AddItem>("key", "key0"); child.Should().NotBeNull(); settingsFile.Remove("Section", child); settingsFile.SaveToDisk(); var updatedFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().NotBeEquivalentTo(configFileHash); section = settingsFile.GetSection("Section"); section.Should().BeNull(); } }
public void SettingsFile_Remove_PreserveUnknownItems() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <add key=""DeleteMe"" value=""value"" /> <add key=""keyNotToDelete"" value=""value"" /> </SectionName> <SectionName2> <add key=""key"" value=""value"" /> </SectionName2> <UnknownSection> <UnknownItem meta1=""data1"" /> <OtherUnknownItem> </OtherUnknownItem> </UnknownSection> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { ConfigurationFileTestUtility.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var settingsFile = new SettingsFile(mockBaseDirectory); // Act & Assert var section = settingsFile.GetSection("SectionName"); section.Should().NotBeNull(); var item = section.GetFirstItemWithAttribute <SettingItem>("key", "DeleteMe"); settingsFile.Remove("SectionName", item); settingsFile.SaveToDisk(); var result = ConfigurationFileTestUtility.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <add key=""keyNotToDelete"" value=""value"" /> </SectionName> <SectionName2> <add key=""key"" value=""value"" /> </SectionName2> <UnknownSection> <UnknownItem meta1=""data1"" /> <OtherUnknownItem> </OtherUnknownItem> </UnknownSection> </configuration>"); ConfigurationFileTestUtility.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath))).Should().Be(result); section = settingsFile.GetSection("SectionName"); section.Should().NotBeNull(); item = section.GetFirstItemWithAttribute <AddItem>("key", "DeleteMe"); item.Should().BeNull(); } }
public void SettingsFile_Remove_PreserveComments() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <!-- Comment in nuget configuration --> <configuration> <!-- This section has the item to delete --> <SectionName> <add key=""DeleteMe"" value=""value"" /> <add key=""keyNotToDelete"" value=""value"" /> </SectionName> <!-- This section doesn't have the item to delete --> <SectionName2> <add key=""key"" value=""value"" /> </SectionName2> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var settingsFile = new SettingsFile(mockBaseDirectory); // Act & Assert var section = settingsFile.GetSection("SectionName"); section.Should().NotBeNull(); var item = section.GetFirstItemWithAttribute <SettingItem>("key", "DeleteMe"); settingsFile.Remove("SectionName", item); settingsFile.SaveToDisk(); var result = SettingsTestUtils.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?> <!-- Comment in nuget configuration --> <configuration> <!-- This section has the item to delete --> <SectionName> <add key=""keyNotToDelete"" value=""value"" /> </SectionName> <!-- This section doesn't have the item to delete --> <SectionName2> <add key=""key"" value=""value"" /> </SectionName2> </configuration>"); SettingsTestUtils.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath))).Should().Be(result); section = settingsFile.GetSection("SectionName"); section.Should().NotBeNull(); item = section.GetFirstItemWithAttribute <AddItem>("key", "DeleteMe"); item.Should().BeNull(); } }
public void Update_WithAddedAndRemovedPatterns_CorrectlyAddsAndRemovesPatterns() { // Arrange var config = @" <configuration> <packageSourceMapping> <packageSource key=""nuget.org""> <package pattern=""first"" /> <package pattern=""second"" /> </packageSource> </packageSourceMapping> </configuration>"; var nugetConfigPath = "NuGet.Config"; using var mockBaseDirectory = TestDirectory.Create(); SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); // Act and Assert var settingsFile = new SettingsFile(mockBaseDirectory); settingsFile.TryGetSection("packageSourceMapping", out var section).Should().BeTrue(); section.Should().NotBeNull(); section.Items.Count.Should().Be(1); var packageSourceMappingSourceItem = section.Items.First() as PackageSourceMappingSourceItem; packageSourceMappingSourceItem.Patterns.Should().HaveCount(2); var clone = packageSourceMappingSourceItem.Clone() as PackageSourceMappingSourceItem; clone.Patterns.RemoveAt(1); clone.Patterns.Add(new PackagePatternItem("third")); packageSourceMappingSourceItem.Update(clone); settingsFile.SaveToDisk(); // Assert var result = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <packageSourceMapping> <packageSource key=""nuget.org""> <package pattern=""first"" /> <package pattern=""third"" /> </packageSource> </packageSourceMapping> </configuration>"; result.Replace("\r\n", "\n") .Should().BeEquivalentTo( File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath)).Replace("\r\n", "\n")); }
public void SettingsFile_AddOrUpdate_PreserveComments() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <!-- Comment in nuget configuration --> <configuration> <!-- Will add an item to this section --> <SectionName> <add key=""key1"" value=""value"" /> </SectionName> <!-- This section wont have a new item --> <SectionName2> <add key=""key"" value=""value"" /> </SectionName2> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var settingsFile = new SettingsFile(mockBaseDirectory); // Act & Assert settingsFile.AddOrUpdate("SectionName", new AddItem("newKey", "value")); settingsFile.SaveToDisk(); var result = SettingsTestUtils.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?> <!-- Comment in nuget configuration --> <configuration> <!-- Will add an item to this section --> <SectionName> <add key=""key1"" value=""value"" /> <add key=""newKey"" value=""value"" /> </SectionName> <!-- This section wont have a new item --> <SectionName2> <add key=""key"" value=""value"" /> </SectionName2> </configuration>"); SettingsTestUtils.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath))).Should().Be(result); var section = settingsFile.GetSection("SectionName"); section.Should().NotBeNull(); var item = section.GetFirstItemWithAttribute <AddItem>("key", "newKey"); item.Should().NotBeNull(); item.Value.Should().Be("value"); } }
public void AddItem_UpdatingAttribute_WithAddOrUpdate_SuccessfullyUpdatesConfigFile() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key1' value='value1' /> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); // Act and Assert var settingsFile = new SettingsFile(mockBaseDirectory); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); var element = section.Items.FirstOrDefault() as AddItem; element.Should().NotBeNull(); element.Value = "newValue"; element.Value.Should().Be("newValue"); var section2 = settingsFile.GetSection("Section"); section2.Should().NotBeNull(); var element2 = section2.Items.FirstOrDefault() as AddItem; element2.Should().NotBeNull(); element2.Value.Should().Be("value1"); settingsFile.AddOrUpdate("Section", element); settingsFile.SaveToDisk(); var section3 = settingsFile.GetSection("Section"); section3.Should().NotBeNull(); var element3 = section.Items.FirstOrDefault() as AddItem; element3.Should().NotBeNull(); element3.Value.Should().Be("newValue"); var updatedFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().NotBeEquivalentTo(configFileHash); } }
public void RepositoryItem_Update_RemovesOwnersCorrectly() { // Arrange var config = @" <configuration> <SectionName> <repository name=""repositoryName"" serviceIndex=""https://api.test/index/""> <certificate fingerprint=""abcdefg"" hashAlgorithm=""SHA256"" allowUntrustedRoot=""true"" /> <owners>owner1;owner2</owners> </repository> </SectionName> </configuration>"; var nugetConfigPath = "NuGet.Config"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); // Act and Assert var settingsFile = new SettingsFile(mockBaseDirectory); settingsFile.TryGetSection("SectionName", out var section).Should().BeTrue(); section.Should().NotBeNull(); section.Items.Count.Should().Be(1); var item = section.Items.First() as RepositoryItem; item.Owners.Count.Should().Be(2); var updatedItem = item.Clone() as RepositoryItem; updatedItem.Owners.RemoveAt(1); item.Update(updatedItem); SettingsTestUtils.DeepEquals(item, updatedItem).Should().BeTrue(); settingsFile.SaveToDisk(); // Assert var result = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <repository name=""repositoryName"" serviceIndex=""https://api.test/index/""> <certificate fingerprint=""abcdefg"" hashAlgorithm=""SHA256"" allowUntrustedRoot=""true"" /> <owners>owner1</owners> </repository> </SectionName> </configuration>"; Assert.Equal(result.Replace("\r\n", "\n"), File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath)).Replace("\r\n", "\n")); } }
public void AuthorItem_Update_UpdatesAddsCertificatesCorrectly() { // Arrange var config = @" <configuration> <SectionName> <author name=""authorName""> <certificate fingerprint=""abcdefg"" hashAlgorithm=""SHA256"" allowUntrustedRoot=""true"" /> </author> </SectionName> </configuration>"; var nugetConfigPath = "NuGet.Config"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); // Act and Assert var settingsFile = new SettingsFile(mockBaseDirectory); settingsFile.TryGetSection("SectionName", out var section).Should().BeTrue(); section.Should().NotBeNull(); section.Items.Count.Should().Be(1); var item = section.Items.First() as AuthorItem; var updatedItem = item.Clone() as AuthorItem; updatedItem.Certificates.Add(new CertificateItem("xyz", Common.HashAlgorithmName.SHA256)); item.Update(updatedItem); SettingsTestUtils.DeepEquals(item, updatedItem).Should().BeTrue(); settingsFile.SaveToDisk(); // Assert var result = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <author name=""authorName""> <certificate fingerprint=""abcdefg"" hashAlgorithm=""SHA256"" allowUntrustedRoot=""true"" /> <certificate fingerprint=""xyz"" hashAlgorithm=""SHA256"" allowUntrustedRoot=""false"" /> </author> </SectionName> </configuration>"; Assert.Equal(result.Replace("\r\n", "\n"), File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath)).Replace("\r\n", "\n")); } }
public void Update_UpdatesKeyCorrectly() { // Arrange var config = @" <configuration> <packageSourceMapping> <packageSource key=""nuget.org""> <package pattern=""original"" /> </packageSource> </packageSourceMapping> </configuration>"; var nugetConfigPath = "NuGet.Config"; using var mockBaseDirectory = TestDirectory.Create(); SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); // Act and Assert var settingsFile = new SettingsFile(mockBaseDirectory); settingsFile.TryGetSection("packageSourceMapping", out var section).Should().BeTrue(); section.Should().NotBeNull(); section.Items.Count.Should().Be(1); var packageSourcePatternsItem = section.Items.First() as PackageSourceMappingSourceItem; var updatedItem = new PackagePatternItem("updated"); packageSourcePatternsItem.Patterns.First().Update(updatedItem); SettingsTestUtils.DeepEquals(packageSourcePatternsItem.Patterns.First(), updatedItem).Should().BeTrue(); settingsFile.SaveToDisk(); // Assert var result = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <packageSourceMapping> <packageSource key=""nuget.org""> <package pattern=""updated"" /> </packageSource> </packageSourceMapping> </configuration>"; result.Replace("\r\n", "\n") .Should().BeEquivalentTo( File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath)).Replace("\r\n", "\n")); }
public void SettingSection_AddOrUpdate_UpdatesAnElementCorrectly() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key0' value='value0' /> <add key='key1' value='value1' meta1='data1' meta2='data2'/> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); var settingsFile = new SettingsFile(mockBaseDirectory); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); section.Items.Count.Should().Be(2); settingsFile.AddOrUpdate("Section", new AddItem("key0", "value0", new Dictionary <string, string>() { { "meta1", "data1" } })); section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); section.Items.Count.Should().Be(2); var item = section.Items.First() as AddItem; item.Should().NotBeNull(); item.AdditionalAttributes.Count.Should().Be(1); item.AdditionalAttributes["meta1"].Should().Be("data1"); settingsFile.SaveToDisk(); var updatedFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().NotBeEquivalentTo(configFileHash); } }
public void CertificateItem_Update_UpdatesContentCorrectly() { // Arrange var config = @" <configuration> <SectionName> <owners>test;text;owner</owners> </SectionName> </configuration>"; var nugetConfigPath = "NuGet.Config"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); // Act and Assert var settingsFile = new SettingsFile(mockBaseDirectory); settingsFile.TryGetSection("SectionName", out var section).Should().BeTrue(); section.Should().NotBeNull(); section.Items.Count.Should().Be(1); var item = section.Items.First() as OwnersItem; var updatedItem = item.Clone() as OwnersItem; updatedItem.Content.Clear(); updatedItem.Content.Add("abc"); item.Update(updatedItem); SettingsTestUtils.DeepEquals(item, updatedItem).Should().BeTrue(); settingsFile.SaveToDisk(); // Assert var result = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <owners>abc</owners> </SectionName> </configuration>"; Assert.Equal(result.Replace("\r\n", "\n"), File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath)).Replace("\r\n", "\n")); } }
public void SettingsFile_Remove_WithMachineWideSettings_Throws() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key0' value='value0' /> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { ConfigurationFileTestUtility.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = ConfigurationFileTestUtility.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); var settingsFile = new SettingsFile(mockBaseDirectory, nugetConfigPath, isMachineWide: true); // Act & Assert var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); var item = section.GetFirstItemWithAttribute <AddItem>("key", "key0"); item.Should().NotBeNull(); item.Value.Should().Be("value0"); var ex = Record.Exception(() => settingsFile.Remove("Section", item)); ex.Should().NotBeNull(); ex.Should().BeOfType <InvalidOperationException>(); ex.Message.Should().Be("Unable to update setting since it is in a machine-wide NuGet.Config."); settingsFile.SaveToDisk(); var section1 = settingsFile.GetSection("Section"); section1.Items.Count.Should().Be(1); var updatedFileHash = ConfigurationFileTestUtility.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().BeEquivalentTo(configFileHash); } }
public void SettingSection_AddOrUpdate_ToReadOnly_Throws() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key0' value='value0' /> <add key='key1' value='value1' meta1='data1' meta2='data2'/> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); var settingsFile = new SettingsFile(mockBaseDirectory, nugetConfigPath, isMachineWide: false, isReadOnly: true); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); section.Items.Count.Should().Be(2); var ex = Record.Exception(() => settingsFile.AddOrUpdate("Section", new AddItem("key2", "value2"))); ex.Should().NotBeNull(); ex.Should().BeOfType <InvalidOperationException>(); ex.Message.Should().Be(Resources.CannotUpdateReadOnlyConfig); section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); section.Items.Count.Should().Be(2); settingsFile.SaveToDisk(); var updatedFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().BeEquivalentTo(configFileHash); } }
public void CredentialsItem_Update_RemovingValidAuthenticationTypes_UpdatesObjectAndFile() { // Arrange using (var mockBaseDirectory = TestDirectory.Create()) { var origin = new SettingsFile(mockBaseDirectory); var xelement = new XElement("name", new XElement("add", new XAttribute("key", "Username"), new XAttribute("value", "user")), new XElement("add", new XAttribute("key", "ClearTextPassword"), new XAttribute("value", "pass")), new XElement("add", new XAttribute("key", "ValidAuthenticationTypes"), new XAttribute("value", "one, two, three"))); var credentials = new CredentialsItem(xelement, origin); // Act credentials.Update(new CredentialsItem("name", "user", "pass", isPasswordClearText: true, validAuthenticationTypes: null)); // Assert credentials.ValidAuthenticationTypes.Should().BeNull(); origin.IsDirty.Should().BeTrue(); origin.SaveToDisk(); var credentialElement = credentials.AsXNode() as XElement; var childElements = credentialElement.Elements().ToList(); childElements.Count.Should().Be(2); childElements[1].Name.LocalName.Should().Be("add"); var elattr = childElements[0].Attributes().ToList(); elattr.Count.Should().Be(2); elattr[0].Value.Should().Be("Username"); childElements[1].Name.LocalName.Should().Be("add"); elattr = childElements[1].Attributes().ToList(); elattr.Count.Should().Be(2); elattr[0].Value.Should().Be("ClearTextPassword"); } }
public void SettingsFile_AddOrUpdate_WhenItemExistsInSection_OverrideItem() { // Arrange var configFile = "NuGet.Config"; using (var mockBaseDirectory = TestDirectory.Create()) { var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <add key=""key"" value=""value"" /> </SectionName> </configuration>"; SettingsTestUtils.CreateConfigurationFile(configFile, mockBaseDirectory, config); var settingsFile = new SettingsFile(mockBaseDirectory); // Act settingsFile.AddOrUpdate("SectionName", new AddItem("key", "NewValue")); settingsFile.SaveToDisk(); // Assert var result = SettingsTestUtils.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <SectionName> <add key=""key"" value=""NewValue"" /> </SectionName> </configuration>"); SettingsTestUtils.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, configFile))).Should().Be(result); var section = settingsFile.GetSection("SectionName"); section.Should().NotBeNull(); var item = section.GetFirstItemWithAttribute <AddItem>("key", "key"); item.Should().NotBeNull(); item.Value.Should().Be("NewValue"); } }
public void SettingSection_Remove_ToMachineWide_Throws() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key0' value='value0' /> <add key='key1' value='value1' meta1='data1' meta2='data2'/> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { SettingsTestUtils.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); var settingsFile = new SettingsFile(mockBaseDirectory, nugetConfigPath, isMachineWide: true); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); var child = section.GetFirstItemWithAttribute <AddItem>("key", "key0"); child.Should().NotBeNull(); var ex = Record.Exception(() => settingsFile.Remove("Section", child)); ex.Should().NotBeNull(); ex.Should().BeOfType <InvalidOperationException>(); ex.Message.Should().Be("Unable to update setting since it is in a machine-wide NuGet.Config."); settingsFile.SaveToDisk(); var updatedFileHash = SettingsTestUtils.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().BeEquivalentTo(configFileHash); } }
public void SettingSection_AddOrUpdate_AddsAnElementCorrectly() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <Section> <add key='key0' value='value0' /> <add key='key1' value='value1' meta1='data1' meta2='data2'/> </Section> </configuration>"; using (var mockBaseDirectory = TestDirectory.Create()) { ConfigurationFileTestUtility.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var configFileHash = ConfigurationFileTestUtility.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); var settingsFile = new SettingsFile(mockBaseDirectory); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); section.Items.Count.Should().Be(2); settingsFile.AddOrUpdate("Section", new AddItem("key2", "value2")); section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); section.Items.Count.Should().Be(3); settingsFile.SaveToDisk(); var updatedFileHash = ConfigurationFileTestUtility.GetFileHash(Path.Combine(mockBaseDirectory, nugetConfigPath)); updatedFileHash.Should().NotBeEquivalentTo(configFileHash); } }
public void UnknownItem_Remove_ExistingChild_PreservesComments() { // Arrange var nugetConfigPath = "NuGet.Config"; var config = @" <configuration> <!-- This is a section --> <Section> <!-- Unknown Item --> <Unknown meta=""data""> <!-- Text child --> Text for test <!-- Item child --> <add key=""key"" value=""val"" /> </Unknown> </Section> </configuration>"; var expectedSetting = new UnknownItem("Unknown", attributes: new Dictionary <string, string>() { { "meta", "data" } }, children: new List <SettingBase>() { new AddItem("key", "val") }); using (var mockBaseDirectory = TestDirectory.Create()) { ConfigurationFileTestUtility.CreateConfigurationFile(nugetConfigPath, mockBaseDirectory, config); var settingsFile = new SettingsFile(mockBaseDirectory); // Act var section = settingsFile.GetSection("Section"); section.Should().NotBeNull(); var element = section.Items.FirstOrDefault() as UnknownItem; element.Should().NotBeNull(); element.Remove(element.Children.First()); settingsFile.AddOrUpdate("Section", element); settingsFile.SaveToDisk(); var expectedConfig = ConfigurationFileTestUtility.RemoveWhitespace(@"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <!-- This is a section --> <Section> <!-- Unknown Item --> <Unknown meta=""data""> <!-- Text child --> <!-- Item child --> <add key=""key"" value=""val"" /> </Unknown> </Section> </configuration>"); ConfigurationFileTestUtility.RemoveWhitespace(File.ReadAllText(Path.Combine(mockBaseDirectory, nugetConfigPath))).Should().Be(expectedConfig); // Assert element.DeepEquals(expectedSetting).Should().BeTrue(); } }