MSIX.Tests/MSIX.PureTransforms.Tests.ps1

BeforeAll {
    Import-Module (Resolve-Path (Join-Path $PSScriptRoot '..\MSIX.psd1')) -Force

    $script:Sample = @'
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">
  <Identity Name="X.Old" Publisher="CN=Old, O=X, C=NL" Version="1.0.0.0" />
  <Applications><Application Id="A" Executable="a.exe" /></Applications>
</Package>
'@

}
AfterAll { Remove-Module MSIX -ErrorAction SilentlyContinue }

Describe 'Set-MsixManifestPublisher (pure transform)' -Tag 'Manifest' {
    It 'Updates Identity.Publisher' {
        [xml]$m = $script:Sample
        Set-MsixManifestPublisher -Manifest $m -Publisher 'CN=New, O=X, C=NL'
        $m.Package.Identity.Publisher | Should -Be 'CN=New, O=X, C=NL'
    }

    It 'Does not touch Name or Version' {
        [xml]$m = $script:Sample
        Set-MsixManifestPublisher -Manifest $m -Publisher 'CN=New'
        $m.Package.Identity.Name    | Should -Be 'X.Old'
        $m.Package.Identity.Version | Should -Be '1.0.0.0'
    }

    It 'Returns the same XmlDocument (pipeline friendly)' {
        [xml]$m = $script:Sample
        $r = Set-MsixManifestPublisher -Manifest $m -Publisher 'CN=New'
        $r | Should -BeOfType 'System.Xml.XmlDocument'
    }
}

Describe 'Set-MsixManifestIdentity (pure transform)' -Tag 'Manifest' {
    It 'Updates only the supplied attributes' {
        [xml]$m = $script:Sample
        Set-MsixManifestIdentity -Manifest $m -Version '2.0.0.0'
        $m.Package.Identity.Version   | Should -Be '2.0.0.0'
        $m.Package.Identity.Name      | Should -Be 'X.Old'
        $m.Package.Identity.Publisher | Should -Be 'CN=Old, O=X, C=NL'
    }

    It 'Updates Name + Publisher + Version together' {
        [xml]$m = $script:Sample
        Set-MsixManifestIdentity -Manifest $m -Name 'X.New' -Publisher 'CN=New' -Version '3.4.5.6'
        $m.Package.Identity.Name      | Should -Be 'X.New'
        $m.Package.Identity.Publisher | Should -Be 'CN=New'
        $m.Package.Identity.Version   | Should -Be '3.4.5.6'
    }

    It 'Rejects 3-part version' {
        [xml]$m = $script:Sample
        { Set-MsixManifestIdentity -Manifest $m -Version '1.2.3' } |
            Should -Throw '*4-part dotted-decimal*'
    }
}