winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

ConfigurationUnitInternalTests.cs (6705B)


      1 // -----------------------------------------------------------------------------
      2 // <copyright file="ConfigurationUnitInternalTests.cs" company="Microsoft Corporation">
      3 //     Copyright (c) Microsoft Corporation. Licensed under the MIT License.
      4 // </copyright>
      5 // -----------------------------------------------------------------------------
      6 
      7 namespace Microsoft.Management.Configuration.UnitTests.Tests
      8 {
      9     using System;
     10     using System.Collections.Generic;
     11     using System.IO;
     12     using System.Management.Automation;
     13     using Microsoft.Management.Configuration;
     14     using Microsoft.Management.Configuration.Processor.Exceptions;
     15     using Microsoft.Management.Configuration.Processor.Helpers;
     16     using Microsoft.Management.Configuration.Processor.PowerShell.Helpers;
     17     using Microsoft.Management.Configuration.UnitTests.Fixtures;
     18     using Microsoft.Management.Configuration.UnitTests.Helpers;
     19     using Xunit;
     20     using Xunit.Abstractions;
     21 
     22     /// <summary>
     23     /// Tests ConfigurationUnitExtensionsTests.
     24     /// </summary>
     25     [Collection("UnitTestCollection")]
     26     [InProc]
     27     public class ConfigurationUnitInternalTests
     28     {
     29         private readonly UnitTestFixture fixture;
     30         private readonly ITestOutputHelper log;
     31 
     32         /// <summary>
     33         /// Initializes a new instance of the <see cref="ConfigurationUnitInternalTests"/> class.
     34         /// </summary>
     35         /// <param name="fixture">Unit test fixture.</param>
     36         /// <param name="log">Log helper.</param>
     37         public ConfigurationUnitInternalTests(UnitTestFixture fixture, ITestOutputHelper log)
     38         {
     39             this.fixture = fixture;
     40             this.log = log;
     41         }
     42 
     43         /// <summary>
     44         /// Test GetDirectives.
     45         /// </summary>
     46         [Fact]
     47         public void GetDirectivesTest()
     48         {
     49             string moduleDirective = "module";
     50             string unitModule = "xModule";
     51 
     52             string versionDirective = "version";
     53             string unitVersion = "1.0.0.0";
     54 
     55             string descriptionDirective = "description";
     56             string unitDescription = "beep beep boop i am a text";
     57 
     58             string boolDirective = "boolDirective";
     59             bool boolDirectiveValue = true;
     60 
     61             string boolDirective2 = "boolDirective2";
     62             bool boolDirective2Value = false;
     63 
     64             var unit = new ConfigurationUnit().Assign(new { Type = $"{unitModule}/unitResource" });
     65             unit.Metadata.Add(moduleDirective, unitModule);
     66             unit.Metadata.Add(versionDirective, unitVersion);
     67             unit.Metadata.Add(descriptionDirective, unitDescription);
     68             unit.Metadata.Add(boolDirective, boolDirectiveValue);
     69             unit.Metadata.Add(boolDirective2, boolDirective2Value);
     70 
     71             var unitInternal = new ConfigurationUnitAndModule(unit, string.Empty);
     72 
     73             var description = unitInternal.GetDirective<string>(descriptionDirective);
     74             Assert.Equal(description, unitDescription);
     75 
     76             var fake = unitInternal.GetDirective<string>("fake");
     77             Assert.Null(fake);
     78 
     79             var description2 = unitInternal.GetDirective<string>("DESCRIPTION");
     80             Assert.Equal(description2, unitDescription);
     81 
     82             Assert.Equal(unitModule, unitInternal.Module!.Name);
     83 
     84             Assert.Equal(Version.Parse(unitVersion), unitInternal.Module!.RequiredVersion);
     85 
     86             Assert.Equal(boolDirectiveValue, unitInternal.GetDirective(boolDirective));
     87             Assert.Equal(boolDirective2Value, unitInternal.GetDirective(boolDirective2));
     88             Assert.Null(unitInternal.GetDirective("fakeBool"));
     89         }
     90 
     91         /// <summary>
     92         /// Tests GetVersion with a bad version.
     93         /// </summary>
     94         [Fact]
     95         public void GetVersion_BadVersion()
     96         {
     97             var unit = new ConfigurationUnit();
     98             unit.Metadata.Add("module", "module");
     99             unit.Metadata.Add("version", "not a version");
    100 
    101             Assert.Throws<ArgumentException>(
    102                 () => new ConfigurationUnitInternal(unit, string.Empty));
    103         }
    104 
    105         /// <summary>
    106         /// Verifies expansion of ConfigRoot.
    107         /// </summary>
    108         [Fact]
    109         public void GetExpandedSettings_ConfigRoot()
    110         {
    111             using var tmpFile = new TempFile("fakeConfigFile.yml", content: "content");
    112 
    113             var unit = new ConfigurationUnit().Assign(new { Type = "unitModule/unitResource" });
    114             unit.Settings.Add("var1", @"$WinGetConfigRoot\this\is\a\path.txt");
    115             unit.Settings.Add("var2", @"${WinGetConfigRoot}\this\is\a\path.txt");
    116             unit.Settings.Add("var3", @"this\is\a\$WINGETCONFIGROOT\path.txt");
    117             unit.Settings.Add("var4", @"this\is\a\${WINGETCONFIGROOT}\path.txt");
    118             unit.Settings.Add("var5", @"this\is\a\path\$wingetconfigroot");
    119             unit.Settings.Add("var6", @"this\is\a\path\${wingetconfigroot}");
    120 
    121             string configPath = tmpFile.FullFileName;
    122             string? expectedPath = Path.GetDirectoryName(configPath);
    123             var unitInternal = new ConfigurationUnitInternal(unit, configPath);
    124 
    125             var expandedSettings = unitInternal.GetExpandedSettings();
    126 
    127             var var1 = expandedSettings["var1"];
    128             Assert.Equal(@"$WinGetConfigRoot\this\is\a\path.txt", var1 as string);
    129 
    130             var var2 = expandedSettings["var2"];
    131             Assert.Equal($@"{expectedPath}\this\is\a\path.txt", var2 as string);
    132 
    133             var var3 = expandedSettings["var3"];
    134             Assert.Equal(@"this\is\a\$WINGETCONFIGROOT\path.txt", var3 as string);
    135 
    136             var var4 = expandedSettings["var4"];
    137             Assert.Equal($@"this\is\a\{expectedPath}\path.txt", var4 as string);
    138 
    139             var var5 = expandedSettings["var5"];
    140             Assert.Equal(@"this\is\a\path\$wingetconfigroot", var5 as string);
    141 
    142             var var6 = expandedSettings["var6"];
    143             Assert.Equal($@"this\is\a\path\{expectedPath}", var6 as string);
    144         }
    145 
    146         /// <summary>
    147         /// Verifies throws when config root is not set.
    148         /// </summary>
    149         [Fact]
    150         public void GetExpandedSetting_ConfigRoot_Throw()
    151         {
    152             var unit = new ConfigurationUnit().Assign(new { Type = "unitModule/unitResource" });
    153             unit.Settings.Add("var2", @"${WinGetConfigRoot}\this\is\a\path.txt");
    154 
    155             var unitInternal = new ConfigurationUnitInternal(unit, null!);
    156             Assert.Throws<UnitSettingConfigRootException>(() => unitInternal.GetExpandedSettings());
    157         }
    158     }
    159 }