diff --git a/.editorconfig b/.editorconfig index e5dc8c8bdc..7442cc4b63 100644 --- a/.editorconfig +++ b/.editorconfig @@ -20,7 +20,7 @@ csharp_prefer_braces = true:silent csharp_style_namespace_declarations = block_scoped:suggestion csharp_style_prefer_method_group_conversion = true:silent csharp_style_prefer_top_level_statements = true:silent -csharp_style_expression_bodied_methods = true:silent +csharp_style_expression_bodied_methods = false:silent csharp_style_expression_bodied_constructors = false:suggestion csharp_style_expression_bodied_operators = false:silent csharp_style_expression_bodied_properties = true:silent diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6c2aa16021..c48f7af96b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,7 @@ jobs: - name: Build with Mono run: | chmod +x build.sh - $GITHUB_WORKSPACE//build.sh --verbosity=diagnostic --target=CI --testExecutionType=all + $GITHUB_WORKSPACE//build.sh --verbosity=diagnostic --target=CI --testExecutionType=unit - name: Upload Ubuntu build results uses: actions/upload-artifact@v3 # Always upload build results @@ -49,7 +49,7 @@ jobs: path: tools key: ${{ runner.os }}-tools-${{ hashFiles('recipe.cake') }} - name: Build with .Net Framework - run: ./build.ps1 --verbosity=diagnostic --target=CI --testExecutionType=all --shouldRunOpenCover=false + run: ./build.ps1 --verbosity=diagnostic --target=CI --testExecutionType=unit --shouldRunOpenCover=false - name: Upload Windows build results uses: actions/upload-artifact@v3 # Always upload build results @@ -88,7 +88,7 @@ jobs: - name: Build with Mono run: | chmod +x build.sh - $GITHUB_WORKSPACE//build.sh --verbosity=diagnostic --target=CI --testExecutionType=all + $GITHUB_WORKSPACE//build.sh --verbosity=diagnostic --target=CI --testExecutionType=unit - name: Upload MacOS build results uses: actions/upload-artifact@v3 # Always upload build results diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 0ffccb49d9..6e9bc471ff 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -20,11 +20,11 @@ jobs: exempt-all-assignees: false exempt-draft-pr: true stale-issue-label: "Pending Closure" - stale-pr-label: '0 - Waiting on User' - only-pr-labels: '0 - Waiting on User' + stale-pr-label: 'Pending Closure' + only-labels: '0 - Waiting on User' close-issue-label: "No Response / Stale" close-pr-label: "No Response / Stale" - exempt-issue-labels: 'Security / CVE,0 - Backlog,1 - Ready for work,2 - Working,3 - Review,4 - Done,5 - Push required' + exempt-issue-labels: 'Security / CVE' exempt-pr-labels: 'Security / CVE' labels-to-remove-when-unstale: '0 - Wating on User,Pending closure' stale-issue-message: | diff --git a/.teamcity/settings.kts b/.teamcity/settings.kts index 9f7a2ae229..26f3b7e3ba 100644 --- a/.teamcity/settings.kts +++ b/.teamcity/settings.kts @@ -5,6 +5,7 @@ import jetbrains.buildServer.configs.kotlin.v2019_2.Dependencies import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.finishBuildTrigger +import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot project { @@ -57,7 +58,10 @@ object Chocolatey : BuildType({ script { name = "Call Cake" - scriptContent = "call build.official.bat --verbosity=diagnostic --target=CI --testExecutionType=all --shouldRunOpenCover=false" + scriptContent = """ + IF "%teamcity.build.triggeredBy%" == "Schedule Trigger" (SET TestType=all) ELSE (SET TestType=unit) + call build.official.bat --verbosity=diagnostic --target=CI --testExecutionType=%%TestType%% --shouldRunOpenCover=false + """.trimIndent() } } @@ -65,6 +69,17 @@ object Chocolatey : BuildType({ vcs { branchFilter = "" } + schedule { + schedulingPolicy = daily { + hour = 2 + minute = 0 + } + branchFilter = """ + +: + """.trimIndent() + triggerBuild = always() + withPendingChangesOnly = false + } } features { diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c442e3d46a..ed80aaca66 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing -The Chocolatey team has very explicit information here regarding the process for contributions, and we will be sticklers about the way you write your commit messages (yes, really), so to save yourself some rework, please make sure you read over this entire document prior to contributing. +The Chocolatey team has very explicit information here regarding the process for contributions, and we will be sticklers about the way you write your commit messages (yes, really), so to save yourself some rework, please make sure you read over this entire document prior to contributing. See this [Pull Request](https://github.com/chocolatey/choco/pull/3011) as an example of what we consider to be a great contribution. @@ -274,6 +274,8 @@ choco client properly. ### Submit Pull Request (PR) +See this [Pull Request](https://github.com/chocolatey/choco/pull/3011) as an example of what we consider to be a great contribution. + Prerequisites: - You are making commits in a feature branch. diff --git a/GenerateDocs.ps1 b/GenerateDocs.ps1 index 4f35a92599..36b7197d9a 100644 --- a/GenerateDocs.ps1 +++ b/GenerateDocs.ps1 @@ -1,4 +1,4 @@ -#Requires -PSEdition Desktop +#Requires -PSEdition Desktop # Copyright © 2017 Chocolatey Software, Inc # Copyright © 2011 - 2017 RealDimensions Software, LLC # @@ -23,7 +23,8 @@ $thisDirectory = (Split-Path -Parent $MyInvocation.MyCommand.Definition); $psModuleName = 'chocolateyInstaller' $psModuleLocation = [System.IO.Path]::GetFullPath("$thisDirectory\src\chocolatey.resources\helpers\chocolateyInstaller.psm1") $docsFolder = [System.IO.Path]::GetFullPath("$thisDirectory\docs\generated") -$chocoExe = [System.IO.Path]::GetFullPath("$thisDirectory\code_drop\temp\_PublishedApps\choco_merged\choco.exe") +$mergedDirectory = [System.IO.Path]::GetFullPath("$thisDirectory\code_drop\temp\_PublishedApps\choco_merged") +$chocoExe = "$mergedDirectory\choco.exe" $lineFeed = "`r`n" $sourceLocation = 'https://github.com/chocolatey/choco/blob/master/' $sourceCommands = $sourceLocation + 'src/chocolatey/infrastructure.app/commands' @@ -96,6 +97,11 @@ These are the functions from above as one list. '@ +if (!(Test-Path "$mergedDirectory\lib")) { + # Workaround for the warning outputted when the directory doesn't exist + $null = New-Item -Path "$mergedDirectory\lib" -ItemType Directory +} + function Get-Aliases($commandName) { $aliasOutput = '' @@ -127,6 +133,9 @@ function Replace-CommonItems($text) { $text = $text.Replace("`n", $lineFeed) $text = $text -replace "\*\*NOTE:\*\*", '> :choco-info: **NOTE** > +>' + $text = $text -replace "\*\*WARNING:\*\*",'> :choco-warning: **WARNING** +> >' $text = $text -replace '(community feed[s]?[^\]]|community repository)', '[$1](https://community.chocolatey.org/packages)' $text = $text -replace '(Chocolatey for Business|Chocolatey Professional|Chocolatey Pro)(?=[^\w])', '[$1](https://chocolatey.org/compare)' @@ -232,7 +241,8 @@ function Convert-CommandText { $commandText = $commandText -replace '^(Commands|How To Pass Options)', '## $1' $commandText = $commandText -replace '^(Windows Features|Ruby|Cygwin|Python)\s*$', '### $1' $commandText = $commandText -replace '(? :choco-info: **NOTE**' - $commandText = $commandText -replace '\*> :choco-info: \*\*NOTE\*\*\*', '> :choco-info: **NOTE**' + $commandText = $commandText -replace '(? :choco-warning: **WARNING**' + $commandText = $commandText -replace '\*> :choco-(info|warning): \*\*(INFO|WARNING)\*\*\*', '> :choco-$1: **$2**' $commandText = $commandText -replace 'the command reference', '[how to pass arguments](xref:choco-commands#how-to-pass-options-switches)' $commandText = $commandText -replace '(community feed[s]?|community repository)', '[$1](https://community.chocolatey.org/packages)' #$commandText = $commandText -replace '\`(apikey|install|upgrade|uninstall|list|search|info|outdated|pin)\`', '[[`$1`|Commands$1]]' @@ -258,7 +268,7 @@ function Convert-CommandText { $commandText = $commandText -replace 'https://chocolatey.org/docs/features-package-reducer', 'https://docs.chocolatey.org/en-us/features/package-reducer' $commandText = $commandText -replace 'https://chocolatey.org/docs/en-us/features/package-reducer', 'https://docs.chocolatey.org/en-us/features/package-reducer' $commandText = $commandText -replace '\[community feed\)\]\(https://community.chocolatey.org/packages\)', '[community feed](https://community.chocolatey.org/packages))' - $commandText = $commandText -replace '> :choco-info: \*\*NOTE\*\*\s', '> :choco-info: **NOTE** + $commandText = $commandText -replace '> :choco-(info|warning): \*\*(INFO|WARNING)\*\*\s', '> :choco-$1: **$2** > > ' @@ -575,6 +585,7 @@ The following are experimental or use not recommended: $global:powerShellReferenceTOC | Out-File $fileName -Encoding UTF8 -Force Write-Host "Generating command reference markdown files" + Generate-CommandReference 'Cache' '5' Generate-CommandReference 'Config' '10' Generate-CommandReference 'Download' '20' Generate-CommandReference 'Export' '30' diff --git a/recipe.cake b/recipe.cake index 92bfd865b7..7ce040942c 100644 --- a/recipe.cake +++ b/recipe.cake @@ -1,4 +1,4 @@ -#load nuget:?package=Chocolatey.Cake.Recipe&version=0.22.0 +#load nuget:?package=Chocolatey.Cake.Recipe&version=0.23.1 /////////////////////////////////////////////////////////////////////////////// // TOOLS diff --git a/src/chocolatey.resources/chocolatey.resources.csproj b/src/chocolatey.resources/chocolatey.resources.csproj index efc1e7e305..a43e256039 100644 --- a/src/chocolatey.resources/chocolatey.resources.csproj +++ b/src/chocolatey.resources/chocolatey.resources.csproj @@ -66,6 +66,7 @@ + diff --git a/src/chocolatey.resources/helpers/ChocolateyTabExpansion.ps1 b/src/chocolatey.resources/helpers/ChocolateyTabExpansion.ps1 index 9aae203a27..2eb13a8341 100644 --- a/src/chocolatey.resources/helpers/ChocolateyTabExpansion.ps1 +++ b/src/chocolatey.resources/helpers/ChocolateyTabExpansion.ps1 @@ -35,10 +35,10 @@ function script:chocoCmdOperations($commands, $command, $filter, $currentArgumen Where-Object { $_ -like "$filter*" } } -$script:chocoCommands = @('-?','search','list','info','install','outdated','upgrade','uninstall','new','pack','push','-h','--help','pin','source','config','feature','apikey','export','help','template','--version') +$script:chocoCommands = @('-?','search','list','info','install','outdated','upgrade','uninstall','new','pack','push','-h','--help','pin','source','config','feature','apikey','export','help','template','cache','--version') # ensure these all have a space to start, or they will cause issues -$allcommands = " --debug --verbose --trace --noop --help -? --online --accept-license --confirm --limit-output --no-progress --log-file='' --execution-timeout='' --cache-location='' --proxy='' --proxy-user='' --proxy-password='' --proxy-bypass-list='' --proxy-bypass-on-local --force --no-color --skip-compatibility-checks" +$allcommands = " --debug --verbose --trace --noop --help -? --online --accept-license --confirm --limit-output --no-progress --log-file='' --execution-timeout='' --cache-location='' --proxy='' --proxy-user='' --proxy-password='' --proxy-bypass-list='' --proxy-bypass-on-local --force --no-color --skip-compatibility-checks --ignore-http-cache" $commandOptions = @{ list = "--id-only --pre --exact --by-id-only --id-starts-with --detailed --prerelease --include-programs --source='' --page='' --page-size=''" @@ -58,65 +58,57 @@ $commandOptions = @{ apikey = "--source='' --api-key='' --remove" export = "--include-version-numbers --output-file-path=''" template = "--name=''" + cache = "--expired" } $commandOptions['find'] = $commandOptions['search'] -try { - $licenseFile = Get-Item -Path "$env:ChocolateyInstall\license\chocolatey.license.xml" -ErrorAction Stop +$licenseFile = "$env:ChocolateyInstall\license\chocolatey.license.xml" - if ($licenseFile) { - # Add pro-only commands - $script:chocoCommands = @( - $script:chocoCommands - 'download' - 'optimize' - ) +if (Test-Path $licenseFile) { + # Add pro-only commands + $script:chocoCommands = @( + $script:chocoCommands + 'download' + 'optimize' + ) - $commandOptions.download = "--internalize --internalize-all-urls --ignore-dependencies --installed-packages --ignore-unfound-packages --resources-location='' --download-location='' --outputdirectory='' --source='' --version='' --prerelease --user='' --password='' --cert='' --certpassword='' --append-use-original-location --recompile --disable-package-repository-optimizations" - $commandOptions.sync = "--output-directory='' --id='' --package-id=''" - $commandOptions.optimize = "--deflate-nupkg-only --id=''" + $commandOptions.download = "--internalize --internalize-all-urls --ignore-dependencies --installed-packages --ignore-unfound-packages --resources-location='' --download-location='' --outputdirectory='' --source='' --version='' --prerelease --user='' --password='' --cert='' --certpassword='' --append-use-original-location --recompile --disable-package-repository-optimizations" + $commandOptions.sync = "--output-directory='' --id='' --package-id=''" + $commandOptions.optimize = "--deflate-nupkg-only --id=''" - # Add pro switches to commands that have additional switches on Pro - $proInstallUpgradeOptions = " --install-directory='' --package-parameters-sensitive='' --max-download-rate='' --install-arguments-sensitive='' --skip-download-cache --use-download-cache --skip-virus-check --virus-check --virus-positives-minimum='' --deflate-package-size --no-deflate-package-size --deflate-nupkg-only" + # Add pro switches to commands that have additional switches on Pro + $proInstallUpgradeOptions = " --install-directory='' --package-parameters-sensitive='' --max-download-rate='' --install-arguments-sensitive='' --skip-download-cache --use-download-cache --skip-virus-check --virus-check --virus-positives-minimum='' --deflate-package-size --no-deflate-package-size --deflate-nupkg-only" - $commandOptions.install += $proInstallUpgradeOptions - $commandOptions.upgrade += $proInstallUpgradeOptions + " --exclude-chocolatey-packages-during-upgrade-all --include-chocolatey-packages-during-upgrade-all" - $commandOptions.new += " --build-package --use-original-location --keep-remote --url='' --url64='' --checksum='' --checksum64='' --checksumtype='' --pause-on-error" - $commandOptions.pin += " --note=''" + $commandOptions.install += $proInstallUpgradeOptions + $commandOptions.upgrade += $proInstallUpgradeOptions + " --exclude-chocolatey-packages-during-upgrade-all --include-chocolatey-packages-during-upgrade-all" + $commandOptions.new += " --build-package --use-original-location --keep-remote --url='' --url64='' --checksum='' --checksum64='' --checksumtype='' --pause-on-error" + $commandOptions.pin += " --note=''" - # Add Business-only commands and options if the license is a Business or Trial license - [xml]$xml = Get-Content -Path $licenseFile.FullName -ErrorAction Stop - $licenseType = $xml.license.type + # Add Business-only commands and options if the license is a Business or Trial license + [xml]$xml = Get-Content -Path $licenseFile -ErrorAction Stop + $licenseType = $xml.license.type - if ('Business', 'BusinessTrial' -contains $licenseType) { + if ('Business', 'BusinessTrial' -contains $licenseType) { - # Add business-only commands - $script:chocoCommands = @( - $script:chocoCommands - 'support' - 'sync' - ) + # Add business-only commands + $script:chocoCommands = @( + $script:chocoCommands + 'support' + 'sync' + ) - $commandOptions.list += " --audit" - $commandOptions.uninstall += " --from-programs-and-features" - $commandOptions.new += " --file='' --file64='' --from-programs-and-features --remove-architecture-from-name --include-architecture-in-name" + $commandOptions.list += " --audit" + $commandOptions.uninstall += " --from-programs-and-features" + $commandOptions.new += " --file='' --file64='' --from-programs-and-features --remove-architecture-from-name --include-architecture-in-name" - # Add --use-self-service to commands that support it - $selfServiceCommands = 'list', 'find', 'search', 'info', 'install', 'upgrade', 'uninstall', 'pin', 'outdated', 'push', 'download', 'sync', 'optimize' - foreach ($command in $selfServiceCommands) { - $commandOptions.$command += ' --use-self-service' - } + # Add --use-self-service to commands that support it + $selfServiceCommands = 'list', 'find', 'search', 'info', 'install', 'upgrade', 'uninstall', 'pin', 'outdated', 'push', 'download', 'sync', 'optimize' + foreach ($command in $selfServiceCommands) { + $commandOptions.$command += ' --use-self-service' } } } -catch { - # Remove the error that last occurred from $error so it doesn't cause any - # issues for users, as we're deliberately ignoring it. - if ($error.Count -gt 0) { - $error.RemoveAt(0) - } -} foreach ($key in @($commandOptions.Keys)) { $commandOptions.$key += $allcommands @@ -233,6 +225,11 @@ function ChocolateyTabExpansion($lastBlock) { @('list', 'info', '-?') | Where-Object { $_ -like "$($matches['subcommand'])*" } } + # Handles cache first tab + "^(cache)\s+(?[^-\s]*)$" { + @('list', 'remove', '-?') | Where-Object { $_ -like "$($matches['subcommand'])*" } + } + # Handles more options after others "^(?$($commandOptions.Keys -join '|'))(?.*)\s+(?\S*)$" { chocoCmdOperations $commandOptions $matches['cmd'] $matches['op'] $matches['currentArguments'] diff --git a/src/chocolatey.resources/helpers/functions/Get-ChocolateyConfigValue.ps1 b/src/chocolatey.resources/helpers/functions/Get-ChocolateyConfigValue.ps1 new file mode 100644 index 0000000000..fc2936b224 --- /dev/null +++ b/src/chocolatey.resources/helpers/functions/Get-ChocolateyConfigValue.ps1 @@ -0,0 +1,63 @@ +# Copyright © 2022 Chocolatey Software, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +function Get-ChocolateyConfigValue { + <# +.SYNOPSIS +Retrieve a value from the Chocolatey Configuration file + +.DESCRIPTION +This function will attempt to retrieve the path according to the specified Path Type +to a valid location that can be used by maintainers in certain scenarios. + +.NOTES +Available in 2.1.0+ + +.INPUTS +None + +.OUTPUTS +This function outputs the value of the specified configuration key. +If the key is not found, there is no output. + +.PARAMETER configKey +The name of the configuration value that should be looked up. + +.PARAMETER IgnoredArguments +Allows splatting with arguments that do not apply. Do not use directly. + +.EXAMPLE +> +$value = Get-ChocolateyConfigValue -configKey 'cacheLocation' +#> + param( + [parameter(Mandatory = $true)] + [string] $configKey, + [parameter(ValueFromRemainingArguments = $true)] + [Object[]] $ignoredArguments + ) + + try { + $installLocation = Get-ChocolateyPath -pathType 'InstallPath' + $configPath = Join-Path $installLocation "config\chocolatey.config" + [xml]$configContents = Get-Content -Path $configPath + return $configContents.chocolatey.config.add | + Where-Object { $_.key -eq $configKey } | + Select-Object -ExpandProperty value + } + catch { + Write-Error "Unable to read config value '$configKey' with error" -Exception $_ + } +} diff --git a/src/chocolatey.tests.integration/Scenario.cs b/src/chocolatey.tests.integration/Scenario.cs index 53a17c11ce..14f447ef35 100644 --- a/src/chocolatey.tests.integration/Scenario.cs +++ b/src/chocolatey.tests.integration/Scenario.cs @@ -319,6 +319,8 @@ private static ChocolateyConfiguration baseline_configuration() config.PinCommand.Name = string.Empty; config.PinCommand.Command = PinCommandType.Unknown; config.ListCommand.IdOnly = false; + config.ListCommand.PageSize = 25; + config.ListCommand.ExplicitPageSize = false; config.MachineSources.Clear(); return config; diff --git a/src/chocolatey.tests.integration/chocolatey.tests.integration.csproj b/src/chocolatey.tests.integration/chocolatey.tests.integration.csproj index 3f66423721..e1e64db302 100644 --- a/src/chocolatey.tests.integration/chocolatey.tests.integration.csproj +++ b/src/chocolatey.tests.integration/chocolatey.tests.integration.csproj @@ -13,6 +13,7 @@ chocolatey.tests.integration chocolatey.tests.integration v4.8 + 7.3 512 ..\ true @@ -79,22 +80,25 @@ - ..\packages\Chocolatey.NuGet.Common.3.1.0\lib\net472\Chocolatey.NuGet.Common.dll + ..\packages\Chocolatey.NuGet.Common.3.3.0\lib\net472\Chocolatey.NuGet.Common.dll - ..\packages\Chocolatey.NuGet.Configuration.3.1.0\lib\net472\Chocolatey.NuGet.Configuration.dll + ..\packages\Chocolatey.NuGet.Configuration.3.3.0\lib\net472\Chocolatey.NuGet.Configuration.dll - ..\packages\Chocolatey.NuGet.Frameworks.3.1.0\lib\net472\Chocolatey.NuGet.Frameworks.dll + ..\packages\Chocolatey.NuGet.Frameworks.3.3.0\lib\net472\Chocolatey.NuGet.Frameworks.dll - ..\packages\Chocolatey.NuGet.Packaging.3.1.0\lib\net472\Chocolatey.NuGet.Packaging.dll + ..\packages\Chocolatey.NuGet.Packaging.3.3.0\lib\net472\Chocolatey.NuGet.Packaging.dll - ..\packages\Chocolatey.NuGet.Protocol.3.1.0\lib\net472\Chocolatey.NuGet.Protocol.dll + ..\packages\Chocolatey.NuGet.Protocol.3.3.0\lib\net472\Chocolatey.NuGet.Protocol.dll - ..\packages\Chocolatey.NuGet.Versioning.3.1.0\lib\net472\Chocolatey.NuGet.Versioning.dll + ..\packages\Chocolatey.NuGet.Versioning.3.3.0\lib\net472\Chocolatey.NuGet.Versioning.dll + + + ..\packages\FluentAssertions.6.11.0\lib\net47\FluentAssertions.dll ..\packages\log4net.2.0.12\lib\net45\log4net.dll @@ -111,9 +115,6 @@ ..\packages\NUnit.3.13.3\lib\net40\nunit.framework.dll - - ..\packages\Should.1.1.20\lib\Should.dll - ..\packages\SimpleInjector.2.8.3\lib\net45\SimpleInjector.dll @@ -207,7 +208,9 @@ Always - + + + diff --git a/src/chocolatey.tests.integration/infrastructure.app/builders/ConfigurationBuilderSpecs.cs b/src/chocolatey.tests.integration/infrastructure.app/builders/ConfigurationBuilderSpecs.cs index 4ff1efca7f..f8a5555b27 100644 --- a/src/chocolatey.tests.integration/infrastructure.app/builders/ConfigurationBuilderSpecs.cs +++ b/src/chocolatey.tests.integration/infrastructure.app/builders/ConfigurationBuilderSpecs.cs @@ -33,7 +33,7 @@ namespace chocolatey.tests.integration.infrastructure.app.builders using chocolatey.infrastructure.registration; using Microsoft.Win32; using scenarios; - using Should; + using FluentAssertions; public class ConfigurationBuilderSpecs { @@ -140,31 +140,31 @@ public void ShouldHaveProxyConfiguration() if (!SystemSet && !ArgumentSet && !ConfigSet && !EnvironmentVariableSet) { - Configuration.Proxy.Location.ShouldEqual(string.Empty); + Configuration.Proxy.Location.Should().BeEmpty(); return; } if (ArgumentSet) { - Configuration.Proxy.Location.ShouldEqual(CommandArgumentProxyValue); + Configuration.Proxy.Location.Should().Be(CommandArgumentProxyValue); return; } if (ConfigSet) { - Configuration.Proxy.Location.ShouldEqual(ConfigurationFileProxyValue); + Configuration.Proxy.Location.Should().Be(ConfigurationFileProxyValue); return; } if (EnvironmentVariableSet) { - Configuration.Proxy.Location.ShouldEqual(EnvironmentVariableProxyValue); + Configuration.Proxy.Location.Should().Be(EnvironmentVariableProxyValue); return; } if (SystemSet) { - Configuration.Proxy.Location.ShouldEqual(SystemLevelProxyValue); + Configuration.Proxy.Location.Should().Be(SystemLevelProxyValue); return; } } @@ -211,25 +211,25 @@ public void ShouldBypassProxy() if (!ArgumentSet && !ConfigSet && !EnvironmentVariableSet) { - Configuration.Proxy.BypassList.ShouldEqual(string.Empty); + Configuration.Proxy.BypassList.Should().BeEmpty(); return; } if (ArgumentSet) { - Configuration.Proxy.BypassList.ShouldEqual(CommandArgumentProxyValue); + Configuration.Proxy.BypassList.Should().Be(CommandArgumentProxyValue); return; } if (ConfigSet) { - Configuration.Proxy.BypassList.ShouldEqual(ConfigurationFileProxyValue); + Configuration.Proxy.BypassList.Should().Be(ConfigurationFileProxyValue); return; } if (EnvironmentVariableSet) { - Configuration.Proxy.BypassList.ShouldEqual(EnvironmentVariableProxyValue); + Configuration.Proxy.BypassList.Should().Be(EnvironmentVariableProxyValue); return; } } diff --git a/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs b/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs index 46173c0421..65c37ccd95 100644 --- a/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs +++ b/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs @@ -29,7 +29,7 @@ namespace chocolatey.tests.integration.infrastructure.app.services using chocolatey.infrastructure.services; using Moq; using NUnit.Framework; - using Should; + using FluentAssertions; public class FilesServiceSpecs { @@ -101,7 +101,7 @@ public void Should_log_a_warning_about_locked_files() [Fact] public void Should_return_a_special_code_for_locked_files() { - _result.Files.FirstOrDefault(x => x.Path == _theLockedFile).Checksum.ShouldEqual(ApplicationParameters.HashProviderFileLocked); + _result.Files.Should().ContainSingle(x => x.Path == _theLockedFile).Which.Checksum.Should().Be(ApplicationParameters.HashProviderFileLocked); } } } diff --git a/src/chocolatey.tests.integration/infrastructure/commands/CommandExecutorSpecs.cs b/src/chocolatey.tests.integration/infrastructure/commands/CommandExecutorSpecs.cs index 2232af6b4d..c4e931b79c 100644 --- a/src/chocolatey.tests.integration/infrastructure/commands/CommandExecutorSpecs.cs +++ b/src/chocolatey.tests.integration/infrastructure/commands/CommandExecutorSpecs.cs @@ -21,7 +21,7 @@ namespace chocolatey.tests.integration.infrastructure.commands using chocolatey.infrastructure.commands; using chocolatey.infrastructure.filesystem; using NUnit.Framework; - using Should; + using FluentAssertions; public class CommandExecutorSpecs { @@ -64,19 +64,19 @@ public override void Because() [Fact] public void Should_not_return_an_exit_code_of_zero() { - result.ShouldNotEqual(0); + result.Should().NotBe(0); } [Fact] public void Should_contain_error_output() { - errorOutput.ShouldNotBeNull(); + errorOutput.Should().NotBeNull(); } [Fact] public void Should_message_the_error() { - errorOutput.ShouldEqual("'bob123123' is not recognized as an internal or external command,operable program or batch file."); + errorOutput.Should().Be("'bob123123' is not recognized as an internal or external command,operable program or batch file."); } } @@ -102,7 +102,7 @@ public override void Because() [Fact] public void Should_have_an_error_message() { - result.ShouldNotBeNull(); + result.Should().NotBeNull(); } } } diff --git a/src/chocolatey.tests.integration/infrastructure/cryptography/CryptoHashProviderSpecs.cs b/src/chocolatey.tests.integration/infrastructure/cryptography/CryptoHashProviderSpecs.cs index 46c69a5007..0089223418 100644 --- a/src/chocolatey.tests.integration/infrastructure/cryptography/CryptoHashProviderSpecs.cs +++ b/src/chocolatey.tests.integration/infrastructure/cryptography/CryptoHashProviderSpecs.cs @@ -21,7 +21,7 @@ namespace chocolatey.tests.integration.infrastructure.cryptography using System.Security.Cryptography; using chocolatey.infrastructure.cryptography; using chocolatey.infrastructure.filesystem; - using Should; + using FluentAssertions; public class CryptoHashProviderSpecs { @@ -60,7 +60,7 @@ public void Should_provide_the_correct_hash_based_on_a_checksum() { var expected = BitConverter.ToString(SHA256.Create().ComputeHash(File.ReadAllBytes(filePath))).Replace("-", string.Empty); - result.ShouldEqual(expected); + result.Should().Be(expected); } } } diff --git a/src/chocolatey.tests.integration/infrastructure/filesystem/DotNetFileSystemSpecs.cs b/src/chocolatey.tests.integration/infrastructure/filesystem/DotNetFileSystemSpecs.cs index eb767bb164..af2d2f778a 100644 --- a/src/chocolatey.tests.integration/infrastructure/filesystem/DotNetFileSystemSpecs.cs +++ b/src/chocolatey.tests.integration/infrastructure/filesystem/DotNetFileSystemSpecs.cs @@ -22,7 +22,8 @@ namespace chocolatey.tests.integration.infrastructure.filesystem using chocolatey.infrastructure.filesystem; using chocolatey.infrastructure.platforms; using NUnit.Framework; - using Should; + using FluentAssertions; + using FluentAssertions.Extensions; public class DotNetFileSystemSpecs { @@ -59,41 +60,39 @@ public override void Because() [Fact] public void GetExecutablePath_should_find_existing_executable() { - FileSystem.GetExecutablePath("cmd").ShouldEqual( + FileSystem.GetExecutablePath("cmd").Should().BeEquivalentTo( Platform.GetPlatform() == PlatformType.Windows ? "C:\\Windows\\system32\\cmd.exe" - : "cmd", - StringComparer.OrdinalIgnoreCase - ); + : "cmd" + ); } [Fact] public void GetExecutablePath_should_find_existing_executable_with_extension() { - FileSystem.GetExecutablePath("cmd.exe").ShouldEqual( + FileSystem.GetExecutablePath("cmd.exe").Should().BeEquivalentTo( Platform.GetPlatform() == PlatformType.Windows ? "c:\\windows\\system32\\cmd.exe" - : "cmd.exe", - StringComparer.OrdinalIgnoreCase + : "cmd.exe" ); } [Fact] public void GetExecutablePath_should_return_same_value_when_executable_is_not_found() { - FileSystem.GetExecutablePath("daslakjsfdasdfwea").ShouldEqual("daslakjsfdasdfwea"); + FileSystem.GetExecutablePath("daslakjsfdasdfwea").Should().Be("daslakjsfdasdfwea"); } [Fact] public void GetExecutablePath_should_return_empty_string_when_value_is_null() { - FileSystem.GetExecutablePath(null).ShouldEqual(string.Empty); + FileSystem.GetExecutablePath(null).Should().BeEmpty(); } [Fact] public void GetExecutablePath_should_return_empty_string_when_value_is_empty_string() { - FileSystem.GetExecutablePath(string.Empty).ShouldEqual(string.Empty); + FileSystem.GetExecutablePath(string.Empty).Should().BeEmpty(); } } @@ -120,7 +119,7 @@ public override void Because() [Fact] public void GetFiles_should_return_string_array_of_files() { - FileSystem.GetFiles(ContextPath, "*lipsum*", SearchOption.AllDirectories).ShouldEqual(FileArray); + FileSystem.GetFiles(ContextPath, "*lipsum*", SearchOption.AllDirectories).Should().BeEquivalentTo(FileArray); } [Fact] @@ -132,8 +131,7 @@ public void GetFiles_should_return_files_that_meet_the_pattern() var actual = FileSystem.GetFiles(ContextPath, "chocolateyInstall.ps1", SearchOption.AllDirectories).ToList(); FileSystem.DeleteFile(filePath); - actual.ShouldNotBeEmpty(); - actual.Count().ShouldEqual(1); + actual.Should().ContainSingle(); } [Fact] @@ -147,44 +145,43 @@ public void GetFiles_should_return_files_that_meet_the_pattern_regardless_of_cas var actual = FileSystem.GetFiles(ContextPath, "chocolateyinstall.ps1", SearchOption.AllDirectories).ToList(); FileSystem.DeleteFile(filePath); - actual.ShouldNotBeEmpty(); - actual.Count().ShouldEqual(1); + actual.Should().ContainSingle(); } [Fact] public void FileExists_should_return_true_if_file_exists() { - FileSystem.FileExists(TheTestFile).ShouldBeTrue(); + FileSystem.FileExists(TheTestFile).Should().BeTrue(); } [Fact] public void FileExists_should_return_false_if_file_does_not_exists() { - FileSystem.FileExists(Path.Combine(ContextPath, "IDontExist.txt")).ShouldBeFalse(); + FileSystem.FileExists(Path.Combine(ContextPath, "IDontExist.txt")).Should().BeFalse(); } [Fact] public void DirectoryExists_should_return_true_if_directory_exists() { - FileSystem.DirectoryExists(ContextPath).ShouldBeTrue(); + FileSystem.DirectoryExists(ContextPath).Should().BeTrue(); } [Fact] public void DirectoryExists_should_return_false_if_directory_does_not_exist() { - FileSystem.DirectoryExists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "IDontExist")).ShouldBeFalse(); + FileSystem.DirectoryExists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "IDontExist")).Should().BeFalse(); } [Fact] public void GetFileSize_should_return_correct_file_size() { - FileSystem.GetFileSize(TheTestFile).ShouldEqual(5377); + FileSystem.GetFileSize(TheTestFile).Should().Be(5377); } [Fact] public void GetDirectories_should_return_a_string_array_with_directories() { - FileSystem.GetDirectories(ContextPath).ShouldEqual(DirectoryArray); + FileSystem.GetDirectories(ContextPath).Should().BeEquivalentTo(DirectoryArray); } } @@ -207,7 +204,7 @@ public override void Because() [Fact] public void Visible_file_should_now_be_hidden() { - ((FileAttributes)FileSystem.GetFileInfoFor(SourceFile).Attributes & FileAttributes.Hidden).ShouldEqual(FileAttributes.Hidden); + ((FileAttributes)FileSystem.GetFileInfoFor(SourceFile).Attributes).Should().HaveFlag(FileAttributes.Hidden); } public override void AfterObservations() @@ -234,7 +231,7 @@ public override void Because() [Fact] public void Readonly_file_should_no_longer_be_readonly() { - ((FileAttributes)FileSystem.GetFileInfoFor(SourceFile).Attributes & FileAttributes.ReadOnly).ShouldNotEqual(FileAttributes.ReadOnly); + ((FileAttributes)FileSystem.GetFileInfoFor(SourceFile).Attributes).Should().NotHaveFlag(FileAttributes.ReadOnly); } } @@ -258,13 +255,13 @@ public override void Because() [Fact] public void Move_me_text_file_should_not_exist_in_the_source_path() { - FileSystem.FileExists(SourceFile).ShouldBeFalse(); + FileSystem.FileExists(SourceFile).Should().BeFalse(); } [Fact] public void Move_me_text_file_should_exist_in_destination_path() { - FileSystem.FileExists(DestFile).ShouldBeTrue(); + FileSystem.FileExists(DestFile).Should().BeTrue(); } } @@ -291,13 +288,13 @@ public override void Because() [Fact] public void Copy_me_text_file_should_exist_in_context_path() { - FileSystem.FileExists(SourceFile).ShouldBeTrue(); + FileSystem.FileExists(SourceFile).Should().BeTrue(); } [Fact] public void Move_me_text_file_should_exist_in_destination_path() { - FileSystem.FileExists(DestFile).ShouldBeTrue(); + FileSystem.FileExists(DestFile).Should().BeTrue(); } } @@ -319,7 +316,7 @@ public override void Because() [Fact] public void Delete_me_text_file_should_not_exist() { - FileSystem.FileExists(DeleteFile).ShouldBeFalse(); + FileSystem.FileExists(DeleteFile).Should().BeFalse(); } } @@ -338,7 +335,7 @@ public override void Because() [Fact] public void Test_directory_should_exist() { - FileSystem.DirectoryExists(TestDirectory).ShouldBeTrue(); + FileSystem.DirectoryExists(TestDirectory).Should().BeTrue(); } } @@ -353,7 +350,7 @@ public override void Because() [Fact] public void Should_have_correct_modified_date() { - FileSystem.GetFileModifiedDate(TheTestFile).ToShortDateString().ShouldEqual(DateTime.Now.AddDays(-1).ToShortDateString()); + FileSystem.GetFileModifiedDate(TheTestFile).Should().BeCloseTo(1.Days().Before(DateTime.Now), 5.Seconds()); } } } diff --git a/src/chocolatey.tests.integration/packages.config b/src/chocolatey.tests.integration/packages.config index 2db5b9d29b..c7cf5b6d94 100644 --- a/src/chocolatey.tests.integration/packages.config +++ b/src/chocolatey.tests.integration/packages.config @@ -1,18 +1,19 @@  - - - - - - + + + + + + + + - diff --git a/src/chocolatey.tests.integration/scenarios/InfoScenarios.cs b/src/chocolatey.tests.integration/scenarios/InfoScenarios.cs index 89f0bb94e6..ca6c30e645 100644 --- a/src/chocolatey.tests.integration/scenarios/InfoScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/InfoScenarios.cs @@ -18,7 +18,7 @@ namespace chocolatey.tests.integration.scenarios using NUnit.Framework; - using Should; + using FluentAssertions; public class InfoScenarios { @@ -83,8 +83,8 @@ public override void Context() [Fact] public void Should_log_standalone_header_with_package_name_and_version() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain("installpackage 1.0.0"); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0")); } [Fact] @@ -93,15 +93,15 @@ public void Should_log_package_information() var lastWriteDate = File.GetLastWriteTimeUtc(Path.Combine("PackageOutput", "installpackage.1.0.0" + NuGetConstants.PackageExtension)) .ToShortDateString(); - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate))); } [Fact] public void Should_log_package_count_as_warning() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Warn.ToStringSafe()); - MockLogger.Messages[LogLevel.Warn.ToStringSafe()].ShouldContain("1 packages found."); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1 packages found.")); } } @@ -122,8 +122,8 @@ public override void Context() [Fact] public void Should_log_standalone_header_with_package_name_and_version() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain("installpackage 1.0.0"); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0")); } [Fact] @@ -132,15 +132,15 @@ public void Should_log_package_information() var lastWriteDate = File.GetLastWriteTimeUtc(Path.Combine("PackageOutput", "installpackage.1.0.0" + NuGetConstants.PackageExtension)) .ToShortDateString(); - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate))); } [Fact] public void Should_log_package_count_as_warning() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Warn.ToStringSafe()); - MockLogger.Messages[LogLevel.Warn.ToStringSafe()].ShouldContain("1 packages found."); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1 packages found.")); } } @@ -161,8 +161,8 @@ public override void Context() [Fact] public void Should_log_standalone_header_with_package_name_and_version() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain("installpackage 1.0.0"); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0")); } [Fact] @@ -171,15 +171,15 @@ public void Should_log_package_information() var lastWriteDate = File.GetLastWriteTimeUtc(Path.Combine("PackageOutput", "installpackage.1.0.0" + NuGetConstants.PackageExtension)) .ToShortDateString(); - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate))); } [Fact] public void Should_log_package_count_as_warning() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Warn.ToStringSafe()); - MockLogger.Messages[LogLevel.Warn.ToStringSafe()].ShouldContain("1 packages found."); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1 packages found.")); } } @@ -202,8 +202,8 @@ public override void Context() [Fact] public void Should_log_standalone_header_with_package_name_and_version() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain("installpackage {0}".FormatWith(NormalizedVersion)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage {0}".FormatWith(NormalizedVersion))); } [Fact] @@ -212,15 +212,15 @@ public void Should_log_package_information() var lastWriteDate = File.GetLastWriteTimeUtc(Path.Combine("PackageOutput", "installpackage.{0}".FormatWith(NonNormalizedVersion) + NuGetConstants.PackageExtension)) .ToShortDateString(); - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate))); } [Fact] public void Should_log_package_count_as_warning() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Warn.ToStringSafe()); - MockLogger.Messages[LogLevel.Warn.ToStringSafe()].ShouldContain("1 packages found."); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1 packages found.")); } } @@ -245,8 +245,8 @@ public override void Context() [Fact] public void Should_log_standalone_header_with_package_name_and_version() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain("installpackage {0}".FormatWith(NormalizedVersion)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage {0}".FormatWith(NormalizedVersion))); } [Fact] @@ -255,15 +255,15 @@ public void Should_log_package_information() var lastWriteDate = File.GetLastWriteTimeUtc(Path.Combine("PackageOutput", "installpackage.{0}".FormatWith(NonNormalizedVersion) + NuGetConstants.PackageExtension)) .ToShortDateString(); - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate))); } [Fact] public void Should_log_package_count_as_warning() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Warn.ToStringSafe()); - MockLogger.Messages[LogLevel.Warn.ToStringSafe()].ShouldContain("1 packages found."); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1 packages found.")); } } @@ -288,8 +288,8 @@ public override void Context() [Fact] public void Should_log_standalone_header_with_package_name_and_version() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain("installpackage {0}".FormatWith(NormalizedVersion)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage {0}".FormatWith(NormalizedVersion))); } [Fact] @@ -298,15 +298,15 @@ public void Should_log_package_information() var lastWriteDate = File.GetLastWriteTimeUtc(Path.Combine("PackageOutput", "installpackage.{0}".FormatWith(NonNormalizedVersion) + NuGetConstants.PackageExtension)) .ToShortDateString(); - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate))); } [Fact] public void Should_log_package_count_as_warning() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Warn.ToStringSafe()); - MockLogger.Messages[LogLevel.Warn.ToStringSafe()].ShouldContain("1 packages found."); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1 packages found.")); } } @@ -336,8 +336,8 @@ public override void Because() [Fact] public new void Should_log_standalone_header_with_package_name_and_version() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain("installpackage 1.0.0"); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0")); } [Fact] @@ -346,15 +346,15 @@ public new void Should_log_package_information() var lastWriteDate = File.GetLastWriteTimeUtc(Path.Combine("PackageOutput", "installpackage.1.0.0" + NuGetConstants.PackageExtension)) .ToShortDateString(); - MockLogger.Messages.Keys.ShouldContain(LogLevel.Info.ToStringSafe()); - MockLogger.Messages[LogLevel.Info.ToStringSafe()].ShouldContain(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(" Title: installpackage | Published: {0}\r\n Number of Downloads: n/a | Downloads for this version: n/a\r\n Package url\r\n Chocolatey Package Source: n/a\r\n Tags: installpackage admin\r\n Software Site: n/a\r\n Software License: n/a\r\n Summary: __REPLACE__\r\n Description: __REPLACE__\r\n".FormatWith(lastWriteDate))); } [Fact] public new void Should_log_package_count_as_warning() { - MockLogger.Messages.Keys.ShouldContain(LogLevel.Warn.ToStringSafe()); - MockLogger.Messages[LogLevel.Warn.ToStringSafe()].ShouldContain("1 packages found."); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1 packages found.")); } } @@ -372,31 +372,31 @@ public override void Context() [Fact] public void Should_show_only_one_result() { - Results.Count.ShouldEqual(1, "Expected 1 package to be returned!"); + Results.Should().ContainSingle("Expected 1 package to be returned!"); } [Fact] public void Should_set_exit_code_to_zero() { - Results[0].ExitCode.ShouldEqual(0); + Results[0].ExitCode.Should().Be(0); } [Fact] public void Should_not_be_reported_as_inconclusive() { - Results[0].Inconclusive.ShouldBeFalse(); + Results[0].Inconclusive.Should().BeFalse(); } [Fact] public void Should_report_expected_name() { - Results[0].Name.ShouldEqual("installpackage"); + Results[0].Name.Should().Be("installpackage"); } [Fact] public void Should_set_source_to_expected_value() { - Results[0].Source.ShouldEqual( + Results[0].Source.Should().Be( ((Platform.GetPlatform() == PlatformType.Windows ? "file:///" : "file://") + Path.Combine(Environment.CurrentDirectory, "PackageOutput")) .Replace("\\","/")); } @@ -404,7 +404,7 @@ public void Should_set_source_to_expected_value() [Fact] public void Should_set_expected_version() { - Results[0].Version.ShouldEqual("1.0.0"); + Results[0].Version.Should().Be("1.0.0"); } } @@ -422,25 +422,25 @@ public override void Context() [Fact] public void Should_show_only_one_result() { - Results.Count.ShouldEqual(1, "Expected 1 package to be returned!"); + Results.Should().ContainSingle( "Expected 1 package to be returned!"); } [Fact] public void Should_set_exit_code_to_zero() { - Results[0].ExitCode.ShouldEqual(0); + Results[0].ExitCode.Should().Be(0); } [Fact] public void Should_not_be_reported_as_inconclusive() { - Results[0].Inconclusive.ShouldBeFalse(); + Results[0].Inconclusive.Should().BeFalse(); } [Fact] public void Should_report_expected_name() { - Results[0].Name.ShouldEqual("test-package"); + Results[0].Name.Should().Be("test-package"); } [Fact] @@ -451,13 +451,13 @@ public void Should_set_source_to_expected_value() "PrioritySources", "Priority1").Replace('\\', '/'); - Results[0].Source.ShouldEqual(expectedSource); + Results[0].Source.Should().Be(expectedSource); } [Fact] public void Should_set_expected_version() { - Results[0].Version.ShouldEqual("0.1.0"); + Results[0].Version.Should().Be("0.1.0"); } } @@ -478,25 +478,25 @@ public override void Context() [Fact] public void Should_show_only_one_result() { - Results.Count.ShouldEqual(1, "Expected 1 package to be returned!"); + Results.Should().ContainSingle( "Expected 1 package to be returned!"); } [Fact] public void Should_set_exit_code_to_zero() { - Results[0].ExitCode.ShouldEqual(0); + Results[0].ExitCode.Should().Be(0); } [Fact] public void Should_not_be_reported_as_inconclusive() { - Results[0].Inconclusive.ShouldBeFalse(); + Results[0].Inconclusive.Should().BeFalse(); } [Fact] public void Should_report_expected_name() { - Results[0].Name.ShouldEqual("upgradepackage"); + Results[0].Name.Should().Be("upgradepackage"); } [Fact] @@ -507,13 +507,13 @@ public void Should_set_source_to_expected_value() "PrioritySources", "Priority1").Replace('\\', '/'); - Results[0].Source.ShouldEqual(expectedSource); + Results[0].Source.Should().Be(expectedSource); } [Fact] public void Should_set_expected_version() { - Results[0].Version.ShouldEqual("1.0.0"); + Results[0].Version.Should().Be("1.0.0"); } } } diff --git a/src/chocolatey.tests.integration/scenarios/InstallScenarios.cs b/src/chocolatey.tests.integration/scenarios/InstallScenarios.cs index 674e860890..a6b5a36cb3 100644 --- a/src/chocolatey.tests.integration/scenarios/InstallScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/InstallScenarios.cs @@ -32,7 +32,8 @@ namespace chocolatey.tests.integration.scenarios using NuGet.Configuration; using NuGet.Packaging; using NUnit.Framework; - using Should; + using FluentAssertions; + using FluentAssertions.Execution; using IFileSystem = chocolatey.infrastructure.filesystem.IFileSystem; public class InstallScenarios @@ -83,13 +84,8 @@ public void Should_not_install_a_package_in_the_lib_directory() [Fact] public void Should_contain_a_message_that_it_would_have_used_Nuget_to_install_a_package() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Info).OrEmpty()) - { - if (message.Contains("would have used NuGet to install packages")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToString()) + .WhoseValue.Should().Contain(m => m.Contains("would have used NuGet to install packages")); } [Fact] @@ -97,13 +93,17 @@ public void Should_contain_a_message_that_it_would_have_used_Nuget_to_install_a_ [Platform(Exclude = "Mono")] public void Should_contain_a_message_that_it_would_have_run_a_powershell_script() { - MockLogger.ContainsMessage("chocolateyinstall.ps1", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should() + .ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("chocolateyinstall.ps1")); } [Fact] public void Should_not_contain_a_message_that_it_would_have_run_powershell_modification_script() { - MockLogger.ContainsMessage("chocolateyBeforeModify.ps1", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should() + .ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("chocolateyBeforeModify.ps1")); } } @@ -132,25 +132,16 @@ public void Should_not_install_a_package_in_the_lib_directory() [Fact] public void Should_contain_a_message_that_it_would_have_used_Nuget_to_install_a_package() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Info).OrEmpty()) - { - if (message.Contains("would have used NuGet to install packages")) expectedMessage = true; - } + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToString()) + .WhoseValue.Should().Contain(m => m.Contains("would have used NuGet to install packages")); - expectedMessage.ShouldBeTrue(); } [Fact] public void Should_contain_a_message_that_it_was_unable_to_find_package() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Error).OrEmpty()) - { - if (message.Contains("somethingnonexisting not installed. The package was not found with the source(s) listed")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToString()) + .WhoseValue.Should().Contain(m => m.Contains("somethingnonexisting not installed. The package was not found with the source(s) listed")); } } @@ -196,7 +187,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual(TestVersion()); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be(TestVersion()); } } @@ -268,15 +259,9 @@ public void Should_have_a_console_shim_that_is_set_for_non_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? False")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI false message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? False"), "GUI false message not found"); } [Fact] @@ -295,57 +280,47 @@ public void Should_have_a_graphical_shim_that_is_set_for_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? True")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI true message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? True"), "GUI true message not found"); } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should() + .ContainKey(LogLevel.Warn.ToString()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - packageResult.Version.ShouldEqual(TestVersion()); + packageResult.Version.Should().Be(TestVersion()); } [Fact] @@ -355,7 +330,9 @@ public void Should_have_executed_chocolateyInstall_script() { var message = "installpackage v{0} has been installed".FormatWith(TestVersion()); - MockLogger.ContainsMessage(message, LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should() + .ContainKey(LogLevel.Info.ToString()) + .WhoseValue.Should().Contain(m => m.Contains(message)); } protected string TestVersion() @@ -440,89 +417,55 @@ public void Should_install_the_dependency_in_the_lib_directory() [Fact] public void Should_contain_a_warning_message_that_it_installed_4_out_of_5_packages_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("5/6")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("5/6")); } [Fact] public void Should_contain_a_message_that_upgradepackage_with_an_expected_specified_version_was_installed() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Info).OrEmpty()) - { - if (message.Contains("upgradepackage v1.0.0")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage v1.0.0")); } [Fact] public void Should_have_a_successful_package_result_for_all_but_expected_missing_package() { - foreach (var packageResult in Results) - { - if (packageResult.Value.Name.IsEqualTo("missingpackage")) continue; - - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Where(r => !r.Value.Name.IsEqualTo("missingpackage")) + .Should().AllSatisfy(p => p.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_a_successful_package_result_for_missing_package() { - foreach (var packageResult in Results) - { - if (!packageResult.Value.Name.IsEqualTo("missingpackage")) continue; - - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().Contain(r => r.Value.Name.IsEqualTo("missingpackage")) + .Which.Value.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_specify_config_file_is_being_used_in_message() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Info).OrEmpty()) - { - if (message.Contains("Installing from config file:")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Installing from config file:")); } [Fact] public void Should_print_out_package_from_config_file_in_message() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Info).OrEmpty()) - { - if (message.Contains("installpackage")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage")); } } @@ -556,47 +499,35 @@ public void Should_still_have_the_expected_version_of_the_package_installed() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_install_any_packages() { - bool installWarning = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installWarning = true; - } - - installWarning.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_contain_a_message_about_force_to_reinstall() { - bool installWarning = false; - foreach (var messageType in MockLogger.Messages.OrEmpty()) - { - foreach (var message in messageType.Value) - { - if (message.Contains("Use --force to reinstall")) installWarning = true; - } - } - - installWarning.ShouldBeTrue(); + MockLogger.Messages.Should() + .ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Use --force to reinstall")); } [Fact] public void Should_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeTrue(); + packageResult.Inconclusive.Should().BeTrue(); } [Fact] public void Should_ave_warning_package_result() { - packageResult.Warning.ShouldBeTrue(); + packageResult.Warning.Should().BeTrue(); } } @@ -641,7 +572,7 @@ public void Should_install_the_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -649,7 +580,7 @@ public void Should_install_the_same_version_of_the_package() public void Should_remove_and_re_add_the_package_files_in_the_lib_directory() { var modifiedFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "chocolateyinstall.ps1"); - File.ReadAllText(modifiedFile).ShouldNotEqual(modifiedText); + File.ReadAllText(modifiedFile).Should().NotBe(modifiedText); } [Fact] @@ -663,43 +594,38 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - packageResult.Version.ShouldEqual("1.0.0"); + packageResult.Version.Should().Be("1.0.0"); } } @@ -735,7 +661,7 @@ public void Should_restore_the_backup_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToNormalizedString().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedString().Should().Be("1.0.0"); } } @@ -743,7 +669,7 @@ public void Should_restore_the_backup_version_of_the_package() public void Should_restore_the_original_files_in_the_package_lib_folder() { var modifiedFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "chocolateyInstall.ps1"); - File.ReadAllText(modifiedFile).ShouldEqual(modifiedText); + File.ReadAllText(modifiedFile).Should().Be(modifiedText); } [Fact] @@ -757,31 +683,26 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_message_that_it_was_unsuccessful() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } } @@ -834,7 +755,7 @@ public void Should_reinstall_the_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -851,43 +772,38 @@ public void Should_not_be_able_delete_the_rollback() [Fact] public void Should_contain_a_message_that_it_installed_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - packageResult.Version.ShouldEqual("1.0.0"); + packageResult.Version.Should().Be("1.0.0"); } } @@ -934,7 +850,7 @@ public void Should_still_have_the_package_installed_with_the_expected_version_of var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -949,31 +865,26 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_message_that_it_was_unable_to_reinstall_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeTrue(); + packageResult.Inconclusive.Should().BeTrue(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } } @@ -1004,67 +915,47 @@ public void Should_not_install_a_package_in_the_lib_directory() [Fact] public void Should_contain_a_warning_message_that_it_did_not_install_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("The package was not found")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("The package was not found"))); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_one() { - packageResult.Version.ShouldEqual("1.0.1"); + packageResult.Version.Should().Be("1.0.1"); } } @@ -1095,61 +986,41 @@ public void Should_not_install_a_package_in_the_lib_directory() [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_install_a_package() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("The package was not found")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("The package was not found"))); } } @@ -1190,61 +1061,41 @@ public void Should_put_a_package_in_the_lib_bad_directory() [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_install_a_package() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("chocolateyInstall.ps1")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("chocolateyInstall.ps1"))); } } @@ -1287,50 +1138,45 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.Input, Configuration.Input + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToNormalizedString().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedString().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.Input); + packageResult.Name.Should().Be(Configuration.Input); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - packageResult.Version.ShouldEqual("1.0.0"); + packageResult.Version.Should().Be("1.0.0"); } } @@ -1374,61 +1220,41 @@ public void Should_put_a_package_in_the_lib_bad_directory() [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_install_a_package() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("chocolateyInstall.ps1")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("chocolateyInstall.ps1"))); } } @@ -1479,56 +1305,39 @@ public void Should_install_the_expected_version_of_the_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_installed_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("3/3")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("3/3")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - foreach (var packageResult in Results) - { - packageResult.Value.Version.ShouldEqual("1.0.0"); - } + Results.Should().AllSatisfy(r => r.Value.Version.Should().Be("1.0.0")); } } @@ -1575,7 +1384,7 @@ public void Should_reinstall_the_exact_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -1593,56 +1402,39 @@ public void Should_not_upgrade_the_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_it_installed_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - foreach (var packageResult in Results) - { - packageResult.Value.Version.ShouldEqual("1.0.0"); - } + Results.Should().AllSatisfy(r => r.Value.Version.Should().Be("1.0.0")); } } @@ -1696,7 +1488,7 @@ public void Should_reinstall_the_exact_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -1723,7 +1515,7 @@ public void Should_reinstall_the_floating_dependency_with_the_latest_version_tha var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -1733,47 +1525,33 @@ public void Should_reinstall_the_exact_same_version_of_the_exact_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("3/3")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("3/3")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -1821,7 +1599,7 @@ public void Should_reinstall_the_exact_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -1839,7 +1617,7 @@ public void Should_not_touch_the_floating_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -1849,47 +1627,33 @@ public void Should_not_touch_the_exact_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -1938,7 +1702,7 @@ public void Should_reinstall_the_exact_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -1959,40 +1723,26 @@ public void Should_remove_the_exact_dependency() [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -2029,78 +1779,42 @@ public void Should_not_install_the_dependency_in_the_lib_directory() [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_install_any_packages() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => m.MessageType == ResultType.Error)); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("Unable to resolve dependency 'isdependency")) errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("Unable to resolve dependency 'isdependency"))); } } @@ -2142,7 +1856,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -2157,37 +1871,32 @@ public void Should_not_install_the_dependency_in_the_lib_directory() [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } } @@ -2232,7 +1941,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.6.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.6.0"); } } @@ -2250,47 +1959,33 @@ public void Should_upgrade_the_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("3/3")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("3/3")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -2322,40 +2017,26 @@ public void Should_not_install_the_package_in_the_lib_directory() [Fact] public void Should_contain_a_message_that_is_was_unable_to_install_any_packages() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -2400,47 +2081,33 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.6.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.6.0"); } } [Fact] public void Should_contain_a_message_that_it_installed_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -2477,85 +2144,49 @@ public void Should_not_upgrade_the_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_install_any_packages() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => m.MessageType == ResultType.Error)); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("Unable to resolve dependency 'isdependency")) errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("Unable to resolve dependency 'isdependency"))); } } @@ -2601,47 +2232,33 @@ public void Should_upgrade_the_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.1"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.1"); } } [Fact] public void Should_contain_a_message_that_it_installed_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("installed 2/2")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installed 2/2")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -2687,7 +2304,7 @@ public void Should_not_upgrade_the_minimum_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -2697,66 +2314,40 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_it_was_unable_to_install_any_packages() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("installed 0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installed 0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => m.MessageType == ResultType.Error)); } } @@ -2799,66 +2390,40 @@ public void Should_not_downgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } [Fact] public void Should_contain_a_message_that_it_was_unable_to_install_any_packages() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("installed 0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installed 0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => m.MessageType == ResultType.Error)); } } @@ -2916,7 +2481,7 @@ public void Should_install_the_expected_version_of_the_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "childdependencywithlooserversiondependency", "childdependencywithlooserversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -2926,47 +2491,33 @@ public void Should_install_the_expected_version_of_the_constrained_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_installed_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("3/3")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("3/3")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -2995,7 +2546,7 @@ public override void Because() [Fact] public void Should_have_thrown_exception_when_installing() { - _exception.ShouldBeType(); + _exception.Should().BeOfType(); } [Fact] @@ -3009,7 +2560,7 @@ public void Should_have_outputted_expected_exception_message() .AppendLine(" choco install installpackage --version=\"1.0.0\" --source=\"{0}\"".FormatWith(Configuration.Sources)) .ToString(); - _exception.Message.ShouldEqual(expectedMessage); + _exception.Message.Should().Be(expectedMessage); } [Fact] @@ -3062,7 +2613,7 @@ public override void Because() [Fact] public void Should_have_thrown_exception_when_installing() { - _exception.ShouldBeType(); + _exception.Should().BeOfType(); } [Fact] @@ -3076,7 +2627,7 @@ public void Should_have_outputted_expected_exception_message() .AppendLine(" choco install installpackage --version=\"0.56.0-alpha-0544\" --prerelease --source=\"{0}\"".FormatWith(Configuration.Sources)) .ToString(); - _exception.Message.ShouldEqual(expectedMessage); + _exception.Message.Should().Be(expectedMessage); } [Fact] @@ -3132,7 +2683,7 @@ public override void Because() [Fact] public void Should_have_thrown_exception_when_installing() { - _exception.ShouldBeType(); + _exception.Should().BeOfType(); } [Fact] @@ -3146,7 +2697,7 @@ public void Should_have_outputted_expected_exception_message() .AppendLine(" choco install installpackage --version=\"1.0.0\" --source=\"{0}\"".FormatWith(Configuration.Sources)) .ToString(); - _exception.Message.ShouldEqual(expectedMessage); + _exception.Message.Should().Be(expectedMessage); } [Fact] @@ -3200,13 +2751,13 @@ public override void Because() [Fact] public void Should_have_thrown_exception_when_installing() { - _exception.ShouldBeType(); + _exception.Should().BeOfType(); } [Fact] public void Should_have_outputted_expected_exception_message() { - _exception.Message.ShouldEqual("Package name cannot point directly to a local, or remote file. Please use the --source argument and point it to a local file directory, UNC directory path or a NuGet feed instead."); + _exception.Message.Should().Be("Package name cannot point directly to a local, or remote file. Please use the --source argument and point it to a local file directory, UNC directory path or a NuGet feed instead."); } [Fact] @@ -3260,13 +2811,13 @@ public override void Because() [Fact] public void Should_have_thrown_exception_when_installing() { - _exception.ShouldBeType(); + _exception.Should().BeOfType(); } [Fact] public void Should_have_outputted_expected_exception_message() { - _exception.Message.ShouldEqual("Package name cannot point directly to a package manifest file. Please create a package by running 'choco pack' on the .nuspec file first."); + _exception.Message.Should().Be("Package name cannot point directly to a package manifest file. Please create a package by running 'choco pack' on the .nuspec file first."); } [Fact] @@ -3323,62 +2874,57 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - packageResult.Version.ShouldEqual("1.0.0"); + packageResult.Version.Should().Be("1.0.0"); } [Fact] public void Should_not_change_the_test_value_in_the_config_due_to_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='test']/@value").TypedValue.ToStringSafe().ShouldEqual("default 1.0.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='test']/@value").TypedValue.ToStringSafe().Should().Be("default 1.0.0"); } [Fact] public void Should_change_the_testReplace_value_in_the_config_due_to_XDT_Replace() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='testReplace']/@value").TypedValue.ToStringSafe().ShouldEqual("1.0.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='testReplace']/@value").TypedValue.ToStringSafe().Should().Be("1.0.0"); } [Fact] public void Should_add_the_insert_value_in_the_config_due_to_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insert']/@value").TypedValue.ToStringSafe().ShouldEqual("1.0.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insert']/@value").TypedValue.ToStringSafe().Should().Be("1.0.0"); } } @@ -3398,13 +2944,14 @@ public override void Because() [Fact] public void Should_have_no_sources_enabled_result() { - MockLogger.ContainsMessage("Installation was NOT successful. There are no sources enabled for", LogLevel.Error).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Installation was NOT successful. There are no sources enabled for")); } [Fact] public void Should_not_install_any_packages() { - Results.Count().ShouldEqual(0); + Results.Should().BeEmpty(); } } @@ -3439,7 +2986,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3466,50 +3013,45 @@ public void Should_install_hook_scripts_to_folder() foreach (string scriptName in hookScripts) { var hookScriptPath = Path.Combine(Scenario.get_top_level(), "hooks", Configuration.PackageNames.Replace(".hook", string.Empty), scriptName); - File.ReadAllText(hookScriptPath).ShouldContain("Write-Output"); + File.ReadAllText(hookScriptPath).Should().Contain("Write-Output"); } } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } } @@ -3552,7 +3094,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3624,15 +3166,9 @@ public void Should_have_a_console_shim_that_is_set_for_non_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? False")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI false message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? False"), "GUI false message not found"); } [Fact] @@ -3651,57 +3187,46 @@ public void Should_have_a_graphical_shim_that_is_set_for_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? True")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI true message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? True"), "GUI true message not found"); } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } [Fact] @@ -3709,7 +3234,8 @@ public void Should_have_a_version_of_one_dot_zero_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script() { - MockLogger.ContainsMessage("installpackage v1.0.0 has been installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage v1.0.0 has been installed")); } [Fact] @@ -3717,7 +3243,8 @@ public void Should_have_executed_chocolateyInstall_script() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_all_hook_script() { - MockLogger.ContainsMessage("pre-install-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-install-all.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -3725,7 +3252,8 @@ public void Should_have_executed_pre_all_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_all_hook_script() { - MockLogger.ContainsMessage("post-install-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-install-all.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -3733,7 +3261,8 @@ public void Should_have_executed_post_all_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_installpackage_hook_script() { - MockLogger.ContainsMessage("pre-install-installpackage.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-install-installpackage.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -3741,7 +3270,8 @@ public void Should_have_executed_pre_installpackage_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_installpackage_hook_script() { - MockLogger.ContainsMessage("post-install-installpackage.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-install-installpackage.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -3749,7 +3279,8 @@ public void Should_have_executed_post_installpackage_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_uninstall_hook_script() { - MockLogger.ContainsMessage("post-uninstall-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("post-uninstall-all.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -3757,7 +3288,8 @@ public void Should_not_have_executed_uninstall_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_upgradepackage_hook_script() { - MockLogger.ContainsMessage("pre-install-upgradepackage.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-install-upgradepackage.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -3765,7 +3297,8 @@ public void Should_not_have_executed_upgradepackage_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_beforemodify_hook_script() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for installpackage 1.0.0")); } } @@ -3808,7 +3341,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3880,15 +3413,9 @@ public void Should_have_a_console_shim_that_is_set_for_non_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? False")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI false message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? False"), "GUI false message not found"); } [Fact] @@ -3907,57 +3434,46 @@ public void Should_have_a_graphical_shim_that_is_set_for_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? True")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI true message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? True"), "GUI true message not found"); } [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } [Fact] @@ -3965,7 +3481,8 @@ public void Should_have_a_version_of_one_dot_zero_dot_zero() [Platform(Exclude = "Mono")] public void Should_not_have_executed_chocolateyInstall_script() { - MockLogger.ContainsMessage("portablepackage v1.0.0 has been installed", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("portablepackage v1.0.0 has been installed")); } [Fact] @@ -3973,7 +3490,8 @@ public void Should_not_have_executed_chocolateyInstall_script() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_all_hook_script() { - MockLogger.ContainsMessage("pre-install-all.ps1 hook ran for portablepackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-install-all.ps1 hook ran for portablepackage 1.0.0")); } [Fact] @@ -3981,7 +3499,8 @@ public void Should_have_executed_pre_all_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_all_hook_script() { - MockLogger.ContainsMessage("post-install-all.ps1 hook ran for portablepackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-install-all.ps1 hook ran for portablepackage 1.0.0")); } [Fact] @@ -3989,7 +3508,8 @@ public void Should_have_executed_post_all_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_uninstall_hook_script() { - MockLogger.ContainsMessage("post-uninstall-all.ps1 hook ran for portablepackage 1.0.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("post-uninstall-all.ps1 hook ran for portablepackage 1.0.0")); } [Fact] @@ -3997,7 +3517,8 @@ public void Should_not_have_executed_uninstall_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_upgradepackage_hook_script() { - MockLogger.ContainsMessage("pre-install-upgradepackage.ps1 hook ran for portablepackage 1.0.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-install-upgradepackage.ps1 hook ran for portablepackage 1.0.0")); } [Fact] @@ -4005,7 +3526,8 @@ public void Should_not_have_executed_upgradepackage_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_beforemodify_hook_script() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for portablepackage 1.0.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for portablepackage 1.0.0")); } } @@ -4051,7 +3573,7 @@ public void Should_install_the_expected_version_of_the_package() using (var reader = new PackageFolderReader(packageDirectory)) { - reader.NuspecReader.GetVersion().ToNormalizedString().ShouldEqual("2.0.0"); + reader.NuspecReader.GetVersion().ToNormalizedString().Should().Be("2.0.0"); } } @@ -4074,43 +3596,38 @@ public void Should_not_create_an_hooks_folder_for_the_package() [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_two_dot_zero_dot_zero() { - packageResult.Version.ShouldEqual("2.0.0"); + packageResult.Version.Should().Be("2.0.0"); } [Fact] @@ -4118,7 +3635,8 @@ public void Should_have_a_version_of_two_dot_zero_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_reported_package_installed() { - MockLogger.ContainsMessage("isdependency 2.0.0 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("isdependency 2.0.0 Installed")); } } @@ -4142,10 +3660,7 @@ public override void Because() [Fact] public void Should_not_report_success() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] @@ -4159,30 +3674,22 @@ public void Should_not_install_a_package_in_the_lib_directory() [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_report_package_not_found() { - foreach (var packageResult in Results) - { - var message = packageResult.Value.Messages.First(); - message.MessageType.ShouldEqual(ResultType.Error); - message.Message.ShouldStartWith("non-existing not installed. The package was not found with the source(s) listed."); - } + Results.Should().AllSatisfy(r => r.Value.Messages.First().MessageType.Should().Be(ResultType.Error)) + .And.AllSatisfy(p => + p.Value.Messages.First().Message.Should() + .StartWith("non-existing not installed. The package was not found with the source(s) listed.")); } } @@ -4229,10 +3736,7 @@ public void Should_install_a_package_in_the_lib_directory() [Fact] public void Should_install_lower_version_of_package() { - foreach (var packageResult in Results) - { - packageResult.Value.Version.ShouldEqual("1.0.0"); - } + Results.Should().AllSatisfy(r => r.Value.Version.Should().Be("1.0.0")); } [Fact] @@ -4244,35 +3748,26 @@ public void Should_have_installed_expected_version_in_lib_directory() using (var reader = new PackageFolderReader(packageFolder)) { - reader.NuspecReader.GetVersion().ToNormalizedString().ShouldEqual("1.0.0"); + reader.NuspecReader.GetVersion().ToNormalizedString().Should().Be("1.0.0"); } } [Fact] public void Should_not_have_inconclusive_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_success_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } } @@ -4320,44 +3815,32 @@ public void Should_have_installed_expected_version_in_lib_directory() using (var reader = new PackageFolderReader(packageFolder)) { - reader.NuspecReader.GetVersion().ToNormalizedString().ShouldEqual("1.0.0"); + reader.NuspecReader.GetVersion().ToNormalizedString().Should().Be("1.0.0"); } } [Fact] public void Should_install_lower_version_of_package() { - foreach (var packageResult in Results) - { - packageResult.Value.Version.ShouldEqual("1.0.0"); - } + Results.Should().AllSatisfy(r => r.Value.Version.Should().Be("1.0.0")); } [Fact] public void Should_not_have_inconclusive_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_success_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } } @@ -4427,7 +3910,7 @@ public void Should_instal_expected_package_version(string name, string version) using (var reader = new PackageFolderReader(path)) { - reader.NuspecReader.GetVersion().ToNormalizedString().ShouldEqual(version); + reader.NuspecReader.GetVersion().ToNormalizedString().Should().Be(version); } } @@ -4435,34 +3918,25 @@ public void Should_instal_expected_package_version(string name, string version) public void Should_report_installed_version_of_package(string name, string version) { var package = Results.First(r => r.Key == name); - package.Value.Version.ShouldEqual(version); + package.Value.Version.Should().Be(version); } [Fact] public void Should_not_have_inconclusive_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_success_package_results() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } } @@ -4510,7 +3984,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -4533,43 +4007,38 @@ public void Should_not_create_an_hooks_folder_for_the_package() [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } [Fact] @@ -4577,7 +4046,8 @@ public void Should_have_a_version_of_one_dot_zero_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script() { - MockLogger.ContainsMessage("UpperCase 1.0.0 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("UpperCase 1.0.0 Installed")); } } @@ -4618,7 +4088,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -4641,54 +4111,45 @@ public void Should_not_create_an_hooks_folder_for_the_package() [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_contain_a_warning_message_about_unsupported_elements() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("Issues found with nuspec elements")) upgradeMessage = true; - } - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Issues found with nuspec elements")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_have_warning_package_result() { - _packageResult.Warning.ShouldBeTrue(); + _packageResult.Warning.Should().BeTrue(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_have_a_version_of_one_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } [Fact] @@ -4696,7 +4157,8 @@ public void Should_have_a_version_of_one_dot_zero_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script() { - MockLogger.ContainsMessage("unsupportedelements 1.0.0 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("unsupportedelements 1.0.0 Installed")); } } @@ -4740,7 +4202,7 @@ public void Should_install_the_expected_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual(NonNormalizedVersion); + packageReader.NuspecReader.GetVersion().ToStringSafe().Should().Be(NonNormalizedVersion); } } @@ -4763,43 +4225,38 @@ public void Should_not_create_an_hooks_folder_for_the_package() [Fact] public void Should_contain_a_warning_message_that_it_installed_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Result_should_have_the_correct_version() { - _packageResult.Version.ShouldEqual(NonNormalizedVersion); + _packageResult.Version.Should().Be(NormalizedVersion); } [Fact] @@ -4807,9 +4264,10 @@ public void Result_should_have_the_correct_version() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script() { - var message = "installpackage v{0} has been installed".FormatWith(NonNormalizedVersion); + var message = "installpackage v{0} has been installed".FormatWith(NormalizedVersion); - MockLogger.ContainsMessage(message, LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(message)); } [Fact] @@ -4864,15 +4322,9 @@ public void Should_have_a_console_shim_that_is_set_for_non_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? False")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI false message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? False"), "GUI false message not found"); } [Fact] @@ -4891,15 +4343,9 @@ public void Should_have_a_graphical_shim_that_is_set_for_gui_access() stdErrAction: (s, e) => messages.Add(e.Data) ); - var messageFound = false; - - foreach (var message in messages.OrEmpty()) - { - if (string.IsNullOrWhiteSpace(message)) continue; - if (message.Contains("is gui? True")) messageFound = true; - } - - messageFound.ShouldBeTrue("GUI true message not found"); + messages.Should() + .NotBeNullOrEmpty() + .And.Contain(m => m.Contains("is gui? True"), "GUI true message not found"); } } @@ -4984,7 +4430,7 @@ public void Should_install_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", TargetPackageName, "{0}.nupkg".FormatWith(TargetPackageName)); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } @@ -4994,14 +4440,15 @@ public void Should_upgrade_the_minimum_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", DependencyName, "{0}.nupkg".FormatWith(DependencyName)); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_installed_successfully() { - MockLogger.ContainsMessage("installed 2/2", LogLevel.Warn).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installed 2/2")); } [Fact] @@ -5009,7 +4456,8 @@ public void Should_contain_a_message_that_everything_installed_successfully() [Platform(Exclude = "Mono")] public void Should_not_run_target_package_beforeModify_for_upgraded_version() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "2.0.0"), LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "2.0.0"))); } [Fact] @@ -5017,7 +4465,8 @@ public void Should_not_run_target_package_beforeModify_for_upgraded_version() [Platform(Exclude = "Mono")] public void Should_run_already_installed_dependency_package_beforeModify() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "1.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "1.0.0"))); } [Fact] @@ -5025,34 +4474,26 @@ public void Should_run_already_installed_dependency_package_beforeModify() [Platform(Exclude = "Mono")] public void Should_not_run_dependency_package_beforeModify_for_upgraded_version() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "2.0.0"), LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "2.0.0"))); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } } diff --git a/src/chocolatey.tests.integration/scenarios/ListScenarios.cs b/src/chocolatey.tests.integration/scenarios/ListScenarios.cs index fdb6c4c284..4398502acb 100644 --- a/src/chocolatey.tests.integration/scenarios/ListScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/ListScenarios.cs @@ -21,7 +21,8 @@ namespace chocolatey.tests.integration.scenarios using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.results; using NuGet.Configuration; - using Should; + using FluentAssertions; + using FluentAssertions.Execution; public class ListScenarios { @@ -62,28 +63,32 @@ public override void Because() [Fact] public void Should_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("upgradepackage 1.0.0").ShouldBeTrue(userMessage: "Warnings: " + string.Join("\n", MockLogger.Messages["Info"])); + MockLogger.ContainsMessage("upgradepackage 1.0.0").Should().BeTrue("Warnings: " + string.Join("\n", MockLogger.Messages["Info"])); } [Fact] public void Should_not_contain_packages_and_versions_with_a_pipe_between_them() { - MockLogger.ContainsMessage("upgradepackage|1.0.0").ShouldBeFalse(); + MockLogger.ContainsMessage("upgradepackage|1.0.0").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages installed").ShouldBeTrue(); + MockLogger.ContainsMessage("packages installed").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); } } @@ -104,13 +109,13 @@ public override void Because() [Fact] public void Should_contain_package_name() { - MockLogger.ContainsMessage("upgradepackage").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage").Should().BeTrue(); } [Fact] public void Should_not_contain_any_version_number() { - MockLogger.ContainsMessage(".0").ShouldBeFalse(); + MockLogger.ContainsMessage(".0").Should().BeFalse(); } } @@ -132,35 +137,33 @@ public override void Because() [Fact] public void Should_contain_packages_and_versions_with_a_pipe_between_them() { - MockLogger.ContainsMessage("upgradepackage|1.0.0").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage|1.0.0").Should().BeTrue(); } [Fact] public void Should_only_have_messages_related_to_package_information() { - var count = MockLogger.MessagesFor(LogLevel.Info).OrEmpty().Count(); - count.ShouldEqual(2); + MockLogger.Messages.Should() + .ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().HaveCount(2); } [Fact] public void Should_not_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("upgradepackage 1.0.0").ShouldBeFalse(); + MockLogger.ContainsMessage("upgradepackage 1.0.0").Should().BeFalse(); } [Fact] public void Should_not_contain_a_summary() { - MockLogger.ContainsMessage("packages installed").ShouldBeFalse(); + MockLogger.ContainsMessage("packages installed").Should().BeFalse(); } [Fact] public void Should_not_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeFalse(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeFalse(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeFalse(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeFalse(); + MockLogger.Messages.Should().NotContainKey(LogLevel.Debug.ToStringSafe()); } } @@ -183,19 +186,19 @@ public override void Because() [Fact] public void Should_contain_packages_id() { - MockLogger.ContainsMessage("upgradepackage").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage").Should().BeTrue(); } [Fact] public void Should_not_contain_any_version_number() { - MockLogger.ContainsMessage(".0").ShouldBeFalse(); + MockLogger.ContainsMessage(".0").Should().BeFalse(); } [Fact] public void Should_not_contain_pipe() { - MockLogger.ContainsMessage("|").ShouldBeFalse(); + MockLogger.ContainsMessage("|").Should().BeFalse(); } } @@ -217,34 +220,41 @@ public override void Because() [Fact] public void Should_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("upgradepackage 1.0.0").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage 1.0.0").Should().BeTrue(); } [Fact] public void Should_contain_uppercase_id_package() { - MockLogger.ContainsMessage("UpperCase 1.1.0").ShouldBeTrue(); + MockLogger.ContainsMessage("UpperCase 1.1.0").Should().BeTrue(); } [Fact] public void Should_not_contain_packages_and_versions_with_a_pipe_between_them() { - MockLogger.ContainsMessage("upgradepackage|1.0.0").ShouldBeFalse(); + MockLogger.ContainsMessage("upgradepackage|1.0.0").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages installed").ShouldBeTrue(); + MockLogger.ContainsMessage("packages installed").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + using (new AssertionScope()) + { + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); + } } } } diff --git a/src/chocolatey.tests.integration/scenarios/PackScenarios.cs b/src/chocolatey.tests.integration/scenarios/PackScenarios.cs index 196927d302..c79b3b7204 100644 --- a/src/chocolatey.tests.integration/scenarios/PackScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/PackScenarios.cs @@ -28,7 +28,8 @@ namespace chocolatey.tests.integration.scenarios using NUnit.Framework; - using Should; + using FluentAssertions; + using FluentAssertions.Execution; public class PackScenarios { @@ -71,7 +72,7 @@ public void Should_throw_xml_exception_on_empty_nuspec_file() { AddFile("myPackage.nuspec", string.Empty); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [TestCase("")] @@ -96,7 +97,7 @@ public void Should_throw_invalid_data_exception_on_invalid_version(string versio ".FormatWith(version)); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } } @@ -154,9 +155,13 @@ public override void AfterObservations() public void Generated_package_should_be_in_current_directory() { var infos = MockLogger.MessagesFor(LogLevel.Info); - infos.Count.ShouldEqual(2); - infos[0].ShouldEqual("Attempting to build package from 'myPackage.nuspec'."); - infos[1].ShouldEqual(string.Concat("Successfully created package '", PackagePath, "'")); + + using (new AssertionScope()) + { + infos.Should().HaveCount(2); + infos.Should().HaveElementAt(0, "Attempting to build package from 'myPackage.nuspec'."); + infos.Should().HaveElementAt(1, string.Concat("Successfully created package '", PackagePath, "'")); + } FileAssert.Exists(PackagePath); } @@ -168,7 +173,7 @@ public void Generated_package_should_include_expected_version_in_nuspec() { var version = packageReader.NuspecReader.GetVersion(); - version.ToFullString().ShouldEqual(ExpectedNuspecVersion); + version.ToFullString().Should().Be(ExpectedNuspecVersion); } } @@ -177,11 +182,11 @@ public void Sources_should_be_set_to_current_directory() { if (string.IsNullOrEmpty(ExpectedSubDirectory)) { - Configuration.Sources.ShouldEqual(Scenario.get_top_level()); + Configuration.Sources.Should().Be(Scenario.get_top_level()); } else { - Configuration.Sources.ShouldEqual(ExpectedSubDirectory); + Configuration.Sources.Should().Be(ExpectedSubDirectory); } } @@ -426,9 +431,13 @@ public override void Because() public void Property_settings_should_be_logged_as_debug_messages() { var messages = MockLogger.MessagesFor(LogLevel.Debug); - messages.Count.ShouldEqual(2); - messages.ShouldContain("Setting property 'commitId': 1234abcd"); - messages.ShouldContain("Setting property 'version': 0.1.0"); + + using (new AssertionScope()) + { + messages.Should().HaveCount(2); + messages.Should().ContainEquivalentOf("Setting property 'commitId': 1234abcd"); + messages.Should().ContainEquivalentOf("Setting property 'version': 0.1.0"); + } } } @@ -439,7 +448,7 @@ public void Should_throw_exception_on_all_unsupported_elements() { AddFile("myPackage.nuspec", NuspecContentWithAllUnsupportedElements); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [Fact] @@ -447,7 +456,7 @@ public void Should_throw_exception_on_serviceable_element() { AddFile("myPackage.nuspec", NuspecContentWithServiceableElement); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [Fact] @@ -455,7 +464,7 @@ public void Should_throw_exception_on_license_element() { AddFile("myPackage.nuspec", NuspecContentWithLicenseElement); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [Fact] @@ -463,7 +472,7 @@ public void Should_throw_exception_on_repository_element() { AddFile("myPackage.nuspec", NuspecContentWithRepositoryElement); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [Fact] @@ -471,7 +480,7 @@ public void Should_throw_exception_on_package_types_element() { AddFile("myPackage.nuspec", NuspecContentWithPackageTypesElement); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [Fact] @@ -479,7 +488,7 @@ public void Should_throw_exception_on_framework_references_element() { AddFile("myPackage.nuspec", NuspecContentWithFrameWorkReferencesElement); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [Fact] @@ -487,7 +496,7 @@ public void Should_throw_exception_on_readme_element() { AddFile("myPackage.nuspec", NuspecContentWithReadmeElement); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } [Fact] @@ -495,7 +504,7 @@ public void Should_throw_exception_on_icon_element() { AddFile("myPackage.nuspec", NuspecContentWithIconElement); - ServiceAct.ShouldThrow(); + ServiceAct.Should().Throw(); } } diff --git a/src/chocolatey.tests.integration/scenarios/PinScenarios.cs b/src/chocolatey.tests.integration/scenarios/PinScenarios.cs index 38cdbc9b1d..51ac7baa05 100644 --- a/src/chocolatey.tests.integration/scenarios/PinScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/PinScenarios.cs @@ -30,7 +30,8 @@ namespace chocolatey.tests.integration.scenarios using NUnit.Framework; using NuGet.Configuration; - using Should; + using FluentAssertions; + using Moq; public class PinScenarios { @@ -83,15 +84,15 @@ public override void Because() [Fact] public void Should_not_contain_list_results() { - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Info).ShouldBeFalse(); - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Warn).ShouldBeFalse(); - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Error).ShouldBeFalse(); + MockLogger.Messages.Should() + .NotContainKeys(new string[] + { LogLevel.Info.ToStringSafe(), LogLevel.Warn.ToStringSafe(), LogLevel.Error.ToStringSafe() }); } [Fact] public void Should_not_contain_any_pins_by_default() { - MockLogger.ContainsMessage("upgradepackage|1.0.0").ShouldBeFalse(); + MockLogger.ContainsMessage("upgradepackage|1.0.0").Should().BeFalse(); } } @@ -115,15 +116,17 @@ public override void Because() [Fact] public void Should_not_contain_list_results() { - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Info).ShouldBeFalse(); - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Warn).ShouldBeFalse(); - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Error).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0")); + MockLogger.Messages.Should() + .NotContainKeys(new string[] + { LogLevel.Warn.ToStringSafe(), LogLevel.Error.ToStringSafe() }); } [Fact] public void Should_contain_existing_pin_messages() { - MockLogger.ContainsMessage("upgradepackage|1.0.0").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage|1.0.0").Should().BeTrue(); } } @@ -149,16 +152,18 @@ public override void Because() [Fact] public void Should_not_contain_list_results() { - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Info).ShouldBeFalse(); - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Warn).ShouldBeFalse(); - MockLogger.ContainsMessage("upgradepackage 1.0.0", LogLevel.Error).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0")); + MockLogger.Messages.Should() + .NotContainKeys(new string[] + { LogLevel.Warn.ToStringSafe(), LogLevel.Error.ToStringSafe() }); } [Fact] public void Should_contain_a_pin_message_for_each_existing_pin() { - MockLogger.ContainsMessage("installpackage|1.0.0").ShouldBeTrue(); - MockLogger.ContainsMessage("upgradepackage|1.0.0").ShouldBeTrue(); + MockLogger.ContainsMessage("installpackage|1.0.0").Should().BeTrue(); + MockLogger.ContainsMessage("upgradepackage|1.0.0").Should().BeTrue(); } } @@ -180,7 +185,7 @@ public override void Because() [Fact] public void Should_contain_success_message() { - MockLogger.ContainsMessage("Successfully added a pin for upgradepackage").ShouldBeTrue(); + MockLogger.ContainsMessage("Successfully added a pin for upgradepackage").Should().BeTrue(); } } @@ -203,7 +208,7 @@ public override void Because() [Fact] public void Should_contain_nothing_to_do_message() { - MockLogger.ContainsMessage("Nothing to change. Pin already set or removed.").ShouldBeTrue(); + MockLogger.ContainsMessage("Nothing to change. Pin already set or removed.").Should().BeTrue(); } } @@ -251,7 +256,7 @@ public override void Because() [Fact] public void Should_contain_success_message() { - MockLogger.ContainsMessage("Successfully removed a pin for upgradepackage").ShouldBeTrue(); + MockLogger.ContainsMessage("Successfully removed a pin for upgradepackage").Should().BeTrue(); } } @@ -273,7 +278,7 @@ public override void Because() [Fact] public void Should_contain_nothing_to_do_message() { - MockLogger.ContainsMessage("Nothing to change. Pin already set or removed.").ShouldBeTrue(); + MockLogger.ContainsMessage("Nothing to change. Pin already set or removed.").Should().BeTrue(); } } diff --git a/src/chocolatey.tests.integration/scenarios/SearchScenarios.cs b/src/chocolatey.tests.integration/scenarios/SearchScenarios.cs index 78828b5203..22cd4b6405 100644 --- a/src/chocolatey.tests.integration/scenarios/SearchScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/SearchScenarios.cs @@ -23,7 +23,8 @@ namespace chocolatey.tests.integration.scenarios using chocolatey.infrastructure.results; using NuGet.Configuration; using NUnit.Framework; - using Should; + using FluentAssertions; + using System.IO; public class SearchScenarios { @@ -74,9 +75,9 @@ public override void Because() [Fact] public void Should_only_pick_up_package_from_highest_priority() { - Results.Count.ShouldEqual(1); - Results[0].Name.ShouldEqual("upgradepackage"); - Results[0].Version.ShouldEqual("1.0.0"); + Results.Should().ContainSingle(); + Results[0].Name.Should().Be("upgradepackage"); + Results[0].Version.Should().Be("1.0.0"); } } @@ -111,11 +112,11 @@ public override void Because() [Fact] public void Should_only_pick_up_package_from_highest_priority() { - Results.Count.ShouldEqual(2); - Results[0].Name.ShouldEqual("upgradepackage"); - Results[0].Version.ShouldEqual("1.1.1-beta"); - Results[1].Name.ShouldEqual("upgradepackage"); - Results[1].Version.ShouldEqual("1.0.0"); + Results.Should().HaveCount(2); + Results[0].Name.Should().Be("upgradepackage"); + Results[0].Version.Should().Be("1.1.1-beta"); + Results[1].Name.Should().Be("upgradepackage"); + Results[1].Version.Should().Be("1.0.0"); } } @@ -151,15 +152,15 @@ public override void Because() [Fact] public void Should_pick_up_packages_from_all_feeds_except_those_with_same_name() { - Results.Count.ShouldEqual(4); - Results[0].Name.ShouldEqual("conflictingdependency"); - Results[0].Version.ShouldEqual("2.0.0"); - Results[1].Name.ShouldEqual("hasdependency"); - Results[1].Version.ShouldEqual("2.1.0"); - Results[2].Name.ShouldEqual("isdependency"); - Results[2].Version.ShouldEqual("2.1.0"); - Results[3].Name.ShouldEqual("isexactdependency"); - Results[3].Version.ShouldEqual("2.0.0"); + Results.Should().HaveCount(4); + Results[0].Name.Should().Be("conflictingdependency"); + Results[0].Version.Should().Be("2.0.0"); + Results[1].Name.Should().Be("hasdependency"); + Results[1].Version.Should().Be("2.1.0"); + Results[2].Name.Should().Be("isdependency"); + Results[2].Version.Should().Be("2.1.0"); + Results[3].Name.Should().Be("isexactdependency"); + Results[3].Version.Should().Be("2.0.0"); } } @@ -176,34 +177,38 @@ public override void Because() [Platform(Exclude = "Mono")] public void Should_list_available_packages_only_once() { - MockLogger.ContainsMessageCount("upgradepackage").ShouldEqual(1); + MockLogger.ContainsMessageCount("upgradepackage").Should().Be(1); } [Fact] public void Should_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("upgradepackage 1.1.0").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage 1.1.0").Should().BeTrue(); } [Fact] public void Should_not_contain_packages_and_versions_with_a_pipe_between_them() { - MockLogger.ContainsMessage("upgradepackage|1.1.0").ShouldBeFalse(); + MockLogger.ContainsMessage("upgradepackage|1.1.0").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages found").ShouldBeTrue(); + MockLogger.ContainsMessage("packages found").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); } } @@ -224,28 +229,32 @@ public override void Because() [Fact] public void Should_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("upgradepackage 1.1.0").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage 1.1.0").Should().BeTrue(); } [Fact] public void Should_not_contain_packages_that_do_not_match() { - MockLogger.ContainsMessage("installpackage").ShouldBeFalse(); + MockLogger.ContainsMessage("installpackage").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages found").ShouldBeTrue(); + MockLogger.ContainsMessage("packages found").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); } } @@ -266,35 +275,39 @@ public override void Because() [Fact] public void Should_list_available_packages_as_many_times_as_they_show_on_the_feed() { - MockLogger.ContainsMessageCount("upgradepackage").ShouldNotEqual(0); - MockLogger.ContainsMessageCount("upgradepackage").ShouldNotEqual(1); + MockLogger.ContainsMessageCount("upgradepackage").Should().NotBe(0); + MockLogger.ContainsMessageCount("upgradepackage").Should().NotBe(1); } [Fact] public void Should_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("upgradepackage 1.1.0").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage 1.1.0").Should().BeTrue(); } [Fact] public void Should_not_contain_packages_and_versions_with_a_pipe_between_them() { - MockLogger.ContainsMessage("upgradepackage|1.1.0").ShouldBeFalse(); + MockLogger.ContainsMessage("upgradepackage|1.1.0").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages found").ShouldBeTrue(); + MockLogger.ContainsMessage("packages found").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); } } @@ -315,46 +328,50 @@ public override void Because() [Fact] public void Should_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("upgradepackage 1.1.0").ShouldBeTrue(); + MockLogger.ContainsMessage("upgradepackage 1.1.0").Should().BeTrue(); } [Fact] public void Should_contain_description() { - MockLogger.ContainsMessage("Description: ").ShouldBeTrue(); + MockLogger.ContainsMessage("Description: ").Should().BeTrue(); } [Fact] public void Should_contain_tags() { - MockLogger.ContainsMessage("Tags: ").ShouldBeTrue(); + MockLogger.ContainsMessage("Tags: ").Should().BeTrue(); } [Fact] public void Should_contain_download_counts() { - MockLogger.ContainsMessage("Number of Downloads: ").ShouldBeTrue(); + MockLogger.ContainsMessage("Number of Downloads: ").Should().BeTrue(); } [Fact] public void Should_not_contain_packages_and_versions_with_a_pipe_between_them() { - MockLogger.ContainsMessage("upgradepackage|1.1.0").ShouldBeFalse(); + MockLogger.ContainsMessage("upgradepackage|1.1.0").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages found").ShouldBeTrue(); + MockLogger.ContainsMessage("packages found").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); } } @@ -375,13 +392,14 @@ public override void Because() [Fact] public void Should_have_no_sources_enabled_result() { - MockLogger.ContainsMessage("Unable to search for packages when there are no sources enabled for", LogLevel.Error).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Unable to search for packages when there are no sources enabled for")); } [Fact] public void Should_not_list_any_packages() { - Results.Count().ShouldEqual(0); + Results.Should().BeEmpty(); } } @@ -413,34 +431,38 @@ public void Should_not_error() [Fact] public void Should_find_exactly_one_result() { - Results.Count.ShouldEqual(1); + Results.Should().ContainSingle(); } [Fact] public void Should_contain_packages_and_versions_with_a_space_between_them() { - MockLogger.ContainsMessage("exactpackage 1.0.0").ShouldBeTrue(); + MockLogger.ContainsMessage("exactpackage 1.0.0").Should().BeTrue(); } [Fact] public void Should_not_contain_packages_that_do_not_match() { - MockLogger.ContainsMessage("exactpackage.dontfind").ShouldBeFalse(); + MockLogger.ContainsMessage("exactpackage.dontfind").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages found").ShouldBeTrue(); + MockLogger.ContainsMessage("packages found").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); } } @@ -474,28 +496,32 @@ public void Should_not_error() [Fact] public void Should_not_have_any_results() { - Results.Count.ShouldEqual(0); + Results.Should().BeEmpty(); } [Fact] public void Should_not_contain_packages_that_do_not_match() { - MockLogger.ContainsMessage("exactpackage.dontfind").ShouldBeFalse(); + MockLogger.ContainsMessage("exactpackage.dontfind").Should().BeFalse(); } [Fact] public void Should_contain_a_summary() { - MockLogger.ContainsMessage("packages found").ShouldBeTrue(); + MockLogger.ContainsMessage("packages found").Should().BeTrue(); } [Fact] public void Should_contain_debugging_messages() { - MockLogger.ContainsMessage("Searching for package information", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Running list with the following filter", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("Start of List", LogLevel.Debug).ShouldBeTrue(); - MockLogger.ContainsMessage("End of List", LogLevel.Debug).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Searching for package information")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Running list with the following filter")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Start of List")); + MockLogger.Messages.Should().ContainKey(LogLevel.Debug.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("End of List")); } } @@ -528,21 +554,71 @@ public void Should_not_error() [Fact] public void Should_find_two_results() { - Results.Count.ShouldEqual(2); + Results.Should().HaveCount(2); } [Fact] public void Should_find_only_packages_with_exact_id() { - Results[0].PackageMetadata.Id.ShouldEqual("exactpackage"); - Results[1].PackageMetadata.Id.ShouldEqual("exactpackage"); + Results[0].PackageMetadata.Id.Should().Be("exactpackage"); + Results[1].PackageMetadata.Id.Should().Be("exactpackage"); } [Fact] public void Should_find_all_non_prerelease_versions_in_descending_order() { - Results[0].PackageMetadata.Version.ToNormalizedString().ShouldEqual("1.0.0"); - Results[1].PackageMetadata.Version.ToNormalizedString().ShouldEqual("0.9.0"); + Results[0].PackageMetadata.Version.ToNormalizedString().Should().Be("1.0.0"); + Results[1].PackageMetadata.Version.ToNormalizedString().Should().Be("0.9.0"); + } + } + + public class WhenSearchingForAPackageWithPageSizeAndMultipleSources : ScenariosBase + { + public override void Context() + { + Configuration = Scenario.search(); + Scenario.reset(Configuration); + Scenario.add_packages_to_source_location(Configuration, "upgradepackage*" + NuGetConstants.PackageExtension); + Scenario.add_packages_to_source_location(Configuration, "installpackage*" + NuGetConstants.PackageExtension); + Scenario.add_packages_to_source_location(Configuration, "isexactversiondependency*" + NuGetConstants.PackageExtension); + var secondSource = Path.Combine(Scenario.get_top_level(), "infrastructure"); + Configuration.Sources = Configuration.Sources + ";" + secondSource; + Service = NUnitSetup.Container.GetInstance(); + + Configuration.ListCommand.PageSize = 2; + Configuration.ListCommand.ExplicitPageSize = true; + Configuration.Input = Configuration.PackageNames = string.Empty; + } + + public override void Because() + { + MockLogger.Reset(); + Results = Service.List(Configuration).ToList(); + } + + [Fact] + public void ShouldOutputWarningAboutThresholdBeingReached() + { + MockLogger.Messages.Should() + .ContainKey(LogLevel.Warn.ToString()) + .WhoseValue.Should().ContainSingle(m => m == "The threshold of 2 packages per source has been met. Please refine your search, or specify a page to find any more results."); + } + + [Fact] + public void ShouldListExpectedPackagesFoundOnSource() + { + MockLogger.Messages.Should() + .ContainKey(LogLevel.Info.ToString()) + .WhoseValue.Should() + .ContainInOrder( + "installpackage 1.0.0", + "isexactversiondependency 2.0.0") + .And.NotContain(new[] + { + "installpackage 0.9.9", + "isexactversiondependency 1.0.0", + "upgradepackage 1.1.0", + }); } } @@ -576,23 +652,23 @@ public void Should_not_error() [Fact] public void Should_find_three_results() { - Results.Count.ShouldEqual(3); + Results.Should().HaveCount(3); } [Fact] public void Should_find_only_packages_with_exact_id() { - Results[0].PackageMetadata.Id.ShouldEqual("exactpackage"); - Results[1].PackageMetadata.Id.ShouldEqual("exactpackage"); - Results[2].PackageMetadata.Id.ShouldEqual("exactpackage"); + Results[0].PackageMetadata.Id.Should().Be("exactpackage"); + Results[1].PackageMetadata.Id.Should().Be("exactpackage"); + Results[2].PackageMetadata.Id.Should().Be("exactpackage"); } [Fact] public void Should_find_all_versions_in_descending_order() { - Results[0].PackageMetadata.Version.ToNormalizedString().ShouldEqual("1.0.0"); - Results[1].PackageMetadata.Version.ToNormalizedString().ShouldEqual("1.0.0-beta1"); - Results[2].PackageMetadata.Version.ToNormalizedString().ShouldEqual("0.9.0"); + Results[0].PackageMetadata.Version.ToNormalizedString().Should().Be("1.0.0"); + Results[1].PackageMetadata.Version.ToNormalizedString().Should().Be("1.0.0-beta1"); + Results[2].PackageMetadata.Version.ToNormalizedString().Should().Be("0.9.0"); } } } diff --git a/src/chocolatey.tests.integration/scenarios/UninstallScenarios.cs b/src/chocolatey.tests.integration/scenarios/UninstallScenarios.cs index cfa932c664..b010756ee9 100644 --- a/src/chocolatey.tests.integration/scenarios/UninstallScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/UninstallScenarios.cs @@ -28,7 +28,7 @@ namespace chocolatey.tests.integration.scenarios using chocolatey.infrastructure.results; using NuGet.Configuration; using NUnit.Framework; - using Should; + using FluentAssertions; using IFileSystem = chocolatey.infrastructure.filesystem.IFileSystem; public class UninstallScenarios @@ -83,13 +83,8 @@ public void Should_not_uninstall_a_package_from_the_lib_directory() [Fact] public void Should_contain_a_message_that_it_would_have_uninstalled_a_package() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("Would have uninstalled installpackage v1.0.0")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Would have uninstalled installpackage v1.0.0")); } [Fact] @@ -97,7 +92,7 @@ public void Should_contain_a_message_that_it_would_have_uninstalled_a_package() [Platform(Exclude = "Mono")] public void Should_contain_a_message_that_it_would_have_run_a_powershell_script() { - MockLogger.ContainsMessage("chocolateyuninstall.ps1").ShouldBeTrue(); + MockLogger.ContainsMessage("chocolateyuninstall.ps1").Should().BeTrue(); } [Fact] @@ -105,7 +100,7 @@ public void Should_contain_a_message_that_it_would_have_run_a_powershell_script( [Platform(Exclude = "Mono")] public void Should_contain_a_message_that_it_would_have_run_powershell_modification_script() { - MockLogger.ContainsMessage("chocolateyBeforeModify.ps1").ShouldBeTrue(); + MockLogger.ContainsMessage("chocolateyBeforeModify.ps1").Should().BeTrue(); } } @@ -126,13 +121,8 @@ public override void Because() [Fact] public void Should_contain_a_message_that_it_was_unable_to_find_package() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Error).OrEmpty()) - { - if (message.Contains("somethingnonexisting is not installed. Cannot uninstall a non-existent package")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("somethingnonexisting is not installed. Cannot uninstall a non-existent package")); } } @@ -193,37 +183,32 @@ public void Should_delete_any_files_created_during_the_install() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] @@ -231,7 +216,8 @@ public void Config_should_match_package_result_name() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script() { - MockLogger.ContainsMessage("installpackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0 Before Modification")); } [Fact] @@ -239,7 +225,8 @@ public void Should_have_executed_chocolateyBeforeModify_script() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyUninstall_script() { - MockLogger.ContainsMessage("installpackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0 Uninstalled")); } } @@ -294,37 +281,32 @@ public void Should_delete_a_shim_for_graphical_in_the_bin_directory() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } } @@ -346,7 +328,7 @@ public void Should_throw_an_error_that_it_is_not_allowed() { Action m = () => Service.Uninstall(Configuration); - m.ShouldThrow(); + m.Should().Throw(); } } @@ -389,31 +371,26 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_message_that_it_uninstalled_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("uninstalled 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("uninstalled 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } } @@ -476,31 +453,26 @@ public void Should_not_have_deleted_the_rollback_on_server() [Fact] public void Should_contain_a_message_that_it_uninstalled_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("uninstalled 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("uninstalled 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } } @@ -567,47 +539,33 @@ public void Should_keep_locked_file_in_directory() [Fact] public void Should_contain_a_message_about_not_all_files_are_removed() { - bool expectedMessage = false; - - foreach (var message in MockLogger.MessagesFor(LogLevel.Error).OrEmpty()) - { - if (message.Contains("Unable to delete all existing package files. There will be leftover files requiring manual cleanup")) - { - expectedMessage = true; - } - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Unable to delete all existing package files. There will be leftover files requiring manual cleanup")); } [Fact] public void Should_contain_a_message_that_it_was_not_able_to_uninstall() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("uninstalled 0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("uninstalled 0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - _packageResult.Success.ShouldBeFalse(); + _packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } } @@ -643,7 +601,7 @@ public void Should_delete_everything_but_the_added_file_from_the_package_directo foreach (var file in files.OrEmpty()) { - Path.GetFileName(file).ShouldEqual("dude.txt", "Expected files were not deleted."); + Path.GetFileName(file).Should().Be("dude.txt", "Expected files were not deleted."); } } @@ -678,37 +636,32 @@ public void Should_delete_a_shim_for_graphical_in_the_bin_directory() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } } @@ -744,7 +697,7 @@ public void Should_delete_everything_but_the_changed_file_from_the_package_direc foreach (var file in files.OrEmpty()) { - Path.GetFileName(file).ShouldEqual("chocolateyInstall.ps1", "Expected files were not deleted."); + Path.GetFileName(file).Should().Be("chocolateyInstall.ps1", "Expected files were not deleted."); } } @@ -779,37 +732,32 @@ public void Should_delete_a_shim_for_graphical_in_the_bin_directory() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } } @@ -888,37 +836,32 @@ public void Should_delete_a_shim_for_graphical_in_the_bin_directory() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } } @@ -941,58 +884,39 @@ public override void Because() [Fact] public void Should_contain_a_message_that_it_was_unable_to_find_package() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Error).OrEmpty()) - { - if (message.Contains("somethingnonexisting is not installed. Cannot uninstall a non-existent package")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("somethingnonexisting is not installed. Cannot uninstall a non-existent package")); } [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } } @@ -1048,61 +972,41 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_install_a_package() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - packageResult.Success.ShouldBeFalse(); + packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("chocolateyUninstall.ps1")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("chocolateyUninstall.ps1"))); } } @@ -1144,37 +1048,32 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] @@ -1250,37 +1149,32 @@ public void Should_delete_any_files_created_during_the_install() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] @@ -1288,7 +1182,8 @@ public void Config_should_match_package_result_name() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script() { - MockLogger.ContainsMessage("installpackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0 Before Modification")); } [Fact] @@ -1296,7 +1191,8 @@ public void Should_have_executed_chocolateyBeforeModify_script() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyUninstall_script() { - MockLogger.ContainsMessage("installpackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage 1.0.0 Uninstalled")); } [Fact] @@ -1304,7 +1200,8 @@ public void Should_have_executed_chocolateyUninstall_script() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_all_hook_script() { - MockLogger.ContainsMessage("pre-uninstall-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-uninstall-all.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -1312,7 +1209,8 @@ public void Should_have_executed_pre_all_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_all_hook_script() { - MockLogger.ContainsMessage("post-uninstall-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-uninstall-all.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -1320,7 +1218,8 @@ public void Should_have_executed_post_all_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_installpackage_hook_script() { - MockLogger.ContainsMessage("pre-uninstall-installpackage.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-uninstall-installpackage.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -1328,7 +1227,8 @@ public void Should_have_executed_pre_installpackage_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_installpackage_hook_script() { - MockLogger.ContainsMessage("post-uninstall-installpackage.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-uninstall-installpackage.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -1336,7 +1236,8 @@ public void Should_have_executed_post_installpackage_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_upgradepackage_hook_script() { - MockLogger.ContainsMessage("pre-uninstall-upgradepackage.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-uninstall-upgradepackage.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -1344,7 +1245,8 @@ public void Should_not_have_executed_upgradepackage_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_beforemodify_hook_script() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for installpackage 1.0.0")); } [Fact] @@ -1352,7 +1254,8 @@ public void Should_have_executed_pre_beforemodify_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_beforemodify_hook_script() { - MockLogger.ContainsMessage("post-beforemodify-all.ps1 hook ran for installpackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-beforemodify-all.ps1 hook ran for installpackage 1.0.0")); } } @@ -1394,37 +1297,32 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] @@ -1432,7 +1330,8 @@ public void Config_should_match_package_result_name() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script() { - MockLogger.ContainsMessage("UpperCase 1.1.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("UpperCase 1.1.0 Before Modification")); } [Fact] @@ -1440,7 +1339,8 @@ public void Should_have_executed_chocolateyBeforeModify_script() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyUninstall_script() { - MockLogger.ContainsMessage("UpperCase 1.1.0 Uninstalled", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("UpperCase 1.1.0 Uninstalled")); } } @@ -1449,6 +1349,7 @@ public class When_uninstalling_a_package_with_non_normalized_version : Scenarios private PackageResult packageResult; private string NonNormalizedVersion = "0004.0004.00005.00"; + private string NormalizedVersion = "4.4.5"; public override void Context() { @@ -1512,37 +1413,32 @@ public void Should_delete_any_files_created_during_the_install() [Fact] public void Should_contain_a_warning_message_that_it_uninstalled_successfully() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("1/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("1/1")); } [Fact] public void Should_have_a_successful_package_result() { - packageResult.Success.ShouldBeTrue(); + packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - packageResult.Inconclusive.ShouldBeFalse(); + packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - packageResult.Warning.ShouldBeFalse(); + packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - packageResult.Name.ShouldEqual(Configuration.PackageNames); + packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] @@ -1550,7 +1446,8 @@ public void Config_should_match_package_result_name() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script() { - MockLogger.ContainsMessage("upgradepackage {0} Before Modification".FormatWith(NonNormalizedVersion), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage {0} Before Modification".FormatWith(NormalizedVersion))); } [Fact] @@ -1558,7 +1455,8 @@ public void Should_have_executed_chocolateyBeforeModify_script() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyUninstall_script() { - MockLogger.ContainsMessage("upgradepackage {0} Uninstalled".FormatWith(NonNormalizedVersion), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage {0} Uninstalled".FormatWith(NormalizedVersion))); } } @@ -1589,20 +1487,21 @@ public override void Because() public void Should_uninstall_the_package() { var packageFile = Path.Combine(Scenario.get_top_level(), "lib", TargetPackageName, "{0}.nupkg".FormatWith(TargetPackageName)); - File.Exists(packageFile).ShouldBeFalse(); + FileAssert.DoesNotExist(packageFile); } [Fact] public void Should_uninstall_the_dependency() { var packageFile = Path.Combine(Scenario.get_top_level(), "lib", DependencyName, "{0}.nupkg".FormatWith(DependencyName)); - File.Exists(packageFile).ShouldBeFalse(); + FileAssert.DoesNotExist(packageFile); } [Fact] public void Should_contain_a_message_that_everything_uninstalled_successfully() { - MockLogger.ContainsMessage("uninstalled 2/2", LogLevel.Warn).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("uninstalled 2/2")); } [Fact] @@ -1610,7 +1509,8 @@ public void Should_contain_a_message_that_everything_uninstalled_successfully() [Platform(Exclude = "Mono")] public void Should_run_target_package_beforeModify() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "1.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "1.0.0"))); } [Fact] @@ -1618,34 +1518,26 @@ public void Should_run_target_package_beforeModify() [Platform(Exclude = "Mono")] public void Should_run_dependency_package_beforeModify() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "1.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "1.0.0"))); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } diff --git a/src/chocolatey.tests.integration/scenarios/UpgradeScenarios.cs b/src/chocolatey.tests.integration/scenarios/UpgradeScenarios.cs index a33028e7d7..ead522283f 100644 --- a/src/chocolatey.tests.integration/scenarios/UpgradeScenarios.cs +++ b/src/chocolatey.tests.integration/scenarios/UpgradeScenarios.cs @@ -32,7 +32,7 @@ namespace chocolatey.tests.integration.scenarios using NuGet.Configuration; using NuGet.Packaging; using NUnit.Framework; - using Should; + using FluentAssertions; using static chocolatey.tests.integration.scenarios.InstallScenarios; public class UpgradeScenarios @@ -80,31 +80,21 @@ public void Should_contain_older_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.0.0"); + File.ReadAllText(shimFile).Should().Be("1.0.0"); } [Fact] public void Should_contain_a_message_that_a_new_version_is_available() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source(s)")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source(s)")); } [Fact] public void Should_contain_a_message_that_a_package_can_be_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("can upgrade 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("can upgrade 1/1")); } [Fact] @@ -133,25 +123,15 @@ public override void Because() [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).OrEmpty()) - { - if (message.Contains("installpackage v1.0.0 is the latest version available based on your source(s)")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage v1.0.0 is the latest version available based on your source(s)")); } [Fact] public void Should_contain_a_message_that_no_packages_can_be_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("can upgrade 0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("can upgrade 0/1")); } [Fact] @@ -180,25 +160,15 @@ public override void Because() [Fact] public void Should_contain_a_message_the_package_was_not_found() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Error).OrEmpty()) - { - if (message.Contains("nonexistentpackage not installed. The package was not found with the source(s) listed")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("nonexistentpackage not installed. The package was not found with the source(s) listed")); } [Fact] public void Should_contain_a_message_that_no_packages_can_be_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("can upgrade 0/0")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("can upgrade 0/0")); } } @@ -239,7 +209,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.0"); + File.ReadAllText(shimFile).Should().Be("1.1.0"); } [Fact] @@ -248,44 +218,34 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -294,19 +254,19 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } [Fact] @@ -314,7 +274,8 @@ public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.0.0 Before Modification")); } [Fact] @@ -324,20 +285,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.0.0 Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.0 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.0 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.0 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.0 Before Modification")); } [Fact] @@ -345,7 +307,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.0 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.0 Installed")); } } @@ -372,25 +335,15 @@ public override void Because() [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).OrEmpty()) - { - if (message.Contains("upgradepackage v1.0.0 is the latest version available based on your source(s)")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage v1.0.0 is the latest version available based on your source(s)")); } [Fact] public void Should_contain_a_message_that_no_packages_were_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1 ")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1 ")); } [Fact] @@ -416,32 +369,32 @@ public void Should_be_the_same_version_of_the_package() using (var reader = new PackageFolderReader(packageFolder)) { - reader.NuspecReader.GetVersion().ToNormalizedString().ShouldEqual("1.0.0"); + reader.NuspecReader.GetVersion().ToNormalizedString().Should().Be("1.0.0"); } } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeTrue(); + _packageResult.Inconclusive.Should().BeTrue(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_match_the_original_package_version() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } } @@ -464,25 +417,15 @@ public override void Because() [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).OrEmpty()) - { - if (message.Contains("upgradepackage v1.1.0 is the latest version available based on your source(s)")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage v1.1.0 is the latest version available based on your source(s)")); } [Fact] public void Should_contain_a_message_that_no_packages_were_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1 ")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1 ")); } [Fact] @@ -507,32 +450,32 @@ public void Should_be_the_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeTrue(); + _packageResult.Inconclusive.Should().BeTrue(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_match_the_original_package_version() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } } @@ -579,7 +522,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.1-beta2"); + File.ReadAllText(shimFile).Should().Be("1.1.1-beta2"); } [Fact] @@ -589,46 +532,36 @@ public void Should_upgrade_the_package() using (var packageReader = new PackageArchiveReader(packageFile)) { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ToStringSafe().ShouldEqual("1.1.1-beta2"); - version.ToString().ShouldEqual("1.1.1-beta2"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.ToStringSafe().Should().Be("1.1.1-beta2"); + version.ToString().Should().Be("1.1.1-beta2"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.1-beta2 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.1-beta2 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -637,19 +570,19 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_the_new_beta() { - _packageResult.Version.ShouldEqual("1.1.1-beta2"); + _packageResult.Version.Should().Be("1.1.1-beta2"); } [Fact] @@ -657,7 +590,8 @@ public void Should_match_the_upgrade_version_of_the_new_beta() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.0.0 Before Modification")); } [Fact] @@ -667,20 +601,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.0.0 Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.1-beta2 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.1-beta2 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta2 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta2 Before Modification")); } [Fact] @@ -688,7 +623,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta2 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta2 Installed")); } } @@ -737,7 +673,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.1-beta.1"); + File.ReadAllText(shimFile).Should().Be("1.1.1-beta.1"); } [Fact] @@ -747,46 +683,36 @@ public void Should_upgrade_the_package() using (var packageReader = new PackageArchiveReader(packageFile)) { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ToStringSafe().ShouldEqual("1.1.1-beta.1"); - version.ToString().ShouldEqual("1.1.1-beta.1"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.ToStringSafe().Should().Be("1.1.1-beta.1"); + version.ToString().Should().Be("1.1.1-beta.1"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.1-beta.1 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.1-beta.1 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -795,19 +721,19 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_the_new_beta() { - _packageResult.Version.ShouldEqual("1.1.1-beta.1"); + _packageResult.Version.Should().Be("1.1.1-beta.1"); } [Fact] @@ -815,7 +741,8 @@ public void Should_match_the_upgrade_version_of_the_new_beta() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.0.0 Before Modification")); } [Fact] @@ -825,20 +752,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.0.0 Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.1-beta.1 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.1-beta.1 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta.1 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta.1 Before Modification")); } [Fact] @@ -846,7 +774,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta.1 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta.1 Installed")); } } @@ -895,7 +824,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.1-beta2"); + File.ReadAllText(shimFile).Should().Be("1.1.1-beta2"); } [Fact] @@ -906,64 +835,54 @@ public void Should_upgrade_the_package() { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ToStringSafe().ShouldEqual("1.1.1-beta2"); - version.ToStringSafe().ShouldEqual("1.1.1-beta2"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.ToStringSafe().Should().Be("1.1.1-beta2"); + version.ToNormalizedStringChecked().Should().Be("1.1.1-beta2"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.1.1-beta installed. Version 1.1.1-beta2 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.1.1-beta installed. Version 1.1.1-beta2 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_the_new_beta() { - _packageResult.Version.ShouldEqual("1.1.1-beta2"); + _packageResult.Version.Should().Be("1.1.1-beta2"); } [Fact] @@ -971,7 +890,8 @@ public void Should_match_the_upgrade_version_of_the_new_beta() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta Before Modification")); } [Fact] @@ -981,20 +901,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.1.1-beta Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.1-beta2 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.1-beta2 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta2 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta2 Before Modification")); } [Fact] @@ -1002,7 +923,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta2 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta2 Installed")); } } @@ -1053,7 +975,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.1-beta.1"); + File.ReadAllText(shimFile).Should().Be("1.1.1-beta.1"); } [Fact] @@ -1064,64 +986,54 @@ public void Should_upgrade_the_package() { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ToStringSafe().ShouldEqual("1.1.1-beta.1"); - version.ToStringSafe().ShouldEqual("1.1.1-beta.1"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.ToStringSafe().Should().Be("1.1.1-beta.1"); + version.ToNormalizedStringChecked().Should().Be("1.1.1-beta.1"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.1.1-beta installed. Version 1.1.1-beta.1 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.1.1-beta installed. Version 1.1.1-beta.1 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_the_new_beta() { - _packageResult.Version.ShouldEqual("1.1.1-beta.1"); + _packageResult.Version.Should().Be("1.1.1-beta.1"); } [Fact] @@ -1129,7 +1041,8 @@ public void Should_match_the_upgrade_version_of_the_new_beta() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta Before Modification")); } [Fact] @@ -1139,20 +1052,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.1.1-beta Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.1-beta.1 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.1-beta.1 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta.1 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta.1 Before Modification")); } [Fact] @@ -1160,7 +1074,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta.1 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta.1 Installed")); } } @@ -1210,7 +1125,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.1-beta2"); + File.ReadAllText(shimFile).Should().Be("1.1.1-beta2"); } [Fact] @@ -1221,64 +1136,54 @@ public void Should_upgrade_the_package() { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ToStringSafe().ShouldEqual("1.1.1-beta2"); - version.ToStringSafe().ShouldEqual("1.1.1-beta2"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.ToStringSafe().Should().Be("1.1.1-beta2"); + version.ToNormalizedStringChecked().Should().Be("1.1.1-beta2"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.1.1-beta.1 installed. Version 1.1.1-beta2 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.1.1-beta.1 installed. Version 1.1.1-beta2 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_the_new_beta() { - _packageResult.Version.ShouldEqual("1.1.1-beta2"); + _packageResult.Version.Should().Be("1.1.1-beta2"); } [Fact] @@ -1286,7 +1191,8 @@ public void Should_match_the_upgrade_version_of_the_new_beta() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta.1 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta.1 Before Modification")); } [Fact] @@ -1296,20 +1202,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.1.1-beta.1 Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.1-beta2 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.1-beta2 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta.1 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta.1 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta2 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.1-beta2 Before Modification")); } [Fact] @@ -1317,7 +1224,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.1-beta2 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.1-beta2 Installed")); } } @@ -1343,25 +1251,15 @@ public override void Because() [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).OrEmpty()) - { - if (message.Contains("upgradepackage v1.1.1-beta is newer")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage v1.1.1-beta is newer")); } [Fact] public void Should_contain_a_message_that_no_packages_were_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1 ")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1 ")); } [Fact] @@ -1387,34 +1285,34 @@ public void Should_be_the_same_version_of_the_package() using (var packageReader = new PackageArchiveReader(packageFile)) { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ShouldEqual("1.1.1-beta"); - version.ToStringSafe().ShouldEqual("1.1.1-beta"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.Should().Be("1.1.1-beta"); + version.ToNormalizedStringChecked().Should().Be("1.1.1-beta"); } } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeTrue(); + _packageResult.Inconclusive.Should().BeTrue(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_only_find_the_last_stable_version() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } } @@ -1441,25 +1339,15 @@ public override void Because() [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).OrEmpty()) - { - if (message.Contains("upgradepackage v1.1.1-beta is newer")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage v1.1.1-beta is newer")); } [Fact] public void Should_contain_a_message_that_no_packages_were_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1 ")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1 ")); } [Fact] @@ -1485,34 +1373,34 @@ public void Should_be_the_same_version_of_the_package() using (var packageReader = new PackageArchiveReader(packageFile)) { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ShouldEqual("1.1.1-beta"); - version.ToStringSafe().ShouldEqual("1.1.1-beta"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.Should().Be("1.1.1-beta"); + version.ToNormalizedStringChecked().Should().Be("1.1.1-beta"); } } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeTrue(); + _packageResult.Inconclusive.Should().BeTrue(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_only_find_the_last_stable_version() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } } @@ -1552,7 +1440,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } @@ -1569,43 +1457,33 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.0"); + File.ReadAllText(shimFile).Should().Be("1.1.0"); } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -1614,19 +1492,19 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } } @@ -1649,25 +1527,15 @@ public override void Because() [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).OrEmpty()) - { - if (message.Contains("installpackage v1.0.0 is the latest version available based on your source(s)")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage v1.0.0 is the latest version available based on your source(s)")); } [Fact] public void Should_contain_a_message_that_no_packages_were_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1 ")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1 ")); } [Fact] @@ -1692,32 +1560,32 @@ public void Should_be_the_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeTrue(); + _packageResult.Inconclusive.Should().BeTrue(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_match_the_existing_version_of_one_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } } @@ -1741,25 +1609,15 @@ public override void Because() [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).OrEmpty()) - { - if (message.Contains("installpackage v1.0.0 is the latest version available based on your source(s)")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("installpackage v1.0.0 is the latest version available based on your source(s)")); } [Fact] public void Should_contain_a_message_that_the_package_was_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] @@ -1784,32 +1642,32 @@ public void Should_be_the_same_version_of_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_match_the_existing_version_of_one_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("1.0.0"); + _packageResult.Version.Should().Be("1.0.0"); } } @@ -1831,7 +1689,7 @@ public void Should_throw_an_error_that_it_is_not_allowed() { Action m = () => Service.Upgrade(Configuration); - m.ShouldThrow(); + m.Should().Throw(); } } @@ -1875,7 +1733,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } @@ -1892,43 +1750,33 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.0"); + File.ReadAllText(shimFile).Should().Be("1.1.0"); } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -1937,7 +1785,7 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } } @@ -1989,7 +1837,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } @@ -2018,43 +1866,33 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.0"); + File.ReadAllText(shimFile).Should().Be("1.1.0"); } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -2063,7 +1901,7 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } } @@ -2116,7 +1954,7 @@ public void Should_contain_old_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.0.0"); + File.ReadAllText(shimFile).Should().Be("1.0.0"); } [Fact] @@ -2125,50 +1963,40 @@ public void Should_not_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_was_not_able_to_upgrade() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_not_have_a_successful_package_result() { - _packageResult.Success.ShouldBeFalse(); + _packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } } @@ -2202,7 +2030,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.0"); + File.ReadAllText(shimFile).Should().Be("1.1.0"); } [Fact] @@ -2211,32 +2039,27 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -2245,13 +2068,13 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } } @@ -2277,7 +2100,7 @@ public void Should_update_the_changed_file() { var fileChanged = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "chocolateyinstall.ps1"); - File.ReadAllText(fileChanged).ShouldNotEqual("hellow"); + File.ReadAllText(fileChanged).Should().NotBe("hellow"); } [Fact] @@ -2285,7 +2108,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.0"); + File.ReadAllText(shimFile).Should().Be("1.1.0"); } [Fact] @@ -2294,32 +2117,27 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -2328,13 +2146,13 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } } @@ -2365,73 +2183,48 @@ public void Should_not_install_a_package_in_the_lib_directory() [Fact] public void Should_contain_a_message_the_package_was_not_found() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Error).OrEmpty()) - { - if (message.Contains("nonexistentpackage not installed. The package was not found with the source(s) listed")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("nonexistentpackage not installed. The package was not found with the source(s) listed")); } [Fact] public void Should_contain_a_message_that_no_packages_were_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - _packageResult.Success.ShouldBeFalse(); + _packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in _packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + _packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in _packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("The package was not found")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("The package was not found"))); } } @@ -2477,31 +2270,26 @@ public void Should_not_have_a_rollback_directory() [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } } @@ -2536,61 +2324,41 @@ public void Should_not_install_a_package_in_the_lib_directory() [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_upgrade_a_package() { - bool notInstalled = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) notInstalled = true; - } - - notInstalled.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - _packageResult.Success.ShouldBeFalse(); + _packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in _packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + _packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in _packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("Cannot upgrade a non-existent package")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("Cannot upgrade a non-existent package"))); } } @@ -2626,7 +2394,7 @@ public void Should_not_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -2644,7 +2412,7 @@ public void Should_have_the_erroring_upgraded_package_in_the_lib_bad_directory() var packageFile = Path.Combine(Scenario.get_top_level(), "lib-bad", Configuration.PackageNames, "2.0.0", Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } @@ -2659,61 +2427,41 @@ public void Should_delete_the_rollback() [Fact] public void Should_contain_a_warning_message_that_it_was_unable_to_upgrade_a_package() { - bool installedSuccessfully = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("0/1")) installedSuccessfully = true; - } - - installedSuccessfully.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - _packageResult.Success.ShouldBeFalse(); + _packageResult.Success.Should().BeFalse(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - foreach (var message in _packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + _packageResult.Messages.Should().Contain(m => m.MessageType == ResultType.Error); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - foreach (var message in _packageResult.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("chocolateyInstall.ps1")) errorFound = true; - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("chocolateyInstall.ps1"))); } } @@ -2741,7 +2489,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -2751,7 +2499,7 @@ public void Should_upgrade_the_minimum_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -2761,47 +2509,33 @@ public void Should_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_upgraded_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 3/3")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 3/3")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -2829,7 +2563,7 @@ public void Should_not_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -2839,7 +2573,7 @@ public void Should_not_upgrade_the_minimum_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -2849,85 +2583,49 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_it_was_unable_to_upgrade_anything() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1")); } [Fact] public void Should_not_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_an_error_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => m.MessageType == ResultType.Error)); } [Fact] public void Should_have_expected_error_in_package_result() { - bool errorFound = false; - - foreach (var packageResult in Results) - { - foreach (var message in packageResult.Value.Messages) - { - if (message.MessageType == ResultType.Error) - { - if (message.Message.Contains("Unable to resolve dependency 'isexactversiondependency")) errorFound = true; - } - } - } - - errorFound.ShouldBeTrue(); + Results.Should().AllSatisfy(r => + r.Value.Messages.Should().Contain(m => + m.MessageType == ResultType.Error && + m.Message.Contains("Unable to resolve dependency 'isexactversiondependency"))); } } @@ -2956,7 +2654,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -2966,7 +2664,7 @@ public void Should_not_upgrade_the_minimum_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -2976,47 +2674,33 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_it_upgraded_only_the_package_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -3044,7 +2728,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } @@ -3054,7 +2738,7 @@ public void Should_not_upgrade_the_parent_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3064,47 +2748,33 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_the_dependency_upgraded_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -3132,7 +2802,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -3142,7 +2812,7 @@ public void Should_upgrade_the_parent_package_to_highest_version_that_meets_new_ var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -3152,47 +2822,33 @@ public void Should_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_upgraded_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 3/3")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 3/3")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -3222,7 +2878,7 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -3232,7 +2888,7 @@ public void Should_upgrade_the_parent_package_to_highest_version_that_meets_new_ var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.1.0"); } } @@ -3242,47 +2898,33 @@ public void Should_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_upgraded_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 3/3")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 3/3")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } @@ -3312,7 +2954,7 @@ public void Should_upgrade_the_package_to_highest_version_in_range() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } @@ -3322,7 +2964,7 @@ public void Should_not_upgrade_parent_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3332,63 +2974,42 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_upgraded_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_outputted_conflicting_upgrade_message() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("One or more unresolved package dependency constraints detected in the Chocolatey lib folder") - && message.Contains("hasdependency 1.0.0 constraint: isdependency (>= 1.0.0 && < 2.0.0)")) - { - expectedMessage = true; - } - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => + m.Contains("One or more unresolved package dependency constraints detected in the Chocolatey lib folder") + && m.Contains("hasdependency 1.0.0 constraint: isdependency (>= 1.0.0 && < 2.0.0)")); } } @@ -3420,7 +3041,7 @@ public void Should_upgrade_the_package_to_highest_version_in_range() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } @@ -3430,7 +3051,7 @@ public void Should_not_upgrade_parent_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3440,64 +3061,43 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_upgraded_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 2/2")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 2/2")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_outputted_conflicting_upgrade_message() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("One or more unresolved package dependency constraints detected in the Chocolatey lib folder") - && message.Contains("hasdependency 1.0.0 constraint: isexactversiondependency (= 1.0.0)") - && message.Contains("hasdependency 1.0.0 constraint: isdependency (>= 1.0.0 && < 2.0.0)")) - { - expectedMessage = true; - } - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => + m.Contains("One or more unresolved package dependency constraints detected in the Chocolatey lib folder") + && m.Contains("hasdependency 1.0.0 constraint: isexactversiondependency (= 1.0.0)") + && m.Contains("hasdependency 1.0.0 constraint: isdependency (>= 1.0.0 && < 2.0.0)")); } } @@ -3529,7 +3129,7 @@ public void Should_upgrade_the_package_to_highest_version_in_range() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } @@ -3539,7 +3139,7 @@ public void Should_not_upgrade_parent_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3549,63 +3149,42 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_upgraded_successfully() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_outputted_conflicting_upgrade_message() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("One or more unresolved package dependency constraints detected in the Chocolatey lib folder") - && message.Contains("hasdependency 1.0.0 constraint: isdependency (>= 1.0.0 && < 2.0.0)")) - { - expectedMessage = true; - } - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => + m.Contains("One or more unresolved package dependency constraints detected in the Chocolatey lib folder") + && m.Contains("hasdependency 1.0.0 constraint: isdependency (>= 1.0.0 && < 2.0.0)")); } } @@ -3636,7 +3215,7 @@ public void Should_not_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isdependency", "isdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3646,7 +3225,7 @@ public void Should_not_upgrade_parent_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "hasdependency", "hasdependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } @@ -3656,59 +3235,40 @@ public void Should_not_upgrade_the_exact_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", "isexactversiondependency", "isexactversiondependency.nupkg"); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.0.0"); } } [Fact] public void Should_contain_a_message_that_nothing_was_upgraded() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 0/1")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 0/1")); } [Fact] public void Should_have_an_error_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeFalse()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } [Fact] public void Should_have_outputted_expected_error_message() { - bool expectedMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Error).OrEmpty()) - { - if (message.Contains("Unable to resolve dependency chain. This may be caused by a parent package depending on this package, try specifying a specific version to use or don't ignore any dependencies!")) expectedMessage = true; - } - - expectedMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Unable to resolve dependency chain. This may be caused by a parent package depending on this package, try specifying a specific version to use or don't ignore any dependencies!")); } } @@ -3740,32 +3300,27 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -3774,13 +3329,13 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } // any file in a nuget package will overwrite an existing file @@ -3790,25 +3345,25 @@ public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() [Fact] public void Should_not_change_the_test_value_in_the_config_from_original_one_dot_zero_dot_zero_due_to_upgrade_and_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='test']/@value").TypedValue.ToStringSafe().ShouldEqual("default 1.0.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='test']/@value").TypedValue.ToStringSafe().Should().Be("default 1.0.0"); } [Fact] public void Should_change_the_testReplace_value_in_the_config_due_to_XDT_Replace() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='testReplace']/@value").TypedValue.ToStringSafe().ShouldEqual("1.1.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='testReplace']/@value").TypedValue.ToStringSafe().Should().Be("1.1.0"); } [Fact] public void Should_not_change_the_insert_value_in_the_config_due_to_upgrade_and_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insert']/@value").TypedValue.ToStringSafe().ShouldEqual("1.0.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insert']/@value").TypedValue.ToStringSafe().Should().Be("1.0.0"); } [Fact] public void Should_add_the_insertNew_value_in_the_config_due_to_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insertNew']/@value").TypedValue.ToStringSafe().ShouldEqual("1.1.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insertNew']/@value").TypedValue.ToStringSafe().Should().Be("1.1.0"); } } @@ -3843,32 +3398,27 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -3877,13 +3427,13 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } // any file in a nuget package will overwrite an existing file @@ -3893,31 +3443,31 @@ public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() [Fact] public void Should_not_change_the_test_value_in_the_config_from_original_one_dot_zero_dot_zero_due_to_upgrade_and_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='test']/@value").TypedValue.ToStringSafe().ShouldEqual("default 1.0.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='test']/@value").TypedValue.ToStringSafe().Should().Be("default 1.0.0"); } [Fact] public void Should_change_the_testReplace_value_in_the_config_due_to_XDT_Replace() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='testReplace']/@value").TypedValue.ToStringSafe().ShouldEqual("1.1.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='testReplace']/@value").TypedValue.ToStringSafe().Should().Be("1.1.0"); } [Fact] public void Should_not_change_the_insert_value_in_the_config_due_to_upgrade_and_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insert']/@value").TypedValue.ToStringSafe().ShouldEqual("1.0.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insert']/@value").TypedValue.ToStringSafe().Should().Be("1.0.0"); } [Fact] public void Should_add_the_insertNew_value_in_the_config_due_to_XDT_InsertIfMissing() { - _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insertNew']/@value").TypedValue.ToStringSafe().ShouldEqual("1.1.0"); + _xPathNavigator.SelectSingleNode("//configuration/appSettings/add[@key='insertNew']/@value").TypedValue.ToStringSafe().Should().Be("1.1.0"); } [Fact] public void Should_have_a_config_with_the_comment_from_the_original() { - File.ReadAllText(_xmlFilePath).ShouldContain(CommentAdded); + File.ReadAllText(_xmlFilePath).Should().Contain(CommentAdded); } } @@ -3937,13 +3487,14 @@ public override void Because() [Fact] public void Should_have_no_sources_enabled_result() { - MockLogger.ContainsMessage("Upgrading was NOT successful. There are no sources enabled for", LogLevel.Error).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Error.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Upgrading was NOT successful. There are no sources enabled for")); } [Fact] public void Should_not_have_any_packages_upgraded() { - Results.Count().ShouldEqual(0); + Results.Should().BeEmpty(); } } @@ -3963,23 +3514,23 @@ public override void Because() [Fact] public void Should_report_for_all_installed_packages() { - Results.Count().ShouldEqual(3); + Results.Should().HaveCount(3); } [Fact] public void Should_upgrade_packages_with_upgrades() { var upgradePackageResult = Results.Where(x => x.Key == "upgradepackage").ToList(); - upgradePackageResult.Count.ShouldEqual(1, "upgradepackage must be there once"); - upgradePackageResult.First().Value.Version.ShouldEqual("1.1.0"); + upgradePackageResult.Should().ContainSingle( "upgradepackage must be there once"); + upgradePackageResult.First().Value.Version.Should().Be("1.1.0"); } [Fact] public void Should_skip_packages_without_upgrades() { var installPackageResult = Results.Where(x => x.Key == "installpackage").ToList(); - installPackageResult.Count.ShouldEqual(1, "installpackage must be there once"); - installPackageResult.First().Value.Version.ShouldEqual("1.0.0"); + installPackageResult.Should().ContainSingle( "installpackage must be there once"); + installPackageResult.First().Value.Version.Should().Be("1.0.0"); } } @@ -4002,15 +3553,15 @@ public override void Because() [Fact] public void Should_report_for_all_installed_packages() { - Results.Count().ShouldEqual(3); + Results.Should().HaveCount(3); } [Fact] public void Should_upgrade_packages_with_upgrades() { var upgradePackageResult = Results.Where(x => x.Key == "upgradepackage").ToList(); - upgradePackageResult.Count.ShouldEqual(1, "upgradepackage must be there once"); - upgradePackageResult.First().Value.Version.ShouldEqual("1.1.1-beta2"); + upgradePackageResult.Should().ContainSingle( "upgradepackage must be there once"); + upgradePackageResult.First().Value.Version.Should().Be("1.1.1-beta2"); } [Fact] @@ -4020,9 +3571,9 @@ public void Should_upgrade_upgradepackage() using (var packageReader = new PackageArchiveReader(packageFile)) { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ShouldEqual("1.1.1-beta2"); - version.ToStringSafe().ShouldEqual("1.1.1-beta2"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.Should().Be("1.1.1-beta2"); + version.ToNormalizedStringChecked().Should().Be("1.1.1-beta2"); } } @@ -4030,8 +3581,8 @@ public void Should_upgrade_upgradepackage() public void Should_skip_packages_without_upgrades() { var installPackageResult = Results.Where(x => x.Key == "installpackage").ToList(); - installPackageResult.Count.ShouldEqual(1, "installpackage must be there once"); - installPackageResult.First().Value.Version.ShouldEqual("1.0.0"); + installPackageResult.Should().ContainSingle( "installpackage must be there once"); + installPackageResult.First().Value.Version.Should().Be("1.0.0"); } } @@ -4056,16 +3607,16 @@ public override void Because() [Fact] public void Should_report_for_all_installed_packages() { - Results.Count().ShouldEqual(3); + Results.Should().HaveCount(3); } [Fact] public void Should_upgrade_packages_with_upgrades() { var upgradePackageResult = Results.Where(x => x.Key == "upgradepackage").ToList(); - upgradePackageResult.Count.ShouldEqual(1, "upgradepackage must be there once"); + upgradePackageResult.Should().ContainSingle( "upgradepackage must be there once"); // available version will show as last stable - upgradePackageResult.First().Value.Version.ShouldEqual("1.1.0"); + upgradePackageResult.First().Value.Version.Should().Be("1.1.0"); } [Fact] @@ -4075,9 +3626,9 @@ public void Should_not_upgrade_upgradepackage() using (var packageReader = new PackageArchiveReader(packageFile)) { var version = packageReader.NuspecReader.GetVersion(); - version.Version.ToStringSafe().ShouldEqual("1.1.1.0"); - version.OriginalVersion.ShouldEqual("1.1.1-beta"); - version.ToStringSafe().ShouldEqual("1.1.1-beta"); + version.Version.ToStringSafe().Should().Be("1.1.1.0"); + version.OriginalVersion.Should().Be("1.1.1-beta"); + version.ToNormalizedStringChecked().Should().Be("1.1.1-beta"); } } @@ -4085,8 +3636,8 @@ public void Should_not_upgrade_upgradepackage() public void Should_skip_packages_without_upgrades() { var installPackageResult = Results.Where(x => x.Key == "installpackage").ToList(); - installPackageResult.Count.ShouldEqual(1, "installpackage must be there once"); - installPackageResult.First().Value.Version.ShouldEqual("1.0.0"); + installPackageResult.Should().ContainSingle( "installpackage must be there once"); + installPackageResult.First().Value.Version.Should().Be("1.0.0"); } } @@ -4112,7 +3663,7 @@ public override void Because() [Fact] public void Should_have_a_single_package_result() { - Results.Count.ShouldEqual(1, "The returned package results do not have a single value!"); + Results.Should().ContainSingle( "The returned package results do not have a single value!"); } [Fact] @@ -4144,7 +3695,7 @@ public void Should_contain_newer_version_in_directory() FileAssert.Exists(shimFile); - File.ReadAllText(shimFile).ShouldEqual("1.1.1-beta.1"); + File.ReadAllText(shimFile).Should().Be("1.1.1-beta.1"); } [Fact] @@ -4153,44 +3704,34 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.1-beta.1"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.1-beta.1"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.1-beta.1 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.1-beta.1 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -4199,19 +3740,19 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.1-beta.1"); + _packageResult.Version.Should().Be("1.1.1-beta.1"); } [Fact] @@ -4219,7 +3760,8 @@ public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.0.0 Before Modification")); } [Fact] @@ -4229,20 +3771,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.0.0 Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.1-beta.1 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.1-beta.1 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.0 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.0 Before Modification")); } [Fact] @@ -4252,7 +3795,8 @@ public void Should_have_executed_chocolateyInstall_script_for_new_package() { const string expectedMessage = "upgradepackage 1.1.1-beta.1 Installed"; - MockLogger.ContainsMessage(expectedMessage, LogLevel.Info).ShouldBeTrue("No log message containing the sentence '{0}' could be found!".FormatWith(expectedMessage)); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains(expectedMessage), "No log message containing the sentence '{0}' could be found!".FormatWith(expectedMessage)); } } @@ -4273,15 +3817,15 @@ public override void Because() [Fact] public void Should_report_for_all_non_skipped_packages() { - Results.Count().ShouldEqual(1); - Results.First().Key.ShouldEqual("installpackage"); + Results.Should().HaveCount(1); + Results.First().Key.Should().Be("installpackage"); } [Fact] public void Should_skip_packages_in_except_list() { var upgradePackageResult = Results.Where(x => x.Key == "upgradepackage").ToList(); - upgradePackageResult.Count.ShouldEqual(0, "upgradepackage should not be in the results list"); + upgradePackageResult.Should().BeEmpty("upgradepackage should not be in the results list"); } } @@ -4332,62 +3876,52 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have scriptpackage.hook v1.0.0 installed. Version 2.0.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have scriptpackage.hook v1.0.0 installed. Version 2.0.0 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_two_dot_zero_dot_zero() { - _packageResult.Version.ShouldEqual("2.0.0"); + _packageResult.Version.Should().Be("2.0.0"); } [Fact] @@ -4405,7 +3939,7 @@ public void Should_install_hook_scripts_to_folder() foreach (string scriptName in hookScripts) { var hookScriptPath = Path.Combine(Scenario.get_top_level(), "hooks", Configuration.PackageNames.Replace(".hook", string.Empty), scriptName); - File.ReadAllText(hookScriptPath).ShouldContain("Write-Output"); + File.ReadAllText(hookScriptPath).Should().Contain("Write-Output"); } } @@ -4469,7 +4003,7 @@ public void Should_contain_newer_version_in_directory() { var shimFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, "tools", "console.exe"); - File.ReadAllText(shimFile).ShouldEqual("1.1.0"); + File.ReadAllText(shimFile).Should().Be("1.1.0"); } [Fact] @@ -4478,44 +4012,34 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -4524,19 +4048,19 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } [Fact] @@ -4544,7 +4068,8 @@ public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.0.0 Before Modification")); } [Fact] @@ -4554,20 +4079,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.0.0 Before Modification")) - .Any(p => p.EndsWith("upgradepackage 1.1.0 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("upgradepackage 1.1.0 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.0 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.1.0 Before Modification")); } [Fact] @@ -4575,7 +4101,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage 1.1.0 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.1.0 Installed")); } [Fact] @@ -4583,7 +4110,8 @@ public void Should_have_executed_chocolateyInstall_script_for_new_package() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_all_hook_script() { - MockLogger.ContainsMessage("pre-install-all.ps1 hook ran for upgradepackage 1.1.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-install-all.ps1 hook ran for upgradepackage 1.1.0")); } [Fact] @@ -4591,7 +4119,8 @@ public void Should_have_executed_pre_all_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_all_hook_script() { - MockLogger.ContainsMessage("post-install-all.ps1 hook ran for upgradepackage 1.1.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-install-all.ps1 hook ran for upgradepackage 1.1.0")); } [Fact] @@ -4599,7 +4128,8 @@ public void Should_have_executed_post_all_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_pre_upgradepackage_hook_script() { - MockLogger.ContainsMessage("pre-install-upgradepackage.ps1 hook ran for upgradepackage 1.1.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-install-upgradepackage.ps1 hook ran for upgradepackage 1.1.0")); } [Fact] @@ -4607,7 +4137,8 @@ public void Should_have_executed_pre_upgradepackage_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_post_upgradepackage_hook_script() { - MockLogger.ContainsMessage("post-install-upgradepackage.ps1 hook ran for upgradepackage 1.1.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-install-upgradepackage.ps1 hook ran for upgradepackage 1.1.0")); } [Fact] @@ -4615,7 +4146,8 @@ public void Should_have_executed_post_upgradepackage_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_uninstall_hook_script() { - MockLogger.ContainsMessage("post-uninstall-all.ps1 hook ran for upgradepackage 1.1.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("post-uninstall-all.ps1 hook ran for upgradepackage 1.1.0")); } [Fact] @@ -4623,7 +4155,8 @@ public void Should_not_have_executed_uninstall_hook_script() [Platform(Exclude = "Mono")] public void Should_not_have_executed_installpackage_hook_script() { - MockLogger.ContainsMessage("pre-install-installpackage.ps1 hook ran for upgradepackage 1.1.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-install-installpackage.ps1 hook ran for upgradepackage 1.1.0")); } [Fact] @@ -4631,7 +4164,8 @@ public void Should_not_have_executed_installpackage_hook_script() [Platform(Exclude = "Mono")] public void Should_have_executed_beforemodify_hook_script_for_previous_version() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for upgradepackage 1.0.0", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for upgradepackage 1.0.0")); } [Fact] @@ -4639,7 +4173,8 @@ public void Should_have_executed_beforemodify_hook_script_for_previous_version() [Platform(Exclude = "Mono")] public void Should_not_have_executed_beforemodify_hook_script_for_upgrade_version() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for upgradepackage 1.1.0", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for upgradepackage 1.1.0")); } } public class When_upgrading_an_existing_package_with_uppercase_id : ScenariosBase @@ -4688,62 +4223,52 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have UpperCase v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have UpperCase v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_not_have_warning_package_result() { - _packageResult.Warning.ShouldBeFalse(); + _packageResult.Warning.Should().BeFalse(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } [Fact] @@ -4751,7 +4276,8 @@ public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("UpperCase 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("UpperCase 1.0.0 Before Modification")); } [Fact] @@ -4761,20 +4287,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("UpperCase 1.0.0 Before Modification")) - .Any(p => p.EndsWith("UpperCase 1.1.0 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("UpperCase 1.1.0 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("UpperCase 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("UpperCase 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("UpperCase 1.1.0 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("UpperCase 1.1.0 Before Modification")); } [Fact] @@ -4782,7 +4309,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("UpperCase 1.1.0 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("UpperCase 1.1.0 Installed")); } } @@ -4824,73 +4352,59 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("1.1.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("1.1.0"); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have unsupportedelements v1.0.0 installed. Version 1.1.0 is available based on your source")) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have unsupportedelements v1.0.0 installed. Version 1.1.0 is available based on your source")); } [Fact] public void Should_contain_a_warning_message_about_unsupported_elements() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("Issues found with nuspec elements")) upgradeMessage = true; - } - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Issues found with nuspec elements")); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] public void Should_have_warning_package_result() { - _packageResult.Warning.ShouldBeTrue(); + _packageResult.Warning.Should().BeTrue(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() { - _packageResult.Version.ShouldEqual("1.1.0"); + _packageResult.Version.Should().Be("1.1.0"); } [Fact] @@ -4898,7 +4412,8 @@ public void Should_match_the_upgrade_version_of_one_dot_one_dot_zero() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("unsupportedelements 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("unsupportedelements 1.0.0 Before Modification")); } [Fact] @@ -4908,20 +4423,21 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("unsupportedelements 1.0.0 Before Modification")) - .Any(p => p.EndsWith("unsupportedelements 1.1.0 Installed")) - .ShouldBeTrue(); + .Should().Contain(p => p.EndsWith("unsupportedelements 1.1.0 Installed")); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("unsupportedelements 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("unsupportedelements 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("unsupportedelements 1.1.0 Before Modification", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("unsupportedelements 1.1.0 Before Modification")); } [Fact] @@ -4929,7 +4445,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("unsupportedelements 1.1.0 Installed", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("unsupportedelements 1.1.0 Installed")); } } @@ -4981,44 +4498,34 @@ public void Should_upgrade_the_package() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", Configuration.PackageNames, Configuration.PackageNames + NuGetConstants.PackageExtension); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual(NonNormalizedVersion); + packageReader.NuspecReader.GetVersion().ToStringSafe().Should().Be(NonNormalizedVersion); } } [Fact] public void Should_contain_a_warning_message_that_it_upgraded_successfully() { - bool upgradedSuccessMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("upgraded 1/1")) upgradedSuccessMessage = true; - } - - upgradedSuccessMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 1/1")); } [Fact] public void Should_contain_a_warning_message_with_old_and_new_versions() { - bool upgradeMessage = false; - foreach (var message in MockLogger.MessagesFor(LogLevel.Warn).OrEmpty()) - { - if (message.Contains("You have upgradepackage v1.0.0 installed. Version {0} is available based on your source".FormatWith(NonNormalizedVersion))) upgradeMessage = true; - } - - upgradeMessage.ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("You have upgradepackage v1.0.0 installed. Version {0} is available based on your source".FormatWith(NonNormalizedVersion))); } [Fact] public void Should_have_a_successful_package_result() { - _packageResult.Success.ShouldBeTrue(); + _packageResult.Success.Should().BeTrue(); } [Fact] public void Should_not_have_inconclusive_package_result() { - _packageResult.Inconclusive.ShouldBeFalse(); + _packageResult.Inconclusive.Should().BeFalse(); } [Fact] @@ -5027,19 +4534,19 @@ public void Should_not_have_warning_package_result_other_than_before_modify_fail // For before modify scripts that fail, we add a warning message. // So we will ignore any such warnings. var messages = _packageResult.Messages.Where(m => m.MessageType == ResultType.Warn && !m.Message.ContainsSafe("chocolateyBeforeModify")); - messages.ShouldBeEmpty(); + messages.Should().BeEmpty(); } [Fact] public void Config_should_match_package_result_name() { - _packageResult.Name.ShouldEqual(Configuration.PackageNames); + _packageResult.Name.Should().Be(Configuration.PackageNames); } [Fact] public void Should_match_the_upgrade_version() { - _packageResult.Version.ShouldEqual(NonNormalizedVersion); + _packageResult.Version.Should().Be(NormalizedVersion); } [Fact] @@ -5047,7 +4554,8 @@ public void Should_match_the_upgrade_version() [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyBeforeModify_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Before Modification", LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage 1.0.0 Before Modification")); } [Fact] @@ -5057,20 +4565,22 @@ public void Should_have_executed_chocolateyBeforeModify_before_chocolateyInstall { MockLogger.MessagesFor(LogLevel.Info).OrEmpty() .SkipWhile(p => !p.Contains("upgradepackage 1.0.0 Before Modification")) - .Any(p => p.EndsWith("upgradepackage {0} Installed".FormatWith(NonNormalizedVersion))) - .ShouldBeTrue(); + .Any(p => p.EndsWith("upgradepackage {0} Installed".FormatWith(NormalizedVersion))) + .Should().BeTrue(); } [Fact] public void Should_not_have_executed_chocolateyUninstall_script_for_original_package() { - MockLogger.ContainsMessage("upgradepackage 1.0.0 Uninstalled", LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage 1.0.0 Uninstalled")); } [Fact] public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage {0} Before Modification".FormatWith(NonNormalizedVersion), LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("upgradepackage {0} Before Modification".FormatWith(NormalizedVersion))); } [Fact] @@ -5078,7 +4588,8 @@ public void Should_not_have_executed_chocolateyBeforeModify_script_for_new_packa [Platform(Exclude = "Mono")] public void Should_have_executed_chocolateyInstall_script_for_new_package() { - MockLogger.ContainsMessage("upgradepackage {0} Installed".FormatWith(NonNormalizedVersion), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgradepackage {0} Installed".FormatWith(NormalizedVersion))); } } @@ -5167,14 +4678,15 @@ public void Should_upgrade_the_minimum_version_dependency() var packageFile = Path.Combine(Scenario.get_top_level(), "lib", DependencyName, "{0}.nupkg".FormatWith(DependencyName)); using (var packageReader = new PackageArchiveReader(packageFile)) { - packageReader.NuspecReader.GetVersion().ToStringSafe().ShouldEqual("2.0.0"); + packageReader.NuspecReader.GetVersion().ToNormalizedStringChecked().Should().Be("2.0.0"); } } [Fact] public void Should_contain_a_message_that_everything_upgraded_successfully() { - MockLogger.ContainsMessage("upgraded 2/2", LogLevel.Warn).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("upgraded 2/2")); } [Fact] @@ -5182,7 +4694,8 @@ public void Should_contain_a_message_that_everything_upgraded_successfully() [Platform(Exclude = "Mono")] public void Should_run_beforemodify_hook_script_for_previous_version_of_target() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "1.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "1.0.0"))); } [Fact] @@ -5190,7 +4703,8 @@ public void Should_run_beforemodify_hook_script_for_previous_version_of_target() [Platform(Exclude = "Mono")] public void Should_run_already_installed_target_package_beforeModify() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "1.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "1.0.0"))); } [Fact] @@ -5198,7 +4712,8 @@ public void Should_run_already_installed_target_package_beforeModify() [Platform(Exclude = "Mono")] public void Should_not_run_beforemodify_hook_script_for_upgrade_version_of_target() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "2.0.0"), LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "2.0.0"))); } [Fact] @@ -5206,7 +4721,8 @@ public void Should_not_run_beforemodify_hook_script_for_upgrade_version_of_targe [Platform(Exclude = "Mono")] public void Should_not_run_target_package_beforeModify_for_upgraded_version() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "2.0.0"), LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(TargetPackageName, "2.0.0"))); } [Fact] @@ -5214,7 +4730,8 @@ public void Should_not_run_target_package_beforeModify_for_upgraded_version() [Platform(Exclude = "Mono")] public void Should_run_pre_all_hook_script_for_upgraded_version_of_target() { - MockLogger.ContainsMessage("pre-install-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "2.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-install-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "2.0.0"))); } [Fact] @@ -5222,7 +4739,8 @@ public void Should_run_pre_all_hook_script_for_upgraded_version_of_target() [Platform(Exclude = "Mono")] public void Should_run_post_all_hook_script_for_upgraded_version_of_target() { - MockLogger.ContainsMessage("post-install-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "2.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-install-all.ps1 hook ran for {0} {1}".FormatWith(TargetPackageName, "2.0.0"))); } [Fact] @@ -5230,7 +4748,8 @@ public void Should_run_post_all_hook_script_for_upgraded_version_of_target() [Platform(Exclude = "Mono")] public void Should_run_beforemodify_hook_script_for_previous_version_of_dependency() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "1.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "1.0.0"))); } [Fact] @@ -5238,7 +4757,8 @@ public void Should_run_beforemodify_hook_script_for_previous_version_of_dependen [Platform(Exclude = "Mono")] public void Should_run_already_installed_dependency_package_beforeModify() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "1.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "1.0.0"))); } [Fact] @@ -5246,7 +4766,8 @@ public void Should_run_already_installed_dependency_package_beforeModify() [Platform(Exclude = "Mono")] public void Should_not_run_beforemodify_hook_script_for_upgrade_version_of_dependency() { - MockLogger.ContainsMessage("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "2.0.0"), LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("pre-beforemodify-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "2.0.0"))); } [Fact] @@ -5254,7 +4775,8 @@ public void Should_not_run_beforemodify_hook_script_for_upgrade_version_of_depen [Platform(Exclude = "Mono")] public void Should_not_run_dependency_package_beforeModify_for_upgraded_version() { - MockLogger.ContainsMessage("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "2.0.0"), LogLevel.Info).ShouldBeFalse(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().NotContain(m => m.Contains("Ran BeforeModify: {0} {1}".FormatWith(DependencyName, "2.0.0"))); } [Fact] @@ -5262,7 +4784,8 @@ public void Should_not_run_dependency_package_beforeModify_for_upgraded_version( [Platform(Exclude = "Mono")] public void Should_run_pre_all_hook_script_for_upgraded_version_of_dependency() { - MockLogger.ContainsMessage("pre-install-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "2.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("pre-install-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "2.0.0"))); } [Fact] @@ -5270,34 +4793,26 @@ public void Should_run_pre_all_hook_script_for_upgraded_version_of_dependency() [Platform(Exclude = "Mono")] public void Should_run_post_all_hook_script_for_upgraded_version_of_dependency() { - MockLogger.ContainsMessage("post-install-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "2.0.0"), LogLevel.Info).ShouldBeTrue(); + MockLogger.Messages.Should().ContainKey(LogLevel.Info.ToStringSafe()) + .WhoseValue.Should().Contain(m => m.Contains("post-install-all.ps1 hook ran for {0} {1}".FormatWith(DependencyName, "2.0.0"))); } [Fact] public void Should_have_a_successful_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Success.ShouldBeTrue(); - } + Results.Should().AllSatisfy(r => r.Value.Success.Should().BeTrue()); } [Fact] public void Should_not_have_inconclusive_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Inconclusive.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Inconclusive.Should().BeFalse()); } [Fact] public void Should_not_have_warning_package_result() { - foreach (var packageResult in Results) - { - packageResult.Value.Warning.ShouldBeFalse(); - } + Results.Should().AllSatisfy(r => r.Value.Warning.Should().BeFalse()); } } } diff --git a/src/chocolatey.tests/TinySpec.cs b/src/chocolatey.tests/TinySpec.cs index ddb01b022f..99fd0a4e04 100644 --- a/src/chocolatey.tests/TinySpec.cs +++ b/src/chocolatey.tests/TinySpec.cs @@ -113,6 +113,15 @@ public class FactAttribute : ObservationAttribute { } + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class InlineDataAttribute : TestCaseAttribute + { + public InlineDataAttribute(params object[] data) + : base(data) + { + } + } + public class ExplicitAttribute : NUnit.Framework.ExplicitAttribute { } @@ -186,6 +195,15 @@ public SemVer20Attribute() } } + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] + public sealed class RuleEngine : CategoryAttribute + { + public RuleEngine() + : base("Rule Engine") + { + } + } + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)] public sealed class LegacySemVerAttribute : CategoryAttribute { diff --git a/src/chocolatey.tests/chocolatey.tests.csproj b/src/chocolatey.tests/chocolatey.tests.csproj index c99dad6fd2..6d9fc89608 100644 --- a/src/chocolatey.tests/chocolatey.tests.csproj +++ b/src/chocolatey.tests/chocolatey.tests.csproj @@ -13,6 +13,7 @@ chocolatey.tests chocolatey.tests v4.8 + 7.3 512 ..\ @@ -78,43 +79,46 @@ - ..\packages\Chocolatey.NuGet.Commands.3.1.0\lib\net472\Chocolatey.NuGet.Commands.dll + ..\packages\Chocolatey.NuGet.Commands.3.3.0\lib\net472\Chocolatey.NuGet.Commands.dll - ..\packages\Chocolatey.NuGet.Common.3.1.0\lib\net472\Chocolatey.NuGet.Common.dll + ..\packages\Chocolatey.NuGet.Common.3.3.0\lib\net472\Chocolatey.NuGet.Common.dll - ..\packages\Chocolatey.NuGet.Configuration.3.1.0\lib\net472\Chocolatey.NuGet.Configuration.dll + ..\packages\Chocolatey.NuGet.Configuration.3.3.0\lib\net472\Chocolatey.NuGet.Configuration.dll - ..\packages\Chocolatey.NuGet.Credentials.3.1.0\lib\net472\Chocolatey.NuGet.Credentials.dll + ..\packages\Chocolatey.NuGet.Credentials.3.3.0\lib\net472\Chocolatey.NuGet.Credentials.dll - ..\packages\Chocolatey.NuGet.DependencyResolver.Core.3.1.0\lib\net472\Chocolatey.NuGet.DependencyResolver.Core.dll + ..\packages\Chocolatey.NuGet.DependencyResolver.Core.3.3.0\lib\net472\Chocolatey.NuGet.DependencyResolver.Core.dll - ..\packages\Chocolatey.NuGet.Frameworks.3.1.0\lib\net472\Chocolatey.NuGet.Frameworks.dll + ..\packages\Chocolatey.NuGet.Frameworks.3.3.0\lib\net472\Chocolatey.NuGet.Frameworks.dll - ..\packages\Chocolatey.NuGet.LibraryModel.3.1.0\lib\net472\Chocolatey.NuGet.LibraryModel.dll + ..\packages\Chocolatey.NuGet.LibraryModel.3.3.0\lib\net472\Chocolatey.NuGet.LibraryModel.dll - ..\packages\Chocolatey.NuGet.PackageManagement.3.1.0\lib\net472\Chocolatey.NuGet.PackageManagement.dll + ..\packages\Chocolatey.NuGet.PackageManagement.3.3.0\lib\net472\Chocolatey.NuGet.PackageManagement.dll - ..\packages\Chocolatey.NuGet.Packaging.3.1.0\lib\net472\Chocolatey.NuGet.Packaging.dll + ..\packages\Chocolatey.NuGet.Packaging.3.3.0\lib\net472\Chocolatey.NuGet.Packaging.dll - ..\packages\Chocolatey.NuGet.ProjectModel.3.1.0\lib\net472\Chocolatey.NuGet.ProjectModel.dll + ..\packages\Chocolatey.NuGet.ProjectModel.3.3.0\lib\net472\Chocolatey.NuGet.ProjectModel.dll - ..\packages\Chocolatey.NuGet.Protocol.3.1.0\lib\net472\Chocolatey.NuGet.Protocol.dll + ..\packages\Chocolatey.NuGet.Protocol.3.3.0\lib\net472\Chocolatey.NuGet.Protocol.dll - ..\packages\Chocolatey.NuGet.Resolver.3.1.0\lib\net472\Chocolatey.NuGet.Resolver.dll + ..\packages\Chocolatey.NuGet.Resolver.3.3.0\lib\net472\Chocolatey.NuGet.Resolver.dll - ..\packages\Chocolatey.NuGet.Versioning.3.1.0\lib\net472\Chocolatey.NuGet.Versioning.dll + ..\packages\Chocolatey.NuGet.Versioning.3.3.0\lib\net472\Chocolatey.NuGet.Versioning.dll + + + ..\packages\FluentAssertions.6.11.0\lib\net47\FluentAssertions.dll ..\packages\log4net.2.0.12\lib\net45\log4net.dll @@ -132,9 +136,6 @@ ..\packages\NUnit.3.13.3\lib\net40\nunit.framework.dll - - ..\packages\Should.1.1.20\lib\Should.dll - ..\packages\SimpleInjector.2.8.3\lib\net45\SimpleInjector.dll @@ -146,8 +147,14 @@ + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + @@ -157,6 +164,7 @@ + @@ -226,7 +234,9 @@ chocolatey.console - + + + diff --git a/src/chocolatey.tests/infrastructure.app/attributes/CommandForAttributeSpecs.cs b/src/chocolatey.tests/infrastructure.app/attributes/CommandForAttributeSpecs.cs index b4cb255a0c..22b2b83e2e 100644 --- a/src/chocolatey.tests/infrastructure.app/attributes/CommandForAttributeSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/attributes/CommandForAttributeSpecs.cs @@ -17,7 +17,7 @@ namespace chocolatey.tests.infrastructure.app.attributes { using chocolatey.infrastructure.app.attributes; - using Should; + using FluentAssertions; public class CommandForAttributeSpecs { @@ -43,7 +43,7 @@ public override void Because() [Fact] public void Should_be_set_to_the_string() { - result.ShouldEqual("bob"); + result.Should().Be("bob"); } } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyApiKeyCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyApiKeyCommandSpecs.cs index d3e20399bf..6ba00cf99a 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyApiKeyCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyApiKeyCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyApiKeyCommandSpecs { @@ -56,13 +56,13 @@ public override void Because() [Fact] public void Should_implement_apikey() { - results.ShouldContain("apikey"); + results.Should().Contain("apikey"); } [Fact] public void Should_implement_setapikey() { - results.ShouldContain("setapikey"); + results.Should().Contain("setapikey"); } } @@ -84,31 +84,31 @@ public override void Because() [Fact] public void Should_clear_previously_set_Source() { - configuration.Sources.ShouldBeNull(); + configuration.Sources.Should().BeNull(); } [Fact] public void Should_add_source_to_the_option_set() { - optionSet.Contains("source").ShouldBeTrue(); + optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - optionSet.Contains("s").ShouldBeTrue(); + optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_apikey_to_the_option_set() { - optionSet.Contains("apikey").ShouldBeTrue(); + optionSet.Contains("apikey").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_apikey_to_the_option_set() { - optionSet.Contains("k").ShouldBeTrue(); + optionSet.Contains("k").Should().BeTrue(); } } @@ -136,9 +136,9 @@ public void Should_throw_when_key_is_set_without_a_source() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); } [Fact] @@ -175,9 +175,9 @@ public void Should_throw_when_key_is_removed_without_a_source() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyCacheCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyCacheCommandSpecs.cs new file mode 100644 index 0000000000..93f683e1c8 --- /dev/null +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyCacheCommandSpecs.cs @@ -0,0 +1,129 @@ +namespace chocolatey.tests.infrastructure.app.commands +{ + using chocolatey.infrastructure.app.attributes; + using System.Collections.Generic; + using chocolatey.infrastructure.app.commands; + using chocolatey.infrastructure.app.configuration; + using chocolatey.infrastructure.filesystem; + using Moq; + using System.Reflection; + using System.Linq; + using FluentAssertions; + using chocolatey.infrastructure.commandline; + using chocolatey.infrastructure.app.domain; + using FluentAssertions.Execution; + + public class ChocolateyCacheCommandSpecs + { + [ConcernFor("cache")] + public abstract class ChocolateyCacheCommandSpecsBase : TinySpec + { + protected ChocolateyCacheCommand Command; + protected ChocolateyConfiguration Configuration = new ChocolateyConfiguration(); + protected Mock FileSystem = new Mock(); + + public override void Context() + { + Configuration.CommandName = "cache"; + Command = new ChocolateyCacheCommand(FileSystem.Object); + } + } + + public class WhenImplementingCommandFor : ChocolateyCacheCommandSpecsBase + { + private List _results; + + public override void Because() + { + _results = Command.GetType().GetCustomAttributes().ToList(); + } + + [Fact] + public void ShouldImplementCache() + { + _results.Should().AllSatisfy(c => c.CommandName.Should().Be("cache")); + } + + [Fact] + public void ShouldSetADescription() + { + _results.Should().AllSatisfy(c => c.Description.Should().NotBeNullOrEmpty()); + } + + [Fact] + public void ShouldSetVersionProperty() + { + _results.Should().AllSatisfy(c => c.Version.Should().Be("2.1.0")); + } + } + + public class WhenConfiguringTheArgumentParser : ChocolateyCacheCommandSpecsBase + { + private OptionSet _optionSet; + + public override void Context() + { + base.Context(); + _optionSet = new OptionSet(); + } + + public override void Because() + { + Command.ConfigureArgumentParser(_optionSet, Configuration); + } + + [Fact] + [InlineData("expired")] + public void ShouldAddOptionToOptionSet(string name) + { + _optionSet.Contains(name).Should().BeTrue("Option set should include the parameter {0}", name); + } + } + + public class WhenParsingAdditionalParameters : ChocolateyCacheCommandSpecsBase + { + public override void Because() + { + + } + + public override void BeforeEachSpec() + { + Configuration.CacheCommand.Command = CacheCommandType.Unknown; + MockLogger.Reset(); + } + + [Fact] + public void ShouldHaveSetCacheCommandTypeToListOnUnusedSubCommand() + { + Command.ParseAdditionalArguments(new List(), Configuration); + Configuration.CacheCommand.Command.Should().Be(CacheCommandType.List); + } + + [InlineData("list", CacheCommandType.List)] + [InlineData("remove", CacheCommandType.Remove)] + [InlineData("unknown", CacheCommandType.List)] + public void ShouldHaveSetCacheCommandTypeToListOnListSubCommand(string testArg, CacheCommandType expectedType) + { + var unparsedArgs = new[] { testArg }; + Command.ParseAdditionalArguments(unparsedArgs, Configuration); + Configuration.CacheCommand.Command.Should().Be(expectedType); + } + + [Fact] + public void ShouldHaveSetCacheCommandTypeToListOnUnknownSubCommand() + { + var unparsedArgs = new[] { "some-command" }; + + Command.ParseAdditionalArguments(unparsedArgs, Configuration); + + using (new AssertionScope()) + { + Configuration.CacheCommand.Command.Should().Be(CacheCommandType.List); + MockLogger.Messages.Should().ContainKey(LogLevel.Warn.ToString()) + .WhoseValue.Should().Contain("Unknown command 'some-command'. Setting to list."); + } + } + } + } +} \ No newline at end of file diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyConfigCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyConfigCommandSpecs.cs index 2a2493450a..b91fcf2f0d 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyConfigCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyConfigCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyConfigCommandSpecs { @@ -55,7 +55,7 @@ public override void Because() [Fact] public void Should_implement_config() { - _results.ShouldContain("config"); + _results.Should().Contain("config"); } } @@ -77,13 +77,13 @@ public override void Because() [Fact] public void Should_add_name_to_the_option_set() { - _optionSet.Contains("name").ShouldBeTrue(); + _optionSet.Contains("name").Should().BeTrue(); } [Fact] public void Should_add_value_to_the_option_set() { - _optionSet.Contains("value").ShouldBeTrue(); + _optionSet.Contains("value").Should().BeTrue(); } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyExportCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyExportCommandSpecs.cs index 3eafdd6757..959f2f3ebb 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyExportCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyExportCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.commandline; using chocolatey.infrastructure.filesystem; using Moq; - using Should; + using FluentAssertions; public class ChocolateyExportCommandSpecs { @@ -62,7 +62,7 @@ public override void Because() [Fact] public void Should_implement_help() { - results.ShouldContain("export"); + results.Should().Contain("export"); } } @@ -84,25 +84,25 @@ public override void Because() [Fact] public void Should_add_output_file_path_to_the_option_set() { - optionSet.Contains("output-file-path").ShouldBeTrue(); + optionSet.Contains("output-file-path").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_output_file_path_to_the_option_set() { - optionSet.Contains("o").ShouldBeTrue(); + optionSet.Contains("o").Should().BeTrue(); } [Fact] public void Should_add_include_version_numbers_to_the_option_set() { - optionSet.Contains("include-version-numbers").ShouldBeTrue(); + optionSet.Contains("include-version-numbers").Should().BeTrue(); } [Fact] public void Should_add_include_version_to_the_option_set() { - optionSet.Contains("include-version").ShouldBeTrue(); + optionSet.Contains("include-version").Should().BeTrue(); } } @@ -130,7 +130,7 @@ public void Should_handle_passing_in_an_empty_string_for_output_file_path() unparsedArgs.Add(" "); because(); - configuration.ExportCommand.OutputFilePath.ShouldEqual("packages.config"); + configuration.ExportCommand.OutputFilePath.Should().Be("packages.config"); } [Fact] @@ -140,7 +140,7 @@ public void Should_handle_passing_in_a_string_for_output_file_path() unparsedArgs.Add("custompackages.config"); because(); - configuration.ExportCommand.OutputFilePath.ShouldEqual("custompackages.config"); + configuration.ExportCommand.OutputFilePath.Should().Be("custompackages.config"); } } @@ -161,9 +161,8 @@ public void Should_log_a_message() public void Should_log_the_message_we_expect() { var messages = MockLogger.MessagesFor(LogLevel.Info); - messages.ShouldNotBeEmpty(); - messages.Count.ShouldEqual(1); - messages[0].ShouldContain("Export would have been with options"); + messages.Should().ContainSingle(); + messages[0].Should().Contain("Export would have been with options"); } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyFeatureCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyFeatureCommandSpecs.cs index 6a8547b6e9..0cd14f6eb9 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyFeatureCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyFeatureCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyFeatureCommandSpecs { @@ -56,13 +56,13 @@ public override void Because() [Fact] public void Should_implement_feature() { - _results.ShouldContain("feature"); + _results.Should().Contain("feature"); } [Fact] public void Should_implement_features() { - _results.ShouldContain("features"); + _results.Should().Contain("features"); } } @@ -85,13 +85,13 @@ public override void Because() [Fact] public void Should_add_name_to_the_option_set() { - _optionSet.Contains("name").ShouldBeTrue(); + _optionSet.Contains("name").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_name_to_the_option_set() { - _optionSet.Contains("n").ShouldBeTrue(); + _optionSet.Contains("n").Should().BeTrue(); } } @@ -118,7 +118,7 @@ public void Should_use_the_first_unparsed_arg_as_the_subcommand() _unparsedArgs.Add("list"); _because(); - Configuration.FeatureCommand.Command.ShouldEqual(FeatureCommandType.List); + Configuration.FeatureCommand.Command.Should().Be(FeatureCommandType.List); } [Fact] @@ -140,10 +140,10 @@ public void Should_throw_when_more_than_one_unparsed_arg_is_passed() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain("A single features command must be listed"); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain("A single features command must be listed"); } [Fact] @@ -153,7 +153,7 @@ public void Should_accept_enable_as_the_subcommand() _unparsedArgs.Add("enable"); _because(); - Configuration.FeatureCommand.Command.ShouldEqual(FeatureCommandType.Enable); + Configuration.FeatureCommand.Command.Should().Be(FeatureCommandType.Enable); } [Fact] @@ -163,7 +163,7 @@ public void Should_accept_disable_as_the_subcommand() _unparsedArgs.Add("disable"); _because(); - Configuration.FeatureCommand.Command.ShouldEqual(FeatureCommandType.Disable); + Configuration.FeatureCommand.Command.Should().Be(FeatureCommandType.Disable); } [Fact] @@ -173,7 +173,7 @@ public void Should_set_unrecognized_values_to_list_as_the_subcommand() _unparsedArgs.Add("wtf"); _because(); - Configuration.FeatureCommand.Command.ShouldEqual(FeatureCommandType.List); + Configuration.FeatureCommand.Command.Should().Be(FeatureCommandType.List); } [Fact] @@ -182,7 +182,7 @@ public void Should_default_to_list_as_the_subcommand() Reset(); _because(); - Configuration.FeatureCommand.Command.ShouldEqual(FeatureCommandType.List); + Configuration.FeatureCommand.Command.Should().Be(FeatureCommandType.List); } [Fact] @@ -192,7 +192,7 @@ public void Should_handle_passing_in_an_empty_string() _unparsedArgs.Add(" "); _because(); - Configuration.FeatureCommand.Command.ShouldEqual(FeatureCommandType.List); + Configuration.FeatureCommand.Command.Should().Be(FeatureCommandType.List); } } @@ -223,10 +223,10 @@ public void Should_throw_when_command_is_not_list_and_name_is_not_set() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldEqual("When specifying the subcommand '{0}', you must also specify --name.".FormatWith(Configuration.FeatureCommand.Command.ToStringSafe().ToLower())); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Be("When specifying the subcommand '{0}', you must also specify --name.".FormatWith(Configuration.FeatureCommand.Command.ToStringSafe().ToLower())); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyHelpCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyHelpCommandSpecs.cs index 856235f681..d385fe7aae 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyHelpCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyHelpCommandSpecs.cs @@ -21,7 +21,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.attributes; using chocolatey.infrastructure.app.commands; using chocolatey.infrastructure.app.configuration; - using Should; + using FluentAssertions; public class ChocolateyHelpCommandSpecs { @@ -49,7 +49,7 @@ public override void Because() [Fact] public void Should_implement_help() { - results.ShouldContain("help"); + results.Should().Contain("help"); } } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInfoCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInfoCommandSpecs.cs index 7c7b96e406..58082f04de 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInfoCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInfoCommandSpecs.cs @@ -25,7 +25,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyInfoCommandSpecs { @@ -55,7 +55,7 @@ public override void Because() [Fact] public void Should_implement_info() { - _results.ShouldContain("info"); + _results.Should().Contain("info"); } } @@ -77,61 +77,61 @@ public override void Because() [Fact] public void Should_add_source_to_the_option_set() { - _optionSet.Contains("source").ShouldBeTrue(); + _optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - _optionSet.Contains("s").ShouldBeTrue(); + _optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_localonly_to_the_option_set() { - _optionSet.Contains("localonly").ShouldBeTrue(); + _optionSet.Contains("localonly").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_localonly_to_the_option_set() { - _optionSet.Contains("l").ShouldBeTrue(); + _optionSet.Contains("l").Should().BeTrue(); } [Fact] public void Should_add_prerelease_to_the_option_set() { - _optionSet.Contains("prerelease").ShouldBeTrue(); + _optionSet.Contains("prerelease").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_prerelease_to_the_option_set() { - _optionSet.Contains("pre").ShouldBeTrue(); + _optionSet.Contains("pre").Should().BeTrue(); } [Fact] public void Should_add_user_to_the_option_set() { - _optionSet.Contains("user").ShouldBeTrue(); + _optionSet.Contains("user").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_user_to_the_option_set() { - _optionSet.Contains("u").ShouldBeTrue(); + _optionSet.Contains("u").Should().BeTrue(); } [Fact] public void Should_add_password_to_the_option_set() { - _optionSet.Contains("password").ShouldBeTrue(); + _optionSet.Contains("password").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_password_to_the_option_set() { - _optionSet.Contains("p").ShouldBeTrue(); + _optionSet.Contains("p").Should().BeTrue(); } } @@ -165,9 +165,9 @@ public void Show_throw_when_package_id_is_not_set() _error = ex; } - _error.ShouldNotBeNull(); - _error.ShouldBeType(); - _error.Message.ShouldContain("A single package name is required to run the choco info command."); + _error.Should().NotBeNull(); + _error.Should().BeOfType(); + _error.Message.Should().Contain("A single package name is required to run the choco info command."); } [Fact] @@ -185,9 +185,9 @@ public void Should_throw_when_multiple_package_ids_set() _error = ex; } - _error.ShouldNotBeNull(); - _error.ShouldBeType(); - _error.Message.ShouldContain("Only a single package name can be passed to the choco info command."); + _error.Should().NotBeNull(); + _error.Should().BeOfType(); + _error.Message.Should().Contain("Only a single package name can be passed to the choco info command."); } } public class When_handling_additional_argument_parsing : ChocolateyInfoCommandSpecsBase @@ -213,7 +213,7 @@ public override void Because() public void Should_set_unparsed_arguments_to_configuration_input() { _because(); - Configuration.Input.ShouldEqual("pkg1 pkg2"); + Configuration.Input.Should().Be("pkg1 pkg2"); } [Fact] @@ -221,7 +221,7 @@ public void Should_leave_source_as_set() { Configuration.ListCommand.LocalOnly = false; _because(); - Configuration.Sources.ShouldEqual(_source); + Configuration.Sources.Should().Be(_source); } [Fact] @@ -229,7 +229,7 @@ public void Should_set_exact_to_true() { Configuration.ListCommand.Exact = false; _because(); - Configuration.ListCommand.Exact.ShouldBeTrue(); + Configuration.ListCommand.Exact.Should().BeTrue(); } [Fact] @@ -237,7 +237,7 @@ public void Should_set_verbose_to_true() { Configuration.Verbose = false; _because(); - Configuration.Verbose.ShouldBeTrue(); + Configuration.Verbose.Should().BeTrue(); } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInstallCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInstallCommandSpecs.cs index 7a97bbf86d..87658e4b19 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInstallCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyInstallCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyInstallCommandSpecs { @@ -56,7 +56,7 @@ public override void Because() [Fact] public void Should_implement_install() { - results.ShouldContain("install"); + results.Should().Contain("install"); } } @@ -78,181 +78,181 @@ public override void Because() [Fact] public void Should_add_source_to_the_option_set() { - optionSet.Contains("source").ShouldBeTrue(); + optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - optionSet.Contains("s").ShouldBeTrue(); + optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_version_to_the_option_set() { - optionSet.Contains("version").ShouldBeTrue(); + optionSet.Contains("version").Should().BeTrue(); } [Fact] public void Should_allow_insensitive_case_Version_to_the_option_set() { - optionSet.Contains("Version").ShouldBeTrue(); + optionSet.Contains("Version").Should().BeTrue(); } [Fact] public void Should_add_prerelease_to_the_option_set() { - optionSet.Contains("prerelease").ShouldBeTrue(); + optionSet.Contains("prerelease").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_prerelease_to_the_option_set() { - optionSet.Contains("pre").ShouldBeTrue(); + optionSet.Contains("pre").Should().BeTrue(); } [Fact] public void Should_add_installargs_to_the_option_set() { - optionSet.Contains("installarguments").ShouldBeTrue(); + optionSet.Contains("installarguments").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_installargs_to_the_option_set() { - optionSet.Contains("ia").ShouldBeTrue(); + optionSet.Contains("ia").Should().BeTrue(); } [Fact] public void Should_add_overrideargs_to_the_option_set() { - optionSet.Contains("overridearguments").ShouldBeTrue(); + optionSet.Contains("overridearguments").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_overrideargs_to_the_option_set() { - optionSet.Contains("o").ShouldBeTrue(); + optionSet.Contains("o").Should().BeTrue(); } [Fact] public void Should_add_notsilent_to_the_option_set() { - optionSet.Contains("notsilent").ShouldBeTrue(); + optionSet.Contains("notsilent").Should().BeTrue(); } [Fact] public void Should_add_packageparameters_to_the_option_set() { - optionSet.Contains("packageparameters").ShouldBeTrue(); + optionSet.Contains("packageparameters").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_packageparameters_to_the_option_set() { - optionSet.Contains("params").ShouldBeTrue(); + optionSet.Contains("params").Should().BeTrue(); } [Fact] public void Should_add_applyPackageParametersToDependencies_to_the_option_set() { - optionSet.Contains("apply-package-parameters-to-dependencies").ShouldBeTrue(); + optionSet.Contains("apply-package-parameters-to-dependencies").Should().BeTrue(); } [Fact] public void Should_add_applyInstallArgumentsToDependencies_to_the_option_set() { - optionSet.Contains("apply-install-arguments-to-dependencies").ShouldBeTrue(); + optionSet.Contains("apply-install-arguments-to-dependencies").Should().BeTrue(); } [Fact] public void Should_add_ignoredependencies_to_the_option_set() { - optionSet.Contains("ignoredependencies").ShouldBeTrue(); + optionSet.Contains("ignoredependencies").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_ignoredependencies_to_the_option_set() { - optionSet.Contains("i").ShouldBeTrue(); + optionSet.Contains("i").Should().BeTrue(); } [Fact] public void Should_add_forcedependencies_to_the_option_set() { - optionSet.Contains("forcedependencies").ShouldBeTrue(); + optionSet.Contains("forcedependencies").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_forcedependencies_to_the_option_set() { - optionSet.Contains("x").ShouldBeTrue(); + optionSet.Contains("x").Should().BeTrue(); } [Fact] public void Should_add_skippowershell_to_the_option_set() { - optionSet.Contains("skippowershell").ShouldBeTrue(); + optionSet.Contains("skippowershell").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_skippowershell_to_the_option_set() { - optionSet.Contains("n").ShouldBeTrue(); + optionSet.Contains("n").Should().BeTrue(); } [Fact] public void Should_add_user_to_the_option_set() { - optionSet.Contains("user").ShouldBeTrue(); + optionSet.Contains("user").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_user_to_the_option_set() { - optionSet.Contains("u").ShouldBeTrue(); + optionSet.Contains("u").Should().BeTrue(); } [Fact] public void Should_add_password_to_the_option_set() { - optionSet.Contains("password").ShouldBeTrue(); + optionSet.Contains("password").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_password_to_the_option_set() { - optionSet.Contains("p").ShouldBeTrue(); + optionSet.Contains("p").Should().BeTrue(); } [Fact] public void Should_add_pin_to_the_option_set() { - optionSet.Contains("pinpackage").ShouldBeTrue(); + optionSet.Contains("pinpackage").Should().BeTrue(); } [Fact] public void Should_add_long_version_of_pin_to_the_option_set() { - optionSet.Contains("pin-package").ShouldBeTrue(); + optionSet.Contains("pin-package").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_pin_to_the_option_set() { - optionSet.Contains("pin").ShouldBeTrue(); + optionSet.Contains("pin").Should().BeTrue(); } [Fact] public void Should_add_skip_hooks_to_the_option_set() { - optionSet.Contains("skip-hooks").ShouldBeTrue(); + optionSet.Contains("skip-hooks").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_skip_hooks_to_the_option_set() { - optionSet.Contains("skiphooks").ShouldBeTrue(); + optionSet.Contains("skiphooks").Should().BeTrue(); } } @@ -275,7 +275,7 @@ public override void Because() [Fact] public void Should_set_unparsed_arguments_to_the_package_names() { - configuration.PackageNames.ShouldEqual("pkg1;pkg2"); + configuration.PackageNames.Should().Be("pkg1;pkg2"); } } @@ -302,9 +302,9 @@ public void Should_throw_when_packagenames_is_not_set() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyListCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyListCommandSpecs.cs index 8ec8ce9876..4c4a509e63 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyListCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyListCommandSpecs.cs @@ -24,7 +24,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public static class ChocolateyListCommandSpecs { @@ -53,19 +53,19 @@ public override void Because() [Fact] public void Should_implement_list() { - _results.ShouldContain("list"); + _results.Should().Contain("list"); } [Fact] public void Should_not_implement_search() { - _results.ShouldNotContain("search"); + _results.Should().NotContain("search"); } [Fact] public void Should_not_implement_find() { - _results.ShouldNotContain("find"); + _results.Should().NotContain("find"); } public class When_configurating_the_argument_parser : ChocolateyListCommandSpecsBase @@ -91,7 +91,7 @@ public override void Because() [NUnit.Framework.TestCase("i")] public void Should_add_to_option_set(string option) { - _optionSet.Contains(option).ShouldBeTrue(); + _optionSet.Contains(option).Should().BeTrue(); } [NUnit.Framework.TestCase("localonly")] @@ -104,7 +104,7 @@ public void Should_add_to_option_set(string option) [NUnit.Framework.TestCase("a")] public void Should_not_add_to_option_set(string option) { - _optionSet.Contains(option).ShouldBeFalse(); + _optionSet.Contains(option).Should().BeFalse(); } } @@ -154,9 +154,9 @@ public void Should_throw_on_unsupported_argument(string argument) error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); } [Fact] @@ -164,7 +164,7 @@ public void Should_set_unparsed_arguments_to_configuration_input_with_limit_outp { Configuration.RegularOutput = false; _because(); - Configuration.Input.ShouldEqual("pkg1 pkg2"); + Configuration.Input.Should().Be("pkg1 pkg2"); } [NUnit.Framework.TestCase("-l")] @@ -175,8 +175,8 @@ public void Should_output_warning_message_about_unsupported_argument_with_limit_ { Configuration.RegularOutput = false; _because(); - MockLogger.Messages.Keys.ShouldContain("Warn"); - MockLogger.Messages["Warn"].ShouldContain("Ignoring the argument {0}. This argument is unsupported for locally installed packages.".FormatWith(argument)); + MockLogger.Messages.Keys.Should().Contain("Warn"); + MockLogger.Messages["Warn"].Should().Contain("Ignoring the argument {0}. This argument is unsupported for locally installed packages.".FormatWith(argument)); } [NUnit.Framework.TestCase("-li")] @@ -185,9 +185,9 @@ public void Should_output_warning_message_about_unsupported_argument_and_set_inc { Configuration.RegularOutput = false; _because(); - MockLogger.Messages.Keys.ShouldContain("Warn"); - MockLogger.Messages["Warn"].ShouldContain("Ignoring the argument {0}. This argument is unsupported for locally installed packages.".FormatWith(argument)); - Configuration.ListCommand.IncludeRegistryPrograms.ShouldBeTrue(); + MockLogger.Messages.Keys.Should().Contain("Warn"); + MockLogger.Messages["Warn"].Should().Contain("Ignoring the argument {0}. This argument is unsupported for locally installed packages.".FormatWith(argument)); + Configuration.ListCommand.IncludeRegistryPrograms.Should().BeTrue(); } } @@ -214,7 +214,7 @@ public void Should_call_service_list_noop() [Fact] public void Should_not_report_any_warning_messages() { - MockLogger.Messages.Keys.ShouldNotContain("Warn"); + MockLogger.Messages.Keys.Should().NotContain("Warn"); } } @@ -240,7 +240,7 @@ public void Should_call_service_list_run() [Fact] public void Should_not_report_any_warning_messages() { - MockLogger.Messages.Keys.ShouldNotContain("Warn"); + MockLogger.Messages.Keys.Should().NotContain("Warn"); } } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyNewCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyNewCommandSpecs.cs index 371236f196..1a9528eeb4 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyNewCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyNewCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.templates; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyNewCommandSpecs { @@ -55,7 +55,7 @@ public override void Because() [Fact] public void Should_implement_new() { - results.ShouldContain("new"); + results.Should().Contain("new"); } } @@ -77,37 +77,37 @@ public override void Because() [Fact] public void Should_add_automaticpackage_to_the_option_set() { - optionSet.Contains("automaticpackage").ShouldBeTrue(); + optionSet.Contains("automaticpackage").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_automaticpackage_to_the_option_set() { - optionSet.Contains("a").ShouldBeTrue(); + optionSet.Contains("a").Should().BeTrue(); } [Fact] public void Should_add_name_to_the_option_set() { - optionSet.Contains("name").ShouldBeTrue(); + optionSet.Contains("name").Should().BeTrue(); } [Fact] public void Should_add_version_to_the_option_set() { - optionSet.Contains("version").ShouldBeTrue(); + optionSet.Contains("version").Should().BeTrue(); } [Fact] public void Should_add_maintainer_to_the_option_set() { - optionSet.Contains("maintainer").ShouldBeTrue(); + optionSet.Contains("maintainer").Should().BeTrue(); } [Fact] public void Should_add_outputdirectory_to_the_option_set() { - optionSet.Contains("outputdirectory").ShouldBeTrue(); + optionSet.Contains("outputdirectory").Should().BeTrue(); } } @@ -133,7 +133,7 @@ public void Should_not_set_template_properties_if_none_have_been_defined() { reset(); because(); - configuration.NewCommand.TemplateProperties.Count.ShouldEqual(0); + configuration.NewCommand.TemplateProperties.Should().HaveCount(0); } [Fact] @@ -144,10 +144,10 @@ public void Should_set_template_properties_when_args_are_separated_by_equals() because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("new"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("new"); } [Fact] @@ -159,10 +159,10 @@ public void Should_set_template_properties_only_once() because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("one"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("one"); } [Fact] @@ -174,10 +174,10 @@ public void Should_ignore_casing_differences_when_setting_template_properties() because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("one"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("one"); } [Fact] @@ -190,10 +190,10 @@ public void Should_not_set_template_properties_when_args_are_not_separated_by_eq because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("PackageName"); - templateProperty.Value.ShouldEqual("bill"); + templateProperty.Key.Should().Be("PackageName"); + templateProperty.Value.Should().Be("bill"); } [Fact] @@ -206,10 +206,10 @@ public void Should_not_set_override_configuration_Name_when_unparsed_without_equ because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("PackageName"); - templateProperty.Value.ShouldEqual("bill"); + templateProperty.Key.Should().Be("PackageName"); + templateProperty.Value.Should().Be("bill"); } [Fact] @@ -223,8 +223,8 @@ public void Should_not_set_override_configuration_Name_when_package_name_is_also var properties = configuration.NewCommand.TemplateProperties; var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("PackageName"); - templateProperty.Value.ShouldEqual("bill"); + templateProperty.Key.Should().Be("PackageName"); + templateProperty.Value.Should().Be("bill"); } [Fact] @@ -235,10 +235,10 @@ public void Should_set_template_properties_when_args_are_separated_by_equals_wit because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("new"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("new"); } [Fact] @@ -249,10 +249,10 @@ public void Should_set_template_properties_without_surrounding_quotes() because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("new this"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("new this"); } [Fact] @@ -263,10 +263,10 @@ public void Should_set_template_properties_without_removing_quote() because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("new \"this"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("new \"this"); } [Fact] @@ -277,10 +277,10 @@ public void Should_set_template_properties_without_surrounding_apostrophes() because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("new this"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("new this"); } [Fact] @@ -291,10 +291,10 @@ public void Should_set_template_properties_without_removing_apostrophe() because(); var properties = configuration.NewCommand.TemplateProperties; - properties.Count.ShouldEqual(1); + properties.Should().HaveCount(1); var templateProperty = properties.FirstOrDefault(); - templateProperty.Key.ShouldEqual("bob"); - templateProperty.Value.ShouldEqual("new 'this"); + templateProperty.Key.Should().Be("bob"); + templateProperty.Value.Should().Be("new 'this"); } } @@ -321,9 +321,9 @@ public void Should_throw_when_Name_is_not_set() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); } [Fact] @@ -381,38 +381,38 @@ public override void Because() [Fact] public void Should_name_equal_to_Bob() { - configuration.NewCommand.Name.ShouldEqual("Bob"); - configuration.NewCommand.TemplateProperties[TemplateValues.NamePropertyName].ShouldEqual("Bob"); + configuration.NewCommand.Name.Should().Be("Bob"); + configuration.NewCommand.TemplateProperties[TemplateValues.NamePropertyName].Should().Be("Bob"); } [Fact] public void Should_automaticpackage_equal_to_true() { - configuration.NewCommand.AutomaticPackage.ShouldBeTrue(); + configuration.NewCommand.AutomaticPackage.Should().BeTrue(); } [Fact] public void Should_templatename_equal_to_custom() { - configuration.NewCommand.TemplateName.ShouldEqual("custom"); + configuration.NewCommand.TemplateName.Should().Be("custom"); } [Fact] public void Should_version_equal_to_42() { - configuration.NewCommand.TemplateProperties[TemplateValues.VersionPropertyName].ShouldEqual("0.42.0"); + configuration.NewCommand.TemplateProperties[TemplateValues.VersionPropertyName].Should().Be("0.42.0"); } [Fact] public void Should_maintainer_equal_to_Loyd() { - configuration.NewCommand.TemplateProperties[TemplateValues.MaintainerPropertyName].ShouldEqual("Loyd"); + configuration.NewCommand.TemplateProperties[TemplateValues.MaintainerPropertyName].Should().Be("Loyd"); } [Fact] public void Should_outputdirectory_equal_packages() { - configuration.OutputDirectory.ShouldEqual("c:\\packages"); + configuration.OutputDirectory.Should().Be("c:\\packages"); } } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyOutdatedCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyOutdatedCommandSpecs.cs index a626cdc3d7..a697d50765 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyOutdatedCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyOutdatedCommandSpecs.cs @@ -24,7 +24,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyOutdatedCommandSpecs { @@ -54,7 +54,7 @@ public override void Because() [Fact] public void Should_implement_outdated() { - results.ShouldContain("outdated"); + results.Should().Contain("outdated"); } } @@ -76,43 +76,43 @@ public override void Because() [Fact] public void Should_add_source_to_the_option_set() { - optionSet.Contains("source").ShouldBeTrue(); + optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - optionSet.Contains("s").ShouldBeTrue(); + optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_user_to_the_option_set() { - optionSet.Contains("user").ShouldBeTrue(); + optionSet.Contains("user").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_user_to_the_option_set() { - optionSet.Contains("u").ShouldBeTrue(); + optionSet.Contains("u").Should().BeTrue(); } [Fact] public void Should_add_password_to_the_option_set() { - optionSet.Contains("password").ShouldBeTrue(); + optionSet.Contains("password").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_password_to_the_option_set() { - optionSet.Contains("p").ShouldBeTrue(); + optionSet.Contains("p").Should().BeTrue(); } [Fact] public void Should_add_ignore_pinned_to_the_option_set() { - optionSet.Contains("ignore-pinned").ShouldBeTrue(); + optionSet.Contains("ignore-pinned").Should().BeTrue(); } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPackCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPackCommandSpecs.cs index c99c89ae93..9ff9939e94 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPackCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPackCommandSpecs.cs @@ -24,7 +24,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; using System; public class ChocolateyPackCommandSpecs @@ -54,7 +54,7 @@ public override void Because() [Fact] public void Should_implement_pack() { - results.ShouldContain("pack"); + results.Should().Contain("pack"); } } @@ -76,13 +76,13 @@ public override void Because() [Fact] public void Should_add_version_to_the_option_set() { - optionSet.Contains("version").ShouldBeTrue(); + optionSet.Contains("version").Should().BeTrue(); } [Fact] public void Should_add_outputdirectory_to_the_option_set() { - optionSet.Contains("outputdirectory").ShouldBeTrue(); + optionSet.Contains("outputdirectory").Should().BeTrue(); } } @@ -110,27 +110,27 @@ public override void Because() [Fact] public void Should_allow_a_path_to_the_nuspec_to_be_passed_in() { - configuration.Input.ShouldEqual(nuspecPath); + configuration.Input.Should().Be(nuspecPath); } [Fact] public void Should_property_foo_equal_1() { - configuration.PackCommand.Properties["foo"].ShouldEqual("1"); + configuration.PackCommand.Properties["foo"].Should().Be("1"); } [Fact] public void Should_property_bar_equal_baz() { - configuration.PackCommand.Properties["bar"].ShouldEqual("baz"); + configuration.PackCommand.Properties["bar"].Should().Be("baz"); } [Fact] public void Should_log_warning_on_duplicate_foo() { var warnings = MockLogger.MessagesFor(LogLevel.Warn); - warnings.Count.ShouldEqual(1); - warnings[0].ShouldEqual("A value for 'foo' has already been added with the value '1'. Ignoring foo='2'.", StringComparer.OrdinalIgnoreCase); + warnings.Should().HaveCount(1); + warnings[0].Should().BeEquivalentTo("A value for 'foo' has already been added with the value '1'. Ignoring foo='2'."); } } @@ -181,13 +181,13 @@ public override void Because() [Fact] public void Should_version_equal_to_42() { - configuration.Version.ShouldEqual("0.42.0"); + configuration.Version.Should().Be("0.42.0"); } [Fact] public void Should_outputdirectory_equal_packages() { - configuration.OutputDirectory.ShouldEqual("c:\\packages"); + configuration.OutputDirectory.Should().Be("c:\\packages"); } } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPinCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPinCommandSpecs.cs index 79ddbf0af4..36b71c6c40 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPinCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPinCommandSpecs.cs @@ -34,7 +34,7 @@ namespace chocolatey.tests.infrastructure.app.commands using NUnit.Framework; - using Should; + using FluentAssertions; public class ChocolateyPinCommandSpecs { @@ -48,6 +48,8 @@ public abstract class ChocolateyPinCommandSpecsBase : TinySpec protected ChocolateyConfiguration configuration = new ChocolateyConfiguration(); protected Mock package = new Mock(); protected Mock pinnedPackage = new Mock(); + protected Mock mingwPackage = new Mock(); + protected Mock gstreamerMingwPackage = new Mock(); public override void Context() { @@ -72,6 +74,23 @@ public override void Context() { IsPinned = true }); + + mingwPackage = new Mock(); + mingwPackage.Setup(p => p.Id).Returns("mingw"); + mingwPackage.Setup(p => p.Version).Returns(new NuGetVersion("1.0.0")); + packageInfoService.Setup(s => s.Get(mingwPackage.Object)).Returns( + new ChocolateyPackageInformation(mingwPackage.Object) + { + IsPinned = true + }); + gstreamerMingwPackage = new Mock(); + gstreamerMingwPackage.Setup(p => p.Id).Returns("gstreamer-mingw"); + gstreamerMingwPackage.Setup(p => p.Version).Returns(new NuGetVersion("1.0.0")); + packageInfoService.Setup(s => s.Get(gstreamerMingwPackage.Object)).Returns( + new ChocolateyPackageInformation(gstreamerMingwPackage.Object) + { + IsPinned = true + }); } public void Reset() @@ -93,7 +112,7 @@ public override void Because() [Fact] public void Should_implement_source() { - results.ShouldContain("pin"); + results.Should().Contain("pin"); } } @@ -115,19 +134,19 @@ public override void Because() [Fact] public void Should_add_name_to_the_option_set() { - optionSet.Contains("name").ShouldBeTrue(); + optionSet.Contains("name").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_name_to_the_option_set() { - optionSet.Contains("n").ShouldBeTrue(); + optionSet.Contains("n").Should().BeTrue(); } [Fact] public void Should_add_version_to_the_option_set() { - optionSet.Contains("version").ShouldBeTrue(); + optionSet.Contains("version").Should().BeTrue(); } } @@ -154,7 +173,7 @@ public void Should_use_the_first_unparsed_arg_as_the_subcommand() unparsedArgs.Add("list"); because(); - configuration.PinCommand.Command.ShouldEqual(PinCommandType.List); + configuration.PinCommand.Command.Should().Be(PinCommandType.List); } [Fact] @@ -176,10 +195,10 @@ public void Should_throw_when_more_than_one_unparsed_arg_is_passed() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain("A single pin command must be listed"); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain("A single pin command must be listed"); } [Fact] @@ -189,7 +208,7 @@ public void Should_accept_add_as_the_subcommand() unparsedArgs.Add("add"); because(); - configuration.PinCommand.Command.ShouldEqual(PinCommandType.Add); + configuration.PinCommand.Command.Should().Be(PinCommandType.Add); } [Fact] @@ -199,7 +218,7 @@ public void Should_accept_uppercase_add_as_the_subcommand() unparsedArgs.Add("ADD"); because(); - configuration.PinCommand.Command.ShouldEqual(PinCommandType.Add); + configuration.PinCommand.Command.Should().Be(PinCommandType.Add); } [Fact] @@ -209,7 +228,7 @@ public void Should_remove_add_as_the_subcommand() unparsedArgs.Add("remove"); because(); - configuration.PinCommand.Command.ShouldEqual(PinCommandType.Remove); + configuration.PinCommand.Command.Should().Be(PinCommandType.Remove); } [Fact] @@ -219,7 +238,7 @@ public void Should_set_unrecognized_values_to_list_as_the_subcommand() unparsedArgs.Add("wtf"); because(); - configuration.PinCommand.Command.ShouldEqual(PinCommandType.List); + configuration.PinCommand.Command.Should().Be(PinCommandType.List); } [Fact] @@ -228,7 +247,7 @@ public void Should_default_to_list_as_the_subcommand() Reset(); because(); - configuration.PinCommand.Command.ShouldEqual(PinCommandType.List); + configuration.PinCommand.Command.Should().Be(PinCommandType.List); } [Fact] @@ -238,7 +257,7 @@ public void Should_handle_passing_in_an_empty_string() unparsedArgs.Add(" "); because(); - configuration.PinCommand.Command.ShouldEqual(PinCommandType.List); + configuration.PinCommand.Command.Should().Be(PinCommandType.List); } [Fact] @@ -247,7 +266,7 @@ public void Should_set_config_sources_to_local_only() Reset(); because(); - configuration.Sources.ShouldEqual(ApplicationParameters.PackagesLocation); + configuration.Sources.Should().Be(ApplicationParameters.PackagesLocation); } [Fact] @@ -256,7 +275,7 @@ public void Should_set_config_local_only_to_true() Reset(); because(); - configuration.ListCommand.LocalOnly.ShouldBeTrue(); + configuration.ListCommand.LocalOnly.Should().BeTrue(); } [Fact] @@ -265,7 +284,7 @@ public void Should_set_config_all_versions_to_true() Reset(); because(); - configuration.AllVersions.ShouldBeTrue(); + configuration.AllVersions.Should().BeTrue(); } } @@ -296,10 +315,10 @@ public void Should_throw_when_command_is_not_list_and_name_is_not_set() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldEqual("When specifying the subcommand '{0}', you must also specify --name.".FormatWith(configuration.PinCommand.Command.ToStringSafe().ToLower())); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Be("When specifying the subcommand '{0}', you must also specify --name.".FormatWith(configuration.PinCommand.Command.ToStringSafe().ToLower())); } [Fact] @@ -336,9 +355,9 @@ public void Should_log_a_message() public void Should_log_the_message_we_expect() { var messages = MockLogger.MessagesFor(tests.LogLevel.Info); - messages.ShouldNotBeEmpty(); - messages.Count.ShouldEqual(1); - messages[0].ShouldContain("Pin would have called"); + messages.Should().NotBeEmpty() + .And.ContainSingle(); + messages[0].Should().Contain("Pin would have called"); } } @@ -385,7 +404,7 @@ public void Should_log_a_message() [Fact] public void Should_log_one_message() { - MockLogger.Messages.Count.ShouldEqual(1); + MockLogger.Messages.Should().ContainSingle(); } } @@ -461,5 +480,62 @@ public void Should_remove_pin_when_command_is_remove() } } + public class When_run_is_called_with_similarly_named_package_installed : ChocolateyPinCommandSpecsBase + { + public override void Context() + { + base.Context(); + configuration.Sources = ApplicationParameters.PackagesLocation; + configuration.ListCommand.LocalOnly = true; + configuration.AllVersions = true; + + var packageResults = new[] + { + new PackageResult(mingwPackage.Object, null), + new PackageResult(gstreamerMingwPackage.Object, null) + }; + nugetService.Setup(n => n.List(It.IsAny())).Returns(packageResults); + } + + public new void Reset() + { + Context(); + base.Reset(); + } + + public override void AfterEachSpec() + { + base.AfterEachSpec(); + MockLogger.Messages.Clear(); + } + + public override void Because() + { + } + + [Fact] + public void Should_call_nuget_service_list_run_when_command_is_list() + { + Reset(); + configuration.PinCommand.Command = PinCommandType.List; + command.Run(configuration); + + nugetService.Verify(n => n.List(It.IsAny()), Times.Once); + } + + [Fact] + public void Should_remove_pin_from_correct_package() + { + Reset(); + configuration.PinCommand.Name = "mingw"; + configuration.PinCommand.Command = PinCommandType.Remove; + + command.SetPin(configuration); + + packageInfoService.Verify(s => + s.Save(It.Is(n => + n.Package.Id.Equals("mingw"))), Times.Once); + } + } } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPushCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPushCommandSpecs.cs index 2bcd61bc69..10f40e2036 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPushCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyPushCommandSpecs.cs @@ -27,7 +27,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.commandline; using Moq; using NUnit.Framework; - using Should; + using FluentAssertions; public class ChocolateyPushCommandSpecs { @@ -58,7 +58,7 @@ public override void Because() [Fact] public void Should_implement_push() { - _results.ShouldContain("push"); + _results.Should().Contain("push"); } } @@ -81,37 +81,37 @@ public override void Because() [Fact] public void Should_clear_previously_set_Source() { - Configuration.Sources.ShouldBeNull(); + Configuration.Sources.Should().BeNull(); } [Fact] public void Should_add_source_to_the_option_set() { - _optionSet.Contains("source").ShouldBeTrue(); + _optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - _optionSet.Contains("s").ShouldBeTrue(); + _optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_apikey_to_the_option_set() { - _optionSet.Contains("apikey").ShouldBeTrue(); + _optionSet.Contains("apikey").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_apikey_to_the_option_set() { - _optionSet.Contains("k").ShouldBeTrue(); + _optionSet.Contains("k").Should().BeTrue(); } [Fact] public void Should_not_add_short_version_of_timeout_to_the_option_set() { - _optionSet.Contains("t").ShouldBeFalse(); + _optionSet.Contains("t").Should().BeFalse(); } } @@ -138,7 +138,7 @@ public void Should_allow_a_path_to_the_nupkg_to_be_passed_in() string nupkgPath = "./some/path/to.nupkg"; _unparsedArgs.Add(nupkgPath); _because(); - Configuration.Input.ShouldEqual(nupkgPath); + Configuration.Input.Should().Be(nupkgPath); } } @@ -160,7 +160,7 @@ public void Should_not_override_explicit_source_if_defaultpushsource_is_set() Configuration.PushCommand.DefaultSource = "https://localhost/default/source"; _because(); - Configuration.Sources.ShouldEqual("https://localhost/somewhere/out/there"); + Configuration.Sources.Should().Be("https://localhost/somewhere/out/there"); } @@ -174,7 +174,7 @@ public void Should_set_the_source_to_defaultpushsource_if_set_and_no_explicit_so _because(); - Configuration.Sources.ShouldEqual("https://localhost/default/source"); + Configuration.Sources.Should().Be("https://localhost/default/source"); } [Fact] @@ -196,10 +196,10 @@ public void Should_throw_when_defaultpushsource_is_not_set_and_no_explicit_sourc error = ex; } - errorred.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain("Default push source configuration is not set."); + errorred.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain("Default push source configuration is not set."); } [Fact] @@ -231,10 +231,10 @@ public void Should_throw_if_apikey_is_not_found_for_source() error = ex; } - errorred.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain($"An API key was not found for '{Configuration.Sources}'"); + errorred.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain($"An API key was not found for '{Configuration.Sources}'"); } [Fact] @@ -245,7 +245,7 @@ public void Should_not_try_to_determine_the_key_if_passed_in_as_an_argument() Configuration.Sources = "https://localhost/somewhere/out/there"; _because(); - Configuration.PushCommand.Key.ShouldEqual(_apiKey); + Configuration.PushCommand.Key.Should().Be(_apiKey); ConfigSettingsService.Verify(c => c.GetApiKey(It.IsAny(), It.IsAny>()), Times.Never); } @@ -292,7 +292,7 @@ public void Should_update_source_if_alias_is_passed() }; _because(); - Configuration.Sources.ShouldEqual("https://localhost/somewhere/out/there"); + Configuration.Sources.Should().Be("https://localhost/somewhere/out/there"); } [Fact] @@ -311,7 +311,7 @@ public void Should_update_source_if_alias_is_passed_via_defaultpushsource() }; _because(); - Configuration.Sources.ShouldEqual("https://localhost/somewhere/out/there"); + Configuration.Sources.Should().Be("https://localhost/somewhere/out/there"); } [Fact] @@ -332,10 +332,10 @@ public void Should_throw_when_apiKey_has_not_been_set_or_determined_for_a_https_ error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain("API key was not found"); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain("API key was not found"); } [Fact] @@ -381,10 +381,10 @@ public void Should_throw_when_source_is_http_and_not_secure() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain("WARNING! The specified source '{0}' is not secure".FormatWith(Configuration.Sources)); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain("WARNING! The specified source '{0}' is not secure".FormatWith(Configuration.Sources)); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateySearchCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateySearchCommandSpecs.cs index a9d3c460cc..b3a128ff1a 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateySearchCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateySearchCommandSpecs.cs @@ -25,7 +25,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateySearchCommandSpecs { @@ -55,19 +55,19 @@ public override void Because() [Fact] public void Should_not_implement_list() { - results.ShouldNotContain("list"); + results.Should().NotContain("list"); } [Fact] public void Should_implement_search() { - results.ShouldContain("search"); + results.Should().Contain("search"); } [Fact] public void Should_implement_find() { - results.ShouldContain("find"); + results.Should().Contain("find"); } } @@ -90,73 +90,73 @@ public override void Because() [Fact] public void Should_add_source_to_the_option_set() { - optionSet.Contains("source").ShouldBeTrue(); + optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - optionSet.Contains("s").ShouldBeTrue(); + optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_prerelease_to_the_option_set() { - optionSet.Contains("prerelease").ShouldBeTrue(); + optionSet.Contains("prerelease").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_prerelease_to_the_option_set() { - optionSet.Contains("pre").ShouldBeTrue(); + optionSet.Contains("pre").Should().BeTrue(); } [Fact] public void Should_add_includeprograms_to_the_option_set() { - optionSet.Contains("includeprograms").ShouldBeTrue(); + optionSet.Contains("includeprograms").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_includeprograms_to_the_option_set() { - optionSet.Contains("i").ShouldBeTrue(); + optionSet.Contains("i").Should().BeTrue(); } [Fact] public void Should_add_allversions_to_the_option_set() { - optionSet.Contains("allversions").ShouldBeTrue(); + optionSet.Contains("allversions").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_allversions_to_the_option_set() { - optionSet.Contains("a").ShouldBeTrue(); + optionSet.Contains("a").Should().BeTrue(); } [Fact] public void Should_add_user_to_the_option_set() { - optionSet.Contains("user").ShouldBeTrue(); + optionSet.Contains("user").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_user_to_the_option_set() { - optionSet.Contains("u").ShouldBeTrue(); + optionSet.Contains("u").Should().BeTrue(); } [Fact] public void Should_add_password_to_the_option_set() { - optionSet.Contains("password").ShouldBeTrue(); + optionSet.Contains("password").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_password_to_the_option_set() { - optionSet.Contains("p").ShouldBeTrue(); + optionSet.Contains("p").Should().BeTrue(); } } @@ -185,73 +185,73 @@ public override void Because() [Fact] public void Should_add_source_to_the_option_set() { - optionSet.Contains("source").ShouldBeTrue(); + optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - optionSet.Contains("s").ShouldBeTrue(); + optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_prerelease_to_the_option_set() { - optionSet.Contains("prerelease").ShouldBeTrue(); + optionSet.Contains("prerelease").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_prerelease_to_the_option_set() { - optionSet.Contains("pre").ShouldBeTrue(); + optionSet.Contains("pre").Should().BeTrue(); } [Fact] public void Should_add_includeprograms_to_the_option_set() { - optionSet.Contains("includeprograms").ShouldBeTrue(); + optionSet.Contains("includeprograms").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_includeprograms_to_the_option_set() { - optionSet.Contains("i").ShouldBeTrue(); + optionSet.Contains("i").Should().BeTrue(); } [Fact] public void Should_add_allversions_to_the_option_set() { - optionSet.Contains("allversions").ShouldBeTrue(); + optionSet.Contains("allversions").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_allversions_to_the_option_set() { - optionSet.Contains("a").ShouldBeTrue(); + optionSet.Contains("a").Should().BeTrue(); } [Fact] public void Should_add_user_to_the_option_set() { - optionSet.Contains("user").ShouldBeTrue(); + optionSet.Contains("user").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_user_to_the_option_set() { - optionSet.Contains("u").ShouldBeTrue(); + optionSet.Contains("u").Should().BeTrue(); } [Fact] public void Should_add_password_to_the_option_set() { - optionSet.Contains("password").ShouldBeTrue(); + optionSet.Contains("password").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_password_to_the_option_set() { - optionSet.Contains("p").ShouldBeTrue(); + optionSet.Contains("p").Should().BeTrue(); } } @@ -278,7 +278,7 @@ public override void Because() public void Should_set_unparsed_arguments_to_configuration_input() { because(); - configuration.Input.ShouldEqual("pkg1 pkg2"); + configuration.Input.Should().Be("pkg1 pkg2"); } [Fact] @@ -286,7 +286,7 @@ public void Should_leave_source_as_set() { configuration.ListCommand.LocalOnly = false; because(); - configuration.Sources.ShouldEqual(source); + configuration.Sources.Should().Be(source); } } @@ -326,7 +326,7 @@ public void Should_call_service_list_noop() [Fact] public void Should_not_report_any_warning_messages() { - MockLogger.Messages.Keys.ShouldNotContain("Warn"); + MockLogger.Messages.Keys.Should().NotContain("Warn"); } } @@ -366,7 +366,7 @@ public void Should_call_service_list_run() [Fact] public void Should_not_report_any_warning_messages() { - MockLogger.Messages.Keys.ShouldNotContain("Warn"); + MockLogger.Messages.Keys.Should().NotContain("Warn"); } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateySourceCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateySourceCommandSpecs.cs index 44736474a6..0d529512f2 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateySourceCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateySourceCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateySourceCommandSpecs { @@ -56,13 +56,13 @@ public override void Because() [Fact] public void Should_implement_source() { - results.ShouldContain("source"); + results.Should().Contain("source"); } [Fact] public void Should_implement_sources() { - results.ShouldContain("sources"); + results.Should().Contain("sources"); } } @@ -85,55 +85,55 @@ public override void Because() [Fact] public void Should_clear_previously_set_Source() { - configuration.Sources.ShouldBeEmpty(); + configuration.Sources.Should().BeEmpty(); } [Fact] public void Should_add_name_to_the_option_set() { - optionSet.Contains("name").ShouldBeTrue(); + optionSet.Contains("name").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_name_to_the_option_set() { - optionSet.Contains("n").ShouldBeTrue(); + optionSet.Contains("n").Should().BeTrue(); } [Fact] public void Should_add_source_to_the_option_set() { - optionSet.Contains("source").ShouldBeTrue(); + optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - optionSet.Contains("s").ShouldBeTrue(); + optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_user_to_the_option_set() { - optionSet.Contains("user").ShouldBeTrue(); + optionSet.Contains("user").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_user_to_the_option_set() { - optionSet.Contains("u").ShouldBeTrue(); + optionSet.Contains("u").Should().BeTrue(); } [Fact] public void Should_add_password_to_the_option_set() { - optionSet.Contains("password").ShouldBeTrue(); + optionSet.Contains("password").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_password_to_the_option_set() { - optionSet.Contains("p").ShouldBeTrue(); + optionSet.Contains("p").Should().BeTrue(); } } @@ -160,7 +160,7 @@ public void Should_use_the_first_unparsed_arg_as_the_subcommand() unparsedArgs.Add("list"); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.List); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.List); } [Fact] @@ -182,10 +182,10 @@ public void Should_throw_when_more_than_one_unparsed_arg_is_passed() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain("A single sources command must be listed"); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain("A single sources command must be listed"); } [Fact] @@ -195,7 +195,7 @@ public void Should_accept_add_as_the_subcommand() unparsedArgs.Add("add"); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.Add); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.Add); } [Fact] @@ -205,7 +205,7 @@ public void Should_accept_uppercase_add_as_the_subcommand() unparsedArgs.Add("ADD"); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.Add); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.Add); } [Fact] @@ -215,7 +215,7 @@ public void Should_remove_add_as_the_subcommand() unparsedArgs.Add("remove"); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.Remove); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.Remove); } [Fact] @@ -225,7 +225,7 @@ public void Should_accept_enable_as_the_subcommand() unparsedArgs.Add("enable"); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.Enable); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.Enable); } [Fact] @@ -235,7 +235,7 @@ public void Should_accept_disable_as_the_subcommand() unparsedArgs.Add("disable"); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.Disable); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.Disable); } [Fact] @@ -245,7 +245,7 @@ public void Should_set_unrecognized_values_to_list_as_the_subcommand() unparsedArgs.Add("wtf"); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.List); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.List); } [Fact] @@ -254,7 +254,7 @@ public void Should_default_to_list_as_the_subcommand() Reset(); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.List); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.List); } [Fact] @@ -264,7 +264,7 @@ public void Should_handle_passing_in_an_empty_string() unparsedArgs.Add(" "); because(); - configuration.SourceCommand.Command.ShouldEqual(SourceCommandType.List); + configuration.SourceCommand.Command.Should().Be(SourceCommandType.List); } } @@ -311,11 +311,11 @@ private void VerifyExceptionThrownOnCommand(string expectedMessage) error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); var commandName = configuration.SourceCommand.Command.ToStringSafe().ToLower(); - error.Message.ShouldEqual(expectedMessage.FormatWith(commandName)); + error.Message.Should().Be(expectedMessage.FormatWith(commandName)); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyTemplateCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyTemplateCommandSpecs.cs index 73bd64e103..240e14af9d 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyTemplateCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyTemplateCommandSpecs.cs @@ -27,7 +27,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.commandline; using chocolatey.infrastructure.filesystem; using Moq; - using Should; + using FluentAssertions; public class ChocolateyTemplateCommandSpecs { @@ -61,8 +61,8 @@ public override void Because() [Fact] public void Should_implement_help() { - results.ShouldContain("template"); - results.ShouldContain("templates"); + results.Should().Contain("template"); + results.Should().Contain("templates"); } } @@ -84,13 +84,13 @@ public override void Because() [Fact] public void Should_add_name_to_the_option_set() { - optionSet.Contains("name").ShouldBeTrue(); + optionSet.Contains("name").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_name_to_the_option_set() { - optionSet.Contains("n").ShouldBeTrue(); + optionSet.Contains("n").Should().BeTrue(); } } @@ -120,7 +120,7 @@ public void Should_use_the_first_unparsed_arg_as_the_subcommand() unparsedArgs.Add("list"); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.List); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.List); } [Fact] @@ -142,10 +142,10 @@ public void Should_throw_when_more_than_one_unparsed_arg_is_passed() error = ex; } - errorred.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldContain("A single template command must be listed"); + errorred.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Contain("A single template command must be listed"); } [Fact] @@ -155,7 +155,7 @@ public void Should_accept_list_as_the_subcommand() unparsedArgs.Add("list"); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.List); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.List); } [Fact] @@ -165,7 +165,7 @@ public void Should_accept_uppercase_list_as_the_subcommand() unparsedArgs.Add("LIST"); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.List); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.List); } [Fact] @@ -175,7 +175,7 @@ public void Should_accept_info_as_the_subcommand() unparsedArgs.Add("info"); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.Info); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.Info); } [Fact] @@ -185,7 +185,7 @@ public void Should_accept_uppercase_info_as_the_subcommand() unparsedArgs.Add("INFO"); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.Info); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.Info); } [Fact] @@ -195,7 +195,7 @@ public void Should_set_unrecognized_values_to_list_as_the_subcommand() unparsedArgs.Add("badcommand"); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.List); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.List); } [Fact] @@ -204,7 +204,7 @@ public void Should_default_to_list_as_the_subcommand() Reset(); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.List); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.List); } [Fact] @@ -214,7 +214,7 @@ public void Should_handle_passing_in_an_empty_string() unparsedArgs.Add(" "); because(); - configuration.TemplateCommand.Command.ShouldEqual(TemplateCommandType.List); + configuration.TemplateCommand.Command.Should().Be(TemplateCommandType.List); } } @@ -261,10 +261,10 @@ public void Should_throw_when_command_is_info_and_name_is_not_set() error = ex; } - errorred.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); - error.Message.ShouldEqual("When specifying the subcommand '{0}', you must also specify --name.".FormatWith(configuration.TemplateCommand.Command.ToStringSafe().ToLower())); + errorred.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); + error.Message.Should().Be("When specifying the subcommand '{0}', you must also specify --name.".FormatWith(configuration.TemplateCommand.Command.ToStringSafe().ToLower())); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUninstallCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUninstallCommandSpecs.cs index 8a71d288a1..2d89880587 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUninstallCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUninstallCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyUninstallCommandSpecs { @@ -56,7 +56,7 @@ public override void Because() [Fact] public void Should_implement_uninstall() { - results.ShouldContain("uninstall"); + results.Should().Contain("uninstall"); } } @@ -78,109 +78,109 @@ public override void Because() [Fact] public void Should_add_version_to_the_option_set() { - optionSet.Contains("version").ShouldBeTrue(); + optionSet.Contains("version").Should().BeTrue(); } [Fact] public void Should_add_allversions_to_the_option_set() { - optionSet.Contains("allversions").ShouldBeTrue(); + optionSet.Contains("allversions").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_allversions_to_the_option_set() { - optionSet.Contains("a").ShouldBeTrue(); + optionSet.Contains("a").Should().BeTrue(); } [Fact] public void Should_add_uninstallargs_to_the_option_set() { - optionSet.Contains("uninstallarguments").ShouldBeTrue(); + optionSet.Contains("uninstallarguments").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_uninstallargs_to_the_option_set() { - optionSet.Contains("ua").ShouldBeTrue(); + optionSet.Contains("ua").Should().BeTrue(); } [Fact] public void Should_add_overrideargs_to_the_option_set() { - optionSet.Contains("overridearguments").ShouldBeTrue(); + optionSet.Contains("overridearguments").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_overrideargs_to_the_option_set() { - optionSet.Contains("o").ShouldBeTrue(); + optionSet.Contains("o").Should().BeTrue(); } [Fact] public void Should_add_notsilent_to_the_option_set() { - optionSet.Contains("notsilent").ShouldBeTrue(); + optionSet.Contains("notsilent").Should().BeTrue(); } [Fact] public void Should_add_packageparameters_to_the_option_set() { - optionSet.Contains("packageparameters").ShouldBeTrue(); + optionSet.Contains("packageparameters").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_packageparameters_to_the_option_set() { - optionSet.Contains("params").ShouldBeTrue(); + optionSet.Contains("params").Should().BeTrue(); } [Fact] public void Should_add_applyPackageParametersToDependencies_to_the_option_set() { - optionSet.Contains("apply-package-parameters-to-dependencies").ShouldBeTrue(); + optionSet.Contains("apply-package-parameters-to-dependencies").Should().BeTrue(); } [Fact] public void Should_add_applyInstallArgumentsToDependencies_to_the_option_set() { - optionSet.Contains("apply-install-arguments-to-dependencies").ShouldBeTrue(); + optionSet.Contains("apply-install-arguments-to-dependencies").Should().BeTrue(); } [Fact] public void Should_add_forcedependencies_to_the_option_set() { - optionSet.Contains("forcedependencies").ShouldBeTrue(); + optionSet.Contains("forcedependencies").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_forcedependencies_to_the_option_set() { - optionSet.Contains("x").ShouldBeTrue(); + optionSet.Contains("x").Should().BeTrue(); } [Fact] public void Should_add_skippowershell_to_the_option_set() { - optionSet.Contains("skippowershell").ShouldBeTrue(); + optionSet.Contains("skippowershell").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_skippowershell_to_the_option_set() { - optionSet.Contains("n").ShouldBeTrue(); + optionSet.Contains("n").Should().BeTrue(); } [Fact] public void Should_add_skip_hooks_to_the_option_set() { - optionSet.Contains("skip-hooks").ShouldBeTrue(); + optionSet.Contains("skip-hooks").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_skip_hooks_to_the_option_set() { - optionSet.Contains("skiphooks").ShouldBeTrue(); + optionSet.Contains("skiphooks").Should().BeTrue(); } } @@ -203,7 +203,7 @@ public override void Because() [Fact] public void Should_set_unparsed_arguments_to_the_package_names() { - configuration.PackageNames.ShouldEqual("pkg1;pkg2"); + configuration.PackageNames.Should().Be("pkg1;pkg2"); } } @@ -230,9 +230,9 @@ public void Should_throw_when_packagenames_is_not_set() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUnpackSelfCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUnpackSelfCommandSpecs.cs index e23c336897..15cd6c3d65 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUnpackSelfCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUnpackSelfCommandSpecs.cs @@ -25,7 +25,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.configuration; using chocolatey.infrastructure.filesystem; using Moq; - using Should; + using FluentAssertions; public class ChocolateyUnpackSelfCommandSpecs { @@ -56,7 +56,7 @@ public override void Because() [Fact] public void Should_implement_unpackself() { - results.ShouldContain("unpackself"); + results.Should().Contain("unpackself"); } } @@ -76,13 +76,13 @@ public void Should_log_a_message() [Fact] public void Should_log_one_message() { - MockLogger.Messages.Count.ShouldEqual(1); + MockLogger.Messages.Should().HaveCount(1); } [Fact] public void Should_log_a_message_about_what_it_would_have_done() { - MockLogger.MessagesFor(LogLevel.Info).FirstOrDefault().ShouldContain("This would have unpacked"); + MockLogger.MessagesFor(LogLevel.Info).FirstOrDefault().Should().Contain("This would have unpacked"); } } diff --git a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUpgradeCommandSpecs.cs b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUpgradeCommandSpecs.cs index 4651d7d354..53f2acf2bd 100644 --- a/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUpgradeCommandSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/commands/ChocolateyUpgradeCommandSpecs.cs @@ -26,7 +26,7 @@ namespace chocolatey.tests.infrastructure.app.commands using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ChocolateyUpgradeCommandSpecs { @@ -56,7 +56,7 @@ public override void Because() [Fact] public void Should_implement_upgrade() { - results.ShouldContain("upgrade"); + results.Should().Contain("upgrade"); } } @@ -78,163 +78,163 @@ public override void Because() [Fact] public void Should_add_source_to_the_option_set() { - optionSet.Contains("source").ShouldBeTrue(); + optionSet.Contains("source").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_source_to_the_option_set() { - optionSet.Contains("s").ShouldBeTrue(); + optionSet.Contains("s").Should().BeTrue(); } [Fact] public void Should_add_version_to_the_option_set() { - optionSet.Contains("version").ShouldBeTrue(); + optionSet.Contains("version").Should().BeTrue(); } [Fact] public void Should_add_prerelease_to_the_option_set() { - optionSet.Contains("prerelease").ShouldBeTrue(); + optionSet.Contains("prerelease").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_prerelease_to_the_option_set() { - optionSet.Contains("pre").ShouldBeTrue(); + optionSet.Contains("pre").Should().BeTrue(); } [Fact] public void Should_add_installargs_to_the_option_set() { - optionSet.Contains("installarguments").ShouldBeTrue(); + optionSet.Contains("installarguments").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_installargs_to_the_option_set() { - optionSet.Contains("ia").ShouldBeTrue(); + optionSet.Contains("ia").Should().BeTrue(); } [Fact] public void Should_add_overrideargs_to_the_option_set() { - optionSet.Contains("overridearguments").ShouldBeTrue(); + optionSet.Contains("overridearguments").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_overrideargs_to_the_option_set() { - optionSet.Contains("o").ShouldBeTrue(); + optionSet.Contains("o").Should().BeTrue(); } [Fact] public void Should_add_notsilent_to_the_option_set() { - optionSet.Contains("notsilent").ShouldBeTrue(); + optionSet.Contains("notsilent").Should().BeTrue(); } [Fact] public void Should_add_packageparameters_to_the_option_set() { - optionSet.Contains("packageparameters").ShouldBeTrue(); + optionSet.Contains("packageparameters").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_packageparameters_to_the_option_set() { - optionSet.Contains("params").ShouldBeTrue(); + optionSet.Contains("params").Should().BeTrue(); } [Fact] public void Should_add_applyPackageParametersToDependencies_to_the_option_set() { - optionSet.Contains("apply-package-parameters-to-dependencies").ShouldBeTrue(); + optionSet.Contains("apply-package-parameters-to-dependencies").Should().BeTrue(); } [Fact] public void Should_add_applyInstallArgumentsToDependencies_to_the_option_set() { - optionSet.Contains("apply-install-arguments-to-dependencies").ShouldBeTrue(); + optionSet.Contains("apply-install-arguments-to-dependencies").Should().BeTrue(); } [Fact] public void Should_add_ignoredependencies_to_the_option_set() { - optionSet.Contains("ignoredependencies").ShouldBeTrue(); + optionSet.Contains("ignoredependencies").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_ignoredependencies_to_the_option_set() { - optionSet.Contains("i").ShouldBeTrue(); + optionSet.Contains("i").Should().BeTrue(); } [Fact] public void Should_add_skippowershell_to_the_option_set() { - optionSet.Contains("skippowershell").ShouldBeTrue(); + optionSet.Contains("skippowershell").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_skippowershell_to_the_option_set() { - optionSet.Contains("n").ShouldBeTrue(); + optionSet.Contains("n").Should().BeTrue(); } [Fact] public void Should_add_user_to_the_option_set() { - optionSet.Contains("user").ShouldBeTrue(); + optionSet.Contains("user").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_user_to_the_option_set() { - optionSet.Contains("u").ShouldBeTrue(); + optionSet.Contains("u").Should().BeTrue(); } [Fact] public void Should_add_password_to_the_option_set() { - optionSet.Contains("password").ShouldBeTrue(); + optionSet.Contains("password").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_password_to_the_option_set() { - optionSet.Contains("p").ShouldBeTrue(); + optionSet.Contains("p").Should().BeTrue(); } [Fact] public void Should_add_pin_to_the_option_set() { - optionSet.Contains("pinpackage").ShouldBeTrue(); + optionSet.Contains("pinpackage").Should().BeTrue(); } [Fact] public void Should_add_long_version_of_pin_to_the_option_set() { - optionSet.Contains("pin-package").ShouldBeTrue(); + optionSet.Contains("pin-package").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_pin_to_the_option_set() { - optionSet.Contains("pin").ShouldBeTrue(); + optionSet.Contains("pin").Should().BeTrue(); } [Fact] public void Should_add_skip_hooks_to_the_option_set() { - optionSet.Contains("skip-hooks").ShouldBeTrue(); + optionSet.Contains("skip-hooks").Should().BeTrue(); } [Fact] public void Should_add_short_version_of_skip_hooks_to_the_option_set() { - optionSet.Contains("skiphooks").ShouldBeTrue(); + optionSet.Contains("skiphooks").Should().BeTrue(); } } @@ -257,7 +257,7 @@ public override void Because() [Fact] public void Should_set_unparsed_arguments_to_the_package_names() { - configuration.PackageNames.ShouldEqual("pkg1;pkg2"); + configuration.PackageNames.Should().Be("pkg1;pkg2"); } } @@ -284,9 +284,9 @@ public void Should_throw_when_packagenames_is_not_set() error = ex; } - errored.ShouldBeTrue(); - error.ShouldNotBeNull(); - error.ShouldBeType(); + errored.Should().BeTrue(); + error.Should().NotBeNull(); + error.Should().BeOfType(); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/configuration/ConfigurationOptionsSpec.cs b/src/chocolatey.tests/infrastructure.app/configuration/ConfigurationOptionsSpec.cs index f076c05c5a..e67baf25dc 100644 --- a/src/chocolatey.tests/infrastructure.app/configuration/ConfigurationOptionsSpec.cs +++ b/src/chocolatey.tests/infrastructure.app/configuration/ConfigurationOptionsSpec.cs @@ -25,7 +25,7 @@ namespace chocolatey.tests.infrastructure.app.configuration using chocolatey.infrastructure.app.configuration; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class ConfigurationOptionsSpec { @@ -78,9 +78,9 @@ public void Should_set_help_options_by_default() { setOptions = set => { - set.Contains("h").ShouldBeTrue(); - set.Contains("help").ShouldBeTrue(); - set.Contains("?").ShouldBeTrue(); + set.Contains("h").Should().BeTrue(); + set.Contains("help").Should().BeTrue(); + set.Contains("?").Should().BeTrue(); }; because(); } @@ -88,7 +88,7 @@ public void Should_set_help_options_by_default() [Fact] public void Should_not_have_set_other_options_by_default() { - setOptions = set => { set.Contains("dude").ShouldBeFalse(); }; + setOptions = set => { set.Contains("dude").Should().BeFalse(); }; because(); } @@ -99,8 +99,8 @@ public void Should_show_help_menu_when_help_is_requested() because(); - config.HelpRequested.ShouldBeTrue(); - config.ShowOnlineHelp.ShouldBeFalse(); + config.HelpRequested.Should().BeTrue(); + config.ShowOnlineHelp.Should().BeFalse(); } [Fact] @@ -111,8 +111,8 @@ public void Should_show_online_help_menu_when_help_is_requested() because(); - config.HelpRequested.ShouldBeTrue(); - config.ShowOnlineHelp.ShouldBeTrue(); + config.HelpRequested.Should().BeTrue(); + config.ShowOnlineHelp.Should().BeTrue(); } [Fact] @@ -122,14 +122,14 @@ public void Should_have_a_helpMessage_with_contents_when_help_is_requested() because(); - helpMessageContents.ToString().ShouldNotBeEmpty(); + helpMessageContents.ToString().Should().NotBeEmpty(); } [Fact] public void Should_not_run_validate_configuration_when_help_is_requested() { args.Add("-h"); - validateConfiguration = () => { "should".ShouldEqual("not be reached"); }; + validateConfiguration = () => { "should".Should().Be("not be reached"); }; because(); } @@ -142,7 +142,7 @@ public void Should_run_validate_configuration_unless_help_is_requested() because(); - wasCalled.ShouldBeTrue(); + wasCalled.Should().BeTrue(); } [Fact] @@ -152,12 +152,12 @@ public void Should_give_an_empty_unparsed_args_to_after_parse() afterParse = list => { wasCalled = true; - list.ShouldBeEmpty(); + list.Should().BeEmpty(); }; because(); - wasCalled.ShouldBeTrue(); + wasCalled.Should().BeTrue(); } [Fact] @@ -168,12 +168,12 @@ public void Should_give_an_empty_unparsed_args_to_after_parse_when_all_specified afterParse = list => { wasCalled = true; - list.ShouldBeEmpty(); + list.Should().BeEmpty(); }; because(); - wasCalled.ShouldBeTrue(); + wasCalled.Should().BeTrue(); } [Fact] @@ -184,12 +184,12 @@ public void Should_give_unparsed_args_to_after_parse_when_not_picked_up_by_an_op afterParse = list => { wasCalled = true; - list.ShouldContain(args.First()); + list.Should().Contain(args.First()); }; because(); - wasCalled.ShouldBeTrue(); + wasCalled.Should().BeTrue(); } [Fact] @@ -200,13 +200,13 @@ public void Should_find_command_name_in_unparsed_args_if_not_set_otherwise() afterParse = list => { wasCalled = true; - list.ShouldContain(args.First()); + list.Should().Contain(args.First()); }; because(); - config.CommandName.ShouldEqual("dude"); - wasCalled.ShouldBeTrue(); + config.CommandName.Should().Be("dude"); + wasCalled.Should().BeTrue(); } [Fact] @@ -217,14 +217,14 @@ public void Should_set_help_requested_if_command_name_is_starts_with_a_prefix() afterParse = list => { wasCalled = true; - list.ShouldContain(args.First()); + list.Should().Contain(args.First()); }; because(); - config.CommandName.ShouldNotEqual("dude"); - config.HelpRequested.ShouldBeTrue(); - wasCalled.ShouldBeTrue(); + config.CommandName.Should().NotBe("dude"); + config.HelpRequested.Should().BeTrue(); + wasCalled.Should().BeTrue(); } [Fact] @@ -233,7 +233,7 @@ public void Should_add_an_option_for_bob_when_specified() setOptions = set => { set.Add("bob", "sets the bob switch", option => config.Verbose = option != null); }; because(); - config.Verbose.ShouldBeFalse(); + config.Verbose.Should().BeFalse(); } [Fact] @@ -244,7 +244,7 @@ public void Should_set_option_for_tim_to_true_when_specified_with_dash() because(); - config.Verbose.ShouldBeTrue(); + config.Verbose.Should().BeTrue(); } [Fact] @@ -254,7 +254,7 @@ public void Should_set_option_for_tina_to_true_when_specified_with_two_dashes() args.Add("--tina"); because(); - config.Verbose.ShouldBeTrue(); + config.Verbose.Should().BeTrue(); } [Fact] @@ -265,7 +265,7 @@ public void Should_set_option_for_gena_to_true_when_specified_with_forward_slash because(); - config.Verbose.ShouldBeTrue(); + config.Verbose.Should().BeTrue(); } [Fact] @@ -282,9 +282,9 @@ public void Should_set_option_when_specified_as_single_dash_for_timmy_and_other_ because(); - config.SkipPackageInstallProvider.ShouldBeTrue(); - config.Debug.ShouldBeTrue(); - config.Verbose.ShouldBeTrue(); + config.SkipPackageInstallProvider.Should().BeTrue(); + config.Debug.Should().BeTrue(); + config.Verbose.Should().BeTrue(); } [Fact] @@ -301,10 +301,10 @@ public void Should_set_option_when_specified_as_single_dash_for_lo_and_other_opt because(); - config.SkipPackageInstallProvider.ShouldBeTrue(); - config.Debug.ShouldBeTrue(); - config.ListCommand.LocalOnly.ShouldBeTrue(); - helpMessageContents.ToString().ShouldBeEmpty(); + config.SkipPackageInstallProvider.Should().BeTrue(); + config.Debug.Should().BeTrue(); + config.ListCommand.LocalOnly.Should().BeTrue(); + helpMessageContents.ToString().Should().BeEmpty(); } [Fact] @@ -315,8 +315,8 @@ public void Should_show_help_menu_when_passing_bundled_options_that_do_not_exist because(); - config.Debug.ShouldBeFalse(); - helpMessageContents.ToString().ShouldNotBeEmpty(); + config.Debug.Should().BeFalse(); + helpMessageContents.ToString().Should().NotBeEmpty(); } [Fact] @@ -326,7 +326,7 @@ public void Should_successfully_parse_help_option() because(); - config.UnsuccessfulParsing.ShouldBeFalse(); + config.UnsuccessfulParsing.Should().BeFalse(); } [Fact] @@ -336,7 +336,7 @@ public void Should_not_parse_unknown_option() because(); - config.UnsuccessfulParsing.ShouldBeTrue(); + config.UnsuccessfulParsing.Should().BeTrue(); } } } diff --git a/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNuGetProjectContextSpecs.cs b/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNuGetProjectContextSpecs.cs index 053119336d..371bcf5c16 100644 --- a/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNuGetProjectContextSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNuGetProjectContextSpecs.cs @@ -21,7 +21,7 @@ namespace chocolatey.tests.infrastructure.app.nuget using NuGet.Common; using NuGet.ProjectManagement; using NUnit.Framework; - using Should; + using FluentAssertions; public class ChocolateyNuGetProjectContextSpecs { @@ -139,7 +139,7 @@ public void Should_report_warning_when_resolving_file_conflicts() var result = Service.ResolveFileConflict(message); - result.ShouldEqual(FileConflictAction.OverwriteAll); + result.Should().Be(FileConflictAction.OverwriteAll); Logger.Verify(l => l.LogWarning("File conflict, overwriting all: Some kind of message"), Times.Once); diff --git a/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNugetLoggerSpecs.cs b/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNugetLoggerSpecs.cs index 1c704d843e..643c7c3b22 100644 --- a/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNugetLoggerSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/nuget/ChocolateyNugetLoggerSpecs.cs @@ -20,7 +20,7 @@ namespace chocolatey.tests.infrastructure.app.nuget using chocolatey.infrastructure.app.nuget; using NuGet.Common; using NUnit.Framework; - using Should; + using FluentAssertions; using LogLevel = chocolatey.tests.LogLevel; using NuGetLogLevel = NuGet.Common.LogLevel; @@ -56,10 +56,10 @@ public void Should_log_debug_level_with_nuget_prefix_on_all_lines_when_calling_L _logger.LogDebug(testMessage); var loggerName = LogLevel.Debug.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -71,10 +71,10 @@ public void Should_log_debug_level_with_nuget_prefix_when_calling_LogDebug() _logger.LogDebug(testMessage); var loggerName = LogLevel.Debug.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -86,10 +86,10 @@ public void Should_log_error_level_with_nuget_prefix_on_all_lines_when_calling_L _logger.LogError(testMessage); var loggerName = LogLevel.Error.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -101,10 +101,10 @@ public void Should_log_error_level_with_nuget_prefix_when_calling_LogError() _logger.LogError(testMessage); var loggerName = LogLevel.Error.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Debug, LogLevel.Debug, "Test debug message", "[NuGet] Test debug message")] @@ -114,10 +114,10 @@ public void Should_log_error_level_with_nuget_prefix_when_calling_LogError() public void Should_log_expected_log_level_when_calling_Log_with_log_message(NuGetLogLevel nugetLogLevel, LogLevel logLevel, string testMessage, string expectedMessage) { _logger.Log(new LogMessage(nugetLogLevel, testMessage)); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(logLevel.ToStringSafe()); - MockLogger.Messages[logLevel.ToStringSafe()].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(logLevel.ToStringSafe()); + MockLogger.Messages[logLevel.ToStringSafe()].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Debug, LogLevel.Debug, "Test debug message", "[NuGet] Test debug message")] @@ -127,10 +127,10 @@ public void Should_log_expected_log_level_when_calling_Log_with_log_message(NuGe public void Should_log_expected_log_level_when_calling_Log_with_nuget_log_level(NuGetLogLevel nugetLogLevel, LogLevel logLevel, string testMessage, string expectedMessage) { _logger.Log(nugetLogLevel, testMessage); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(logLevel.ToStringSafe()); - MockLogger.Messages[logLevel.ToStringSafe()].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(logLevel.ToStringSafe()); + MockLogger.Messages[logLevel.ToStringSafe()].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Debug, LogLevel.Debug, "Test debug message", "[NuGet] Test debug message")] @@ -140,10 +140,10 @@ public void Should_log_expected_log_level_when_calling_Log_with_nuget_log_level( public async Task Should_log_expected_log_level_when_calling_LogAsync_with_nuget_log_level(NuGetLogLevel nugetLogLevel, LogLevel logLevel, string testMessage, string expectedMessage) { await _logger.LogAsync(nugetLogLevel, testMessage); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(logLevel.ToStringSafe()); - MockLogger.Messages[logLevel.ToStringSafe()].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(logLevel.ToStringSafe()); + MockLogger.Messages[logLevel.ToStringSafe()].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Debug, LogLevel.Debug, "Test debug message", "[NuGet] Test debug message")] @@ -153,10 +153,10 @@ public async Task Should_log_expected_log_level_when_calling_LogAsync_with_nuget public async Task Should_log_expected_log_level_when_calling_LogAsync_with_nuget_log_message(NuGetLogLevel nugetLogLevel, LogLevel logLevel, string testMessage, string expectedMessage) { await _logger.LogAsync(new LogMessage(nugetLogLevel, testMessage)); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(logLevel.ToStringSafe()); - MockLogger.Messages[logLevel.ToStringSafe()].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(logLevel.ToStringSafe()); + MockLogger.Messages[logLevel.ToStringSafe()].Should().Contain(expectedMessage); } [Fact] @@ -168,10 +168,10 @@ public void Should_log_info_level_with_nuget_prefix_on_all_lines_when_calling_Lo _logger.LogInformationSummary(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -183,10 +183,10 @@ public void Should_log_info_level_with_nuget_prefix_when_calling_LogInformationS _logger.LogInformationSummary(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Verbose, "Test verbose message", "[NuGet] Test verbose message")] @@ -194,10 +194,10 @@ public void Should_log_info_level_with_nuget_prefix_when_calling_LogInformationS public void Should_log_verbose_level_when_calling_Log_with_nuget_log_level(NuGetLogLevel nuGetLogLevel, string testMessage, string expectedMessage) { _logger.Log(nuGetLogLevel, testMessage); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain("Info"); - MockLogger.Messages["Info"].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain("Info"); + MockLogger.Messages["Info"].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Verbose, "Test verbose message", "[NuGet] Test verbose message")] @@ -205,10 +205,10 @@ public void Should_log_verbose_level_when_calling_Log_with_nuget_log_level(NuGet public void Should_log_verbose_level_when_calling_Log_with_nuget_log_message(NuGetLogLevel nuGetLogLevel, string testMessage, string expectedMessage) { _logger.Log(new LogMessage(nuGetLogLevel, testMessage)); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain("Info"); - MockLogger.Messages["Info"].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain("Info"); + MockLogger.Messages["Info"].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Verbose, "Test verbose message", "[NuGet] Test verbose message")] @@ -216,10 +216,10 @@ public void Should_log_verbose_level_when_calling_Log_with_nuget_log_message(NuG public async Task Should_log_verbose_level_when_calling_LogAsync_with_nuget_log_level(NuGetLogLevel nuGetLogLevel, string testMessage, string expectedMessage) { await _logger.LogAsync(nuGetLogLevel, testMessage); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain("Info"); - MockLogger.Messages["Info"].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain("Info"); + MockLogger.Messages["Info"].Should().Contain(expectedMessage); } [TestCase(NuGetLogLevel.Verbose, "Test verbose message", "[NuGet] Test verbose message")] @@ -227,10 +227,10 @@ public async Task Should_log_verbose_level_when_calling_LogAsync_with_nuget_log_ public async Task Should_log_verbose_level_when_calling_LogAsync_with_nuget_log_message(NuGetLogLevel nuGetLogLevel, string testMessage, string expectedMessage) { await _logger.LogAsync(new LogMessage(nuGetLogLevel, testMessage)); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain("Info"); - MockLogger.Messages["Info"].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain("Info"); + MockLogger.Messages["Info"].Should().Contain(expectedMessage); } [Fact] @@ -242,10 +242,10 @@ public void Should_log_verbose_level_with_nuget_prefix_on_all_lines_when_calling _logger.LogInformation(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -257,10 +257,10 @@ public void Should_log_verbose_level_with_nuget_prefix_on_all_lines_when_calling _logger.LogMinimal(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -272,10 +272,10 @@ public void Should_log_verbose_level_with_nuget_prefix_on_all_lines_when_calling _logger.LogVerbose(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -287,10 +287,10 @@ public void Should_log_verbose_level_with_nuget_prefix_when_calling_LogInformati _logger.LogInformation(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -302,10 +302,10 @@ public void Should_log_verbose_level_with_nuget_prefix_when_calling_LogMinimal() _logger.LogMinimal(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -317,10 +317,10 @@ public void Should_log_verbose_level_with_nuget_prefix_when_calling_LogVerbose() _logger.LogVerbose(testMessage); var loggerName = LogLevel.Info.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(2); - MockLogger.LoggerNames.ShouldContain("Verbose"); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().HaveCount(2); + MockLogger.LoggerNames.Should().Contain("Verbose"); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -332,10 +332,10 @@ public void Should_log_warn_level_with_nuget_prefix_on_all_lines_when_calling_Lo _logger.LogWarning(testMessage); var loggerName = LogLevel.Warn.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [Fact] @@ -347,10 +347,10 @@ public void Should_log_warn_level_with_nuget_prefix_when_calling_LogWarning() _logger.LogWarning(testMessage); var loggerName = LogLevel.Warn.ToStringSafe(); - MockLogger.LoggerNames.Count.ShouldEqual(1); - MockLogger.LoggerNames.ShouldContain(typeof(ChocolateyNugetLogger).FullName); - MockLogger.Messages.Keys.ShouldContain(loggerName); - MockLogger.Messages[loggerName].ShouldContain(expectedMessage); + MockLogger.LoggerNames.Should().ContainSingle(); + MockLogger.LoggerNames.Should().Contain(typeof(ChocolateyNugetLogger).FullName); + MockLogger.Messages.Keys.Should().Contain(loggerName); + MockLogger.Messages[loggerName].Should().Contain(expectedMessage); } [TestCase("")] @@ -361,8 +361,8 @@ public void Should_not_output_whitespace_only_line_in_multiline_logging(string t var expectedValue = "[NuGet] I will be containing{0}[NuGet]{0}[NuGet] some whitespace".FormatWith(Environment.NewLine); _logger.Log(NuGetLogLevel.Minimal, testValue); - MockLogger.Messages.Keys.ShouldContain("Info"); - MockLogger.Messages["Info"].ShouldContain(expectedValue); + MockLogger.Messages.Keys.Should().Contain("Info"); + MockLogger.Messages["Info"].Should().Contain(expectedValue); } [TestCase(null)] @@ -372,8 +372,8 @@ public void Should_only_output_prefix_for_null_or_empty_values(string testValue) { _logger.Log(NuGetLogLevel.Minimal, testValue); - MockLogger.Messages.Keys.ShouldContain("Info"); - MockLogger.Messages["Info"].ShouldContain("[NuGet]"); + MockLogger.Messages.Keys.Should().Contain("Info"); + MockLogger.Messages["Info"].Should().Contain("[NuGet]"); } [TestCase("\n\n\n\n\n")] @@ -383,8 +383,8 @@ public void Should_only_output_prefixes_on_every_line(string testValue) var expectedValue = "[NuGet]{0}[NuGet]{0}[NuGet]{0}[NuGet]{0}[NuGet]".FormatWith(Environment.NewLine); _logger.Log(NuGetLogLevel.Information, testValue); - MockLogger.Messages.Keys.ShouldContain("Info"); - MockLogger.Messages["Info"].ShouldContain(expectedValue); + MockLogger.Messages.Keys.Should().Contain("Info"); + MockLogger.Messages["Info"].Should().Contain(expectedValue); } } } diff --git a/src/chocolatey.tests/infrastructure.app/nuget/NugetCommonSpecs.cs b/src/chocolatey.tests/infrastructure.app/nuget/NugetCommonSpecs.cs index e1cc4baa8c..8933f70902 100644 --- a/src/chocolatey.tests/infrastructure.app/nuget/NugetCommonSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/nuget/NugetCommonSpecs.cs @@ -28,7 +28,7 @@ namespace chocolatey.tests.infrastructure.app.nuget using NuGet.Packaging; using NuGet.Protocol; using NuGet.Protocol.Core.Types; - using Should; + using FluentAssertions; public class NugetCommonSpecs { @@ -67,7 +67,7 @@ public void Should_create_repository_when_source_is_null() because(); - packageRepositories.Count().ShouldEqual(0); + packageRepositories.Should().BeEmpty(); } [Fact] @@ -80,9 +80,9 @@ public void Should_parse_http_source() because(); - packageRepositories.First().PackageSource.TrySourceAsUri.ShouldNotBeNull(); - packageRepositories.First().PackageSource.SourceUri.ToStringSafe().ShouldEqual(source); - packageRepositories.First().PackageSource.IsHttp.ShouldBeTrue(); + packageRepositories.First().PackageSource.TrySourceAsUri.Should().NotBeNull(); + packageRepositories.First().PackageSource.SourceUri.ToStringSafe().Should().Be(source); + packageRepositories.First().PackageSource.IsHttp.Should().BeTrue(); } [Fact] @@ -95,9 +95,9 @@ public void Should_parse_https_source() because(); - packageRepositories.First().PackageSource.TrySourceAsUri.ShouldNotBeNull(); - packageRepositories.First().PackageSource.SourceUri.ToStringSafe().ShouldEqual(source); - packageRepositories.First().PackageSource.IsHttps.ShouldBeTrue(); + packageRepositories.First().PackageSource.TrySourceAsUri.Should().NotBeNull(); + packageRepositories.First().PackageSource.SourceUri.ToStringSafe().Should().Be(source); + packageRepositories.First().PackageSource.IsHttps.Should().BeTrue(); } [Fact] @@ -109,10 +109,10 @@ public void Should_parse_absolute_path_source() because(); - packageRepositories.First().PackageSource.TrySourceAsUri.ShouldNotBeNull(); + packageRepositories.First().PackageSource.TrySourceAsUri.Should().NotBeNull(); packageRepositories.First().PackageSource.SourceUri.ToStringSafe() - .ShouldEqual(("file:///" + source).Replace("\\","/")); - packageRepositories.First().PackageSource.IsLocal.ShouldBeTrue(); + .Should().Be(("file:///" + source).Replace("\\","/")); + packageRepositories.First().PackageSource.IsLocal.Should().BeTrue(); } [Fact] @@ -125,10 +125,10 @@ public void Should_parse_relative_path_source() because(); - packageRepositories.First().PackageSource.TrySourceAsUri.ShouldNotBeNull(); + packageRepositories.First().PackageSource.TrySourceAsUri.Should().NotBeNull(); packageRepositories.First().PackageSource.SourceUri.ToStringSafe() - .ShouldEqual(("file:///" + fullsource).Replace("\\", "/")); - packageRepositories.First().PackageSource.IsLocal.ShouldBeTrue(); + .Should().Be(("file:///" + fullsource).Replace("\\", "/")); + packageRepositories.First().PackageSource.IsLocal.Should().BeTrue(); } [Fact] @@ -141,10 +141,10 @@ public void Should_parse_dot_relative_path_source() because(); - packageRepositories.First().PackageSource.TrySourceAsUri.ShouldNotBeNull(); + packageRepositories.First().PackageSource.TrySourceAsUri.Should().NotBeNull(); packageRepositories.First().PackageSource.SourceUri.ToStringSafe() - .ShouldEqual(("file:///" + fullsource + "/").Replace("\\", "/")); - packageRepositories.First().PackageSource.IsLocal.ShouldBeTrue(); + .Should().Be(("file:///" + fullsource + "/").Replace("\\", "/")); + packageRepositories.First().PackageSource.IsLocal.Should().BeTrue(); } [Fact] @@ -156,11 +156,11 @@ public void Should_parse_unc_source() because(); - packageRepositories.First().PackageSource.TrySourceAsUri.ShouldNotBeNull(); + packageRepositories.First().PackageSource.TrySourceAsUri.Should().NotBeNull(); packageRepositories.First().PackageSource.SourceUri.ToStringSafe() - .ShouldEqual(("file:" + source).Replace("\\", "/")); - packageRepositories.First().PackageSource.IsLocal.ShouldBeTrue(); - packageRepositories.First().PackageSource.SourceUri.IsUnc.ShouldBeTrue(); + .Should().Be(("file:" + source).Replace("\\", "/")); + packageRepositories.First().PackageSource.IsLocal.Should().BeTrue(); + packageRepositories.First().PackageSource.SourceUri.IsUnc.Should().BeTrue(); } [Fact] @@ -176,7 +176,7 @@ public void Should_set_user_agent_string() // Change this when the NuGet version is updated. string nugetClientVersion = "6.4.1"; string expectedUserAgentString = "{0}/{1} via NuGet Client/{2}".FormatWith(ApplicationParameters.UserAgent, configuration.Information.ChocolateyProductVersion, nugetClientVersion); - UserAgent.UserAgentString.ShouldStartWith(expectedUserAgentString); + UserAgent.UserAgentString.Should().StartWith(expectedUserAgentString); } } } diff --git a/src/chocolatey.tests/infrastructure.app/services/ChocolateyConfigSettingsServiceSpecs.cs b/src/chocolatey.tests/infrastructure.app/services/ChocolateyConfigSettingsServiceSpecs.cs index 9635a373a5..72e69d6c79 100644 --- a/src/chocolatey.tests/infrastructure.app/services/ChocolateyConfigSettingsServiceSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/services/ChocolateyConfigSettingsServiceSpecs.cs @@ -8,8 +8,7 @@ using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.services; using Moq; - using Should; - using Assert = Should.Core.Assertions.Assert; + using FluentAssertions; public class ChocolateyConfigSettingsServiceSpecs { @@ -61,14 +60,14 @@ public override void Context() [Fact] public void Should_not_report_feature_being_unsupported() { - MockLogger.Messages["Warn"].ShouldNotContain("Feature '{0}' is not supported. Any change have no effect on running Chocolatey.".FormatWith(ApplicationParameters.Features.ChecksumFiles)); + MockLogger.Messages["Warn"].Should().NotContain("Feature '{0}' is not supported. Any change have no effect on running Chocolatey.".FormatWith(ApplicationParameters.Features.ChecksumFiles)); } [Fact] public void Should_report_feature_being_disabled() { - MockLogger.Messages.Keys.ShouldContain("Warn"); - MockLogger.Messages["Warn"].ShouldContain("Disabled {0}".FormatWith(ApplicationParameters.Features.ChecksumFiles)); + MockLogger.Messages.Keys.Should().Contain("Warn"); + MockLogger.Messages["Warn"].Should().Contain("Disabled {0}".FormatWith(ApplicationParameters.Features.ChecksumFiles)); } [Fact] @@ -102,13 +101,13 @@ public override void Context() [Fact] public void Should_not_contain_any_warnings() { - MockLogger.Messages.Keys.ShouldNotContain("Warn"); + MockLogger.Messages.Keys.Should().NotContain("Warn"); } [Fact] public void Should_throw_exception_on_unknown_feature() { - Assert.ThrowsDelegate action = () => + Action action = () => { var config = new ChocolateyConfiguration() { @@ -121,8 +120,8 @@ public void Should_throw_exception_on_unknown_feature() Service.DisableFeature(config); }; - Assert.Throws(action) - .Message.ShouldEqual("Feature 'unknown' not found"); + action.Should().Throw() + .WithMessage("Feature 'unknown' not found"); } } @@ -156,7 +155,7 @@ public override void Context() [Fact] public void Should_throw_exception_on_unsupported_feature() { - Assert.Throws(() => + Action action = () => { var config = new ChocolateyConfiguration() { @@ -167,7 +166,9 @@ public void Should_throw_exception_on_unsupported_feature() }; Service.DisableFeature(config); - }).Message.ShouldEqual("Feature '{0}' is not supported.".FormatWith(FeatureName)); + }; + action.Should().Throw() + .WithMessage("Feature '{0}' is not supported.".FormatWith(FeatureName)); } } @@ -208,14 +209,14 @@ public override void Context() [Fact] public void Should_not_report_feature_being_unsupported() { - MockLogger.Messages["Warn"].ShouldNotContain("Feature '{0}' is not supported. Any change have no effect on running Chocolatey.".FormatWith(ApplicationParameters.Features.ChecksumFiles)); + MockLogger.Messages["Warn"].Should().NotContain("Feature '{0}' is not supported. Any change have no effect on running Chocolatey.".FormatWith(ApplicationParameters.Features.ChecksumFiles)); } [Fact] public void Should_report_feature_being_enabled() { - MockLogger.Messages.Keys.ShouldContain("Warn"); - MockLogger.Messages["Warn"].ShouldContain("Enabled {0}".FormatWith(ApplicationParameters.Features.ChecksumFiles)); + MockLogger.Messages.Keys.Should().Contain("Warn"); + MockLogger.Messages["Warn"].Should().Contain("Enabled {0}".FormatWith(ApplicationParameters.Features.ChecksumFiles)); } [Fact] @@ -249,13 +250,13 @@ public override void Context() [Fact] public void Should_not_contain_any_warnings() { - MockLogger.Messages.Keys.ShouldNotContain("Warn"); + MockLogger.Messages.Keys.Should().NotContain("Warn"); } [Fact] public void Should_throw_exception_on_unknown_feature() { - Assert.ThrowsDelegate action = () => + Action action = () => { var config = new ChocolateyConfiguration() { @@ -268,8 +269,8 @@ public void Should_throw_exception_on_unknown_feature() Service.EnableFeature(config); }; - Assert.Throws(action) - .Message.ShouldEqual("Feature 'unknown' not found"); + action.Should().Throw() + .WithMessage("Feature 'unknown' not found"); } } @@ -303,7 +304,7 @@ public override void Context() [Fact] public void Should_throw_exception_on_unsupported_feature() { - Assert.Throws(() => + Action action = () => { var config = new ChocolateyConfiguration() { @@ -314,7 +315,10 @@ public void Should_throw_exception_on_unsupported_feature() }; Service.EnableFeature(config); - }).Message.ShouldEqual("Feature '{0}' is not supported.".FormatWith(FeatureName)); + } + ; + action.Should().Throw() + .WithMessage("Feature '{0}' is not supported.".FormatWith(FeatureName)); } } @@ -356,12 +360,12 @@ public override void Context() [Fact] public void Should_output_features_in_alphabetical_order() { - MockLogger.Messages.Keys.ShouldContain("Info"); + MockLogger.Messages.Keys.Should().Contain("Info"); var infoMessages = MockLogger.Messages["Info"]; - infoMessages.Count.ShouldEqual(2); - infoMessages[0].ShouldContain("allowEmptyChecksums"); - infoMessages[1].ShouldContain("virusCheck"); + infoMessages.Should().HaveCount(2); + infoMessages[0].Should().Contain("allowEmptyChecksums"); + infoMessages[1].Should().Contain("virusCheck"); } } @@ -403,12 +407,12 @@ public override void Context() [Fact] public void Should_output_config_in_alphabetical_order() { - MockLogger.Messages.Keys.ShouldContain("Info"); + MockLogger.Messages.Keys.Should().Contain("Info"); var infoMessages = MockLogger.Messages["Info"]; - infoMessages.Count.ShouldEqual(2); - infoMessages[0].ShouldContain("cacheLocation"); - infoMessages[1].ShouldContain("webRequestTimeoutSeconds"); + infoMessages.Should().HaveCount(2); + infoMessages[0].Should().Contain("cacheLocation"); + infoMessages[1].Should().Contain("webRequestTimeoutSeconds"); } } @@ -450,12 +454,12 @@ public override void Context() [Fact] public void Should_output_sources_in_alphabetical_order() { - MockLogger.Messages.Keys.ShouldContain("Info"); + MockLogger.Messages.Keys.Should().Contain("Info"); var infoMessages = MockLogger.Messages["Info"]; - infoMessages.Count.ShouldEqual(2); - infoMessages[0].ShouldContain("alpha"); - infoMessages[1].ShouldContain("beta"); + infoMessages.Should().HaveCount(2); + infoMessages[0].Should().Contain("alpha"); + infoMessages[1].Should().Contain("beta"); } } @@ -516,9 +520,9 @@ public void Should_throw_when_unknown_feature_name() _error = ex; } - _error.ShouldNotBeNull(); - _error.ShouldBeType(); - _error.Message.ShouldContain("No feature value by the name 'unknown'"); + _error.Should().NotBeNull(); + _error.Should().BeOfType(); + _error.Message.Should().Contain("No feature value by the name 'unknown'"); } } @@ -562,10 +566,10 @@ public override void Context() [Fact] public void Should_return_feature_status() { - MockLogger.Messages.Keys.ShouldContain("Info"); + MockLogger.Messages.Keys.Should().Contain("Info"); var infoMessages = MockLogger.Messages["Info"]; - infoMessages.Count.ShouldEqual(1); - infoMessages[0].ShouldContain("Enabled"); + infoMessages.Should().ContainSingle(); + infoMessages[0].Should().Contain("Enabled"); } } } diff --git a/src/chocolatey.tests/infrastructure.app/services/ChocolateyPackageServiceSpecs.cs b/src/chocolatey.tests/infrastructure.app/services/ChocolateyPackageServiceSpecs.cs index 80e7e02b79..055c768f5f 100644 --- a/src/chocolatey.tests/infrastructure.app/services/ChocolateyPackageServiceSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/services/ChocolateyPackageServiceSpecs.cs @@ -27,7 +27,7 @@ using chocolatey.infrastructure.services; using Moq; using NUnit.Framework; -using Should; +using FluentAssertions; using IFileSystem = chocolatey.infrastructure.filesystem.IFileSystem; namespace chocolatey.tests.infrastructure.app.services @@ -134,7 +134,7 @@ public override void Because() [Test] public void Should_return_package_that_should_have_been_installed() { - _result.Keys.ShouldContain("test-feature"); + _result.Keys.Should().Contain("test-feature"); } [Test] @@ -191,7 +191,7 @@ public void Should_throw_exception_when_full_path_is_passed_to_install_run() var ex = TryRun(Action); var message = GetExpectedLocalValue(directory, "my-package"); - ex.Message.ShouldEqual(message); + ex.Message.Should().Be(message); } [Fact] @@ -209,7 +209,7 @@ public void Should_throw_exception_when_full_file_prefixed_path_is_passed_to_ins var ex = TryRun(Action); var message = GetExpectedLocalValue(directory, "my-package"); - ex.Message.ShouldEqual(message); + ex.Message.Should().Be(message); } [Fact, Categories.Unc] @@ -227,7 +227,7 @@ public void Should_throw_exception_when_UNC_path_is_passed_to_install_run() var ex = TryRun(Action); var message = GetExpectedUncValue(directory, "my-package"); - ex.Message.ShouldEqual(message); + ex.Message.Should().Be(message); } [Fact] @@ -236,7 +236,7 @@ public void Should_throw_exception_when_remote_path_is_passed_to_install_run() Configuration.PackageNames = "https://test.com/repository/awesome-package.nupkg"; var ex = TryRun(Action); - ex.Message.ShouldEqual("Package name cannot point directly to a local, or remote file. Please use the --source argument and point it to a local file directory, UNC directory path or a NuGet feed instead."); + ex.Message.Should().Be("Package name cannot point directly to a local, or remote file. Please use the --source argument and point it to a local file directory, UNC directory path or a NuGet feed instead."); } [Fact] @@ -253,7 +253,7 @@ public void Should_throw_exception_when_passed_in_path_to_nupkg_is_relative_and_ var ex = TryRun(Action); var expectedMessage = GetExpectedLocalValue(Environment.CurrentDirectory, "test", "1.5.0"); - ex.Message.ShouldEqual(expectedMessage); + ex.Message.Should().Be(expectedMessage); } [Fact] @@ -270,7 +270,7 @@ public void Should_throw_exception_with_expected_message_when_installing_pre_rel var ex = TryRun(Action); var expectedMessage = GetExpectedLocalValue(Environment.CurrentDirectory, "test", "2.0.0-alpha", prerelease: true); - ex.Message.ShouldEqual(expectedMessage); + ex.Message.Should().Be(expectedMessage); } [Fact] @@ -284,7 +284,7 @@ public void Should_throw_exception_with_expected_message_when_installing_nupkg_a var ex = TryRun(Action); var expectedMessage = GetExpectedLocalValue(string.Empty, "test", "2.0.0", prerelease: false); - ex.Message.ShouldEqual(expectedMessage); + ex.Message.Should().Be(expectedMessage); } [Fact] @@ -294,7 +294,7 @@ public void Should_throw_exception_when_passed_in_path_to_nupkg_is_relative_and_ var ex = TryRun(Action); - ex.Message.ShouldEqual("Package name cannot point directly to a local, or remote file. Please use the --source argument and point it to a local file directory, UNC directory path or a NuGet feed instead."); + ex.Message.Should().Be("Package name cannot point directly to a local, or remote file. Please use the --source argument and point it to a local file directory, UNC directory path or a NuGet feed instead."); } [Fact] @@ -303,7 +303,7 @@ public void Should_throw_exception_when_nuspec_file_is_passed_as_package_name() Configuration.PackageNames = "test-package.nuspec"; var ex = TryRun(Action); - ex.Message.ShouldEqual("Package name cannot point directly to a package manifest file. Please create a package by running 'choco pack' on the .nuspec file first."); + ex.Message.Should().Be("Package name cannot point directly to a package manifest file. Please create a package by running 'choco pack' on the .nuspec file first."); } private string GetExpectedUncValue(string path, string name, string version = null, bool prerelease = false) @@ -373,7 +373,7 @@ private static Exception TryRun(Action action) } catch (Exception ex) { - ex.ShouldBeType(); + ex.Should().BeOfType(); return ex; } } diff --git a/src/chocolatey.tests/infrastructure.app/services/FilesServiceSpecs.cs b/src/chocolatey.tests/infrastructure.app/services/FilesServiceSpecs.cs index 2c8bc54c9c..fc0d2e56af 100644 --- a/src/chocolatey.tests/infrastructure.app/services/FilesServiceSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/services/FilesServiceSpecs.cs @@ -28,7 +28,7 @@ namespace chocolatey.tests.infrastructure.app.services using chocolatey.infrastructure.results; using chocolatey.infrastructure.services; using Moq; - using Should; + using FluentAssertions; public class FilesServiceSpecs { @@ -138,13 +138,13 @@ public void Should_not_call_get_files() [Fact] public void Should_return_a_warning_if_the_install_directory_matches_choco_install_location() { - packageResult.Warning.ShouldBeTrue(); + packageResult.Warning.Should().BeTrue(); } [Fact] public void Should_return_null() { - result.ShouldBeNull(); + result.Should().BeNull(); } } @@ -174,13 +174,13 @@ public void Should_not_call_get_files() [Fact] public void Should_return_a_warning_if_the_install_directory_matches_choco_install_location() { - packageResult.Warning.ShouldBeTrue(); + packageResult.Warning.Should().BeTrue(); } [Fact] public void Should_return_null() { - result.ShouldBeNull(); + result.Should().BeNull(); } } @@ -210,13 +210,13 @@ public void Should_not_call_get_files() [Fact] public void Should_return_a_non_null_object() { - result.ShouldNotBeNull(); + result.Should().NotBeNull(); } [Fact] public void Should_return_empty_package_files() { - result.Files.ShouldBeEmpty(); + result.Files.Should().BeEmpty(); } } @@ -249,19 +249,19 @@ public override void Because() [Fact] public void Should_return_a_PackageFiles_object() { - result.ShouldNotBeNull(); + result.Should().NotBeNull(); } [Fact] public void Should_contain_package_files() { - result.Files.ShouldNotBeEmpty(); + result.Files.Should().NotBeEmpty(); } [Fact] public void Should_contain_the_correct_number_of_package_files() { - result.Files.Count.ShouldEqual(files.Count); + result.Files.Should().HaveCount(files.Count); } [Fact] diff --git a/src/chocolatey.tests/infrastructure.app/services/NugetServiceSpecs.cs b/src/chocolatey.tests/infrastructure.app/services/NugetServiceSpecs.cs index 2450e67b70..bbf04ed593 100644 --- a/src/chocolatey.tests/infrastructure.app/services/NugetServiceSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/services/NugetServiceSpecs.cs @@ -27,7 +27,7 @@ namespace chocolatey.tests.infrastructure.app.services using Moq; using NuGet.Common; using NuGet.Packaging; - using Should; + using FluentAssertions; using IFileSystem = chocolatey.infrastructure.filesystem.IFileSystem; public class NugetServiceSpecs @@ -310,8 +310,8 @@ public void Generated_package_should_be_in_current_directory() because(); var infos = MockLogger.MessagesFor(tests.LogLevel.Info); - infos.Count.ShouldEqual(1); - infos[0].ShouldEqual("Chocolatey would have searched for a nuspec file in \"c:\\projects\\chocolatey\" and attempted to compile it."); + infos.Should().ContainSingle(); + infos.Should().HaveElementAt(0,"Chocolatey would have searched for a nuspec file in \"c:\\projects\\chocolatey\" and attempted to compile it."); } [Fact] @@ -324,8 +324,8 @@ public void Generated_package_should_be_in_specified_directory() because(); var infos = MockLogger.MessagesFor(tests.LogLevel.Info); - infos.Count.ShouldEqual(1); - infos[0].ShouldEqual("Chocolatey would have searched for a nuspec file in \"c:\\packages\" and attempted to compile it."); + infos.Should().ContainSingle(); + infos.Should().HaveElementAt(0,"Chocolatey would have searched for a nuspec file in \"c:\\packages\" and attempted to compile it."); } } } diff --git a/src/chocolatey.tests/infrastructure.app/services/RegistryServiceSpecs.cs b/src/chocolatey.tests/infrastructure.app/services/RegistryServiceSpecs.cs index 2f43bec8e6..16a0657018 100644 --- a/src/chocolatey.tests/infrastructure.app/services/RegistryServiceSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/services/RegistryServiceSpecs.cs @@ -22,7 +22,7 @@ namespace chocolatey.tests.infrastructure.app.services using Microsoft.Win32; using Moq; using NUnit.Framework; - using Should; + using FluentAssertions; using Registry = chocolatey.infrastructure.app.domain.Registry; public class RegistryServiceSpecs @@ -66,7 +66,7 @@ public override void Because() [Fact] public void Should_not_be_null() { - _result.ShouldNotBeNull(); + _result.Should().NotBeNull(); } } @@ -91,25 +91,25 @@ public override void Because() [Fact] public void Should_return_a_non_null_value() { - _result.ShouldNotBeNull(); + _result.Should().NotBeNull(); } [Fact] public void Should_return_a_value_of_type_RegistryKey() { - _result.ShouldBeType(); + _result.Should().BeOfType(); } [Fact] public void Should_contain_keys() { - _result.GetSubKeyNames().ShouldNotBeEmpty(); + _result.GetSubKeyNames().Should().NotBeEmpty(); } [Fact] public void Should_contain_values() { - Service.GetKey(_hive, "Environment").GetValueNames().ShouldNotBeEmpty(); + Service.GetKey(_hive, "Environment").GetValueNames().Should().NotBeEmpty(); } } @@ -140,7 +140,7 @@ public void Should_not_error() [Fact] public void Should_return_null_key() { - _result.ShouldBeNull(); + _result.Should().BeNull(); } } diff --git a/src/chocolatey.tests/infrastructure.app/services/RulesServiceSpecs.cs b/src/chocolatey.tests/infrastructure.app/services/RulesServiceSpecs.cs index e9b4cd544c..a5a63dcd01 100644 --- a/src/chocolatey.tests/infrastructure.app/services/RulesServiceSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/services/RulesServiceSpecs.cs @@ -19,55 +19,165 @@ namespace chocolatey.tests.infrastructure.app.services using System; using System.Collections.Generic; using System.Linq; - using System.Reflection; using chocolatey.infrastructure.app.rules; using chocolatey.infrastructure.app.services; using chocolatey.infrastructure.rules; using chocolatey.infrastructure.services; - using Should; + using FluentAssertions; + using NuGet.Packaging; - public class RulesServiceSpecs : TinySpec + public class RulesServiceSpecs { - private RuleService _service; - private IReadOnlyList _detectedRules; - // We can't reference RuleIdentifiers directly as it's Internal. We should either get these from there, or do something different... - private const string EmptyRequiredElement = "CHCR0001"; - private const string InvalidTypeElement = "CHCU0001"; - private const string MissingElementOnRequiringLicenseAcceptance = "CHCR0002"; - private const string UnsupportedElementUsed = "CHCU0002"; - - public override void Context() + [Categories.RuleEngine] + public abstract class RulesServiceSpecsBase : TinySpec { - Type[] availableRules = typeof(IRuleService).Assembly + protected RuleService Service; + protected IReadOnlyList DetectedRules; + + public override void Context() + { + var rules = GetRules(); + + Service = new RuleService(rules.ToArray()); + } + + public override void Because() + { + DetectedRules = Service.GetAllAvailableRules(); + } + + protected abstract IEnumerable GetRules(); + } + + public class WhenGettingAllAvailableRulesShouldGetTheExpectedRules : RulesServiceSpecsBase + { + // We can't reference RuleIdentifiers directly as it's Internal. We should either get these from there, or do something different... + private const string EmptyRequiredElement = "CHCR0001"; + + private const string InvalidTypeElement = "CHCU0001"; + private const string MissingElementOnRequiringLicenseAcceptance = "CHCR0002"; + private const string UnsupportedElementUsed = "CHCU0002"; + + protected override IEnumerable GetRules() + { + Type[] availableRules = typeof(IRuleService).Assembly .GetTypes() .Where(t => !t.IsInterface && !t.IsAbstract && typeof(IMetadataRule).IsAssignableFrom(t)) .ToArray(); - var rules = new List(); + var rules = new List(); - foreach (Type availableRule in availableRules) - { - // We do first here as we want it to fail if the constructor can't be found. - var rule = availableRule.GetConstructors().First().Invoke(new object[] { }); - rules.Add((MetadataRuleBase)rule); + foreach (Type availableRule in availableRules) + { + // We do first here as we want it to fail if the constructor can't be found. + var rule = availableRule.GetConstructors().First().Invoke(new object[] { }); + rules.Add((MetadataRuleBase)rule); + } + + return rules; } - _service = new RuleService(rules.ToArray()); + [Fact] + public void GetsRulesFromService() + { + DetectedRules.Should().HaveCount(4); + var ruleIds = DetectedRules.Select(t => t.Id); + + ruleIds.Should().ContainInOrder(new[] + { + EmptyRequiredElement, + MissingElementOnRequiringLicenseAcceptance, + InvalidTypeElement, + UnsupportedElementUsed, + }); + } } - public override void Because() + public class WhenTwoAvailableRulesContainsNoIdentifierAndWithTheSameSummary : RulesServiceSpecsBase { - _detectedRules = _service.GetAllAvailableRules(); + private static readonly ImmutableRule _expectedRule = new ImmutableRule(RuleType.Warning, string.Empty, "Some summary"); + + protected override IEnumerable GetRules() + { + yield return new EmptyRulesValidator(); + } + + [Fact] + public void ShouldHaveOnlyASingleResult() + { + DetectedRules.Should().ContainSingle(); + } + + [Fact] + public void ShouldOnlyContainsTheFirstFoundItem() + { + DetectedRules.Should().ContainEquivalentOf(_expectedRule); + } + + private class EmptyRulesValidator : IMetadataRule + { + public IReadOnlyList GetAvailableRules() + { + return new[] + { + _expectedRule, + new ImmutableRule(RuleType.Error, string.Empty, "Some summary") + }; + } + + public IEnumerable Validate(NuspecReader reader) + { + throw new NotImplementedException(); + } + + public IEnumerable validate(NuspecReader reader) + { + throw new NotImplementedException(); + } + } } - [Fact] - public void GetsRulesFromService() + public class WhenTwoAvailableRulesContainNoIdentifierWithDifferentSummaries : RulesServiceSpecsBase { - _detectedRules.Count().ShouldEqual(4); - IEnumerable ruleIds = _detectedRules.Select(t => t.Id); - ruleIds.ShouldContain(UnsupportedElementUsed); - ruleIds.ShouldContain(EmptyRequiredElement); - ruleIds.ShouldContain(InvalidTypeElement); - ruleIds.ShouldContain(MissingElementOnRequiringLicenseAcceptance); + protected override IEnumerable GetRules() + { + yield return new EmptyRulesValidator(); + } + + [Fact] + public void ShouldHaveGottenTwoAvailableRules() + { + DetectedRules.Should().HaveCount(2); + } + + [Fact] + public void ShouldHaveGottenExpectedRules() + { + var ruleSummaries = DetectedRules.Select(t => t.Summary); + + ruleSummaries.Should().ContainInOrder("Some summary of rule 2", "Some summary of rule 1"); + } + + private class EmptyRulesValidator : IMetadataRule + { + public IReadOnlyList GetAvailableRules() + { + return new[] + { + new ImmutableRule(RuleType.Warning, string.Empty, "Some summary of rule 1"), + new ImmutableRule(RuleType.Error, string.Empty, "Some summary of rule 2") + }; + } + + public IEnumerable Validate(NuspecReader reader) + { + throw new NotImplementedException(); + } + + public IEnumerable validate(NuspecReader reader) + { + throw new NotImplementedException(); + } + } } } -} +} \ No newline at end of file diff --git a/src/chocolatey.tests/infrastructure.app/services/TemplateServiceSpecs.cs b/src/chocolatey.tests/infrastructure.app/services/TemplateServiceSpecs.cs index 6e719aa1f5..25eecef08f 100644 --- a/src/chocolatey.tests/infrastructure.app/services/TemplateServiceSpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/services/TemplateServiceSpecs.cs @@ -30,7 +30,7 @@ namespace chocolatey.tests.infrastructure.app.services using Moq; using NuGet.Common; using NUnit.Framework; - using Should; + using FluentAssertions; using LogLevel = tests.LogLevel; public class TemplateServiceSpecs @@ -80,8 +80,8 @@ public void Should_log_current_directory_if_no_outputdirectory() because(); var infos = MockLogger.MessagesFor(LogLevel.Info); - infos.Count.ShouldEqual(1); - infos[0].ShouldEqual("Would have generated a new package specification at c:\\chocolatey\\Bob"); + infos.Should().ContainSingle(); + infos.Should().HaveElementAt(0,"Would have generated a new package specification at c:\\chocolatey\\Bob"); } [Fact] @@ -92,8 +92,8 @@ public void Should_log_output_directory_if_outputdirectory_is_specified() because(); var infos = MockLogger.MessagesFor(LogLevel.Info); - infos.Count.ShouldEqual(1); - infos[0].ShouldEqual("Would have generated a new package specification at c:\\packages\\Bob"); + infos.Should().ContainSingle(); + infos.Should().HaveElementAt(0,"Would have generated a new package specification at c:\\packages\\Bob"); } } @@ -132,8 +132,8 @@ public void Should_write_file_withe_replaced_tokens() because(); var debugs = MockLogger.MessagesFor(LogLevel.Debug); - debugs.Count.ShouldEqual(1); - debugs[0].ShouldEqual("Bob"); + debugs.Should().ContainSingle(); + debugs.Should().HaveElementAt(0,"Bob"); } [Fact] @@ -144,12 +144,12 @@ public void Should_log_info_if_regular_output() because(); var debugs = MockLogger.MessagesFor(LogLevel.Debug); - debugs.Count.ShouldEqual(1); - debugs[0].ShouldEqual("Bob"); + debugs.Should().ContainSingle(); + debugs.Should().HaveElementAt(0,"Bob"); var infos = MockLogger.MessagesFor(LogLevel.Info); - infos.Count.ShouldEqual(1); - infos[0].ShouldEqual(string.Format(@"Generating template to a file{0} at 'c:\packages\bob.nuspec'", Environment.NewLine)); + infos.Should().ContainSingle(); + infos.Should().HaveElementAt(0,string.Format(@"Generating template to a file{0} at 'c:\packages\bob.nuspec'", Environment.NewLine)); } } @@ -202,9 +202,9 @@ public void Should_throw_exception() errorMessage = ex.Message; } - errored.ShouldBeTrue(); - errorMessage.ShouldEqual(string.Format("The location for the template already exists. You can:{0} 1. Remove 'c:\\chocolatey\\Bob'{0} 2. Use --force{0} 3. Specify a different name", Environment.NewLine)); - verifiedDirectoryPath.ShouldEqual("c:\\chocolatey\\Bob"); + errored.Should().BeTrue(); + errorMessage.Should().Be(string.Format("The location for the template already exists. You can:{0} 1. Remove 'c:\\chocolatey\\Bob'{0} 2. Use --force{0} 3. Specify a different name", Environment.NewLine)); + verifiedDirectoryPath.Should().Be("c:\\chocolatey\\Bob"); } [Fact] @@ -225,9 +225,9 @@ public void Should_throw_exception_even_with_outputdirectory() errorMessage = ex.Message; } - errored.ShouldBeTrue(); - errorMessage.ShouldEqual(string.Format("The location for the template already exists. You can:{0} 1. Remove 'c:\\packages\\Bob'{0} 2. Use --force{0} 3. Specify a different name", Environment.NewLine)); - verifiedDirectoryPath.ShouldEqual("c:\\packages\\Bob"); + errored.Should().BeTrue(); + errorMessage.Should().Be(string.Format("The location for the template already exists. You can:{0} 1. Remove 'c:\\packages\\Bob'{0} 2. Use --force{0} 3. Specify a different name", Environment.NewLine)); + verifiedDirectoryPath.Should().Be("c:\\packages\\Bob"); } } @@ -294,15 +294,15 @@ public void Should_generate_all_files_and_directories() because(); var directories = directoryCreated.ToList(); - directories.Count.ShouldEqual(2, "There should be 2 directories, but there was: " + string.Join(", ", directories)); - directories[0].ShouldEqual("c:\\chocolatey\\Bob"); - directories[1].ShouldEqual("c:\\chocolatey\\Bob\\tools"); + directories.Should().HaveCount(2, "There should be 2 directories, but there was: " + string.Join(", ", directories)); + directories.Should().HaveElementAt(0,"c:\\chocolatey\\Bob"); + directories.Should().HaveElementAt(1,"c:\\chocolatey\\Bob\\tools"); - files.Count.ShouldEqual(2, "There should be 2 files, but there was: " + string.Join(", ", files)); - files[0].ShouldEqual("c:\\chocolatey\\Bob\\__name_replace__.nuspec"); - files[1].ShouldEqual("c:\\chocolatey\\Bob\\random.txt"); + files.Should().HaveCount(2, "There should be 2 files, but there was: " + string.Join(", ", files)); + files.Should().HaveElementAt(0,"c:\\chocolatey\\Bob\\__name_replace__.nuspec"); + files.Should().HaveElementAt(1,"c:\\chocolatey\\Bob\\random.txt"); - MockLogger.MessagesFor(LogLevel.Info).Last().ShouldEqual(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\chocolatey\Bob'", Environment.NewLine)); + MockLogger.MessagesFor(LogLevel.Info).Last().Should().Be(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\chocolatey\Bob'", Environment.NewLine)); } [Fact] @@ -313,15 +313,15 @@ public void Should_generate_all_files_and_directories_even_with_outputdirectory( because(); var directories = directoryCreated.ToList(); - directories.Count.ShouldEqual(2, "There should be 2 directories, but there was: " + string.Join(", ", directories)); - directories[0].ShouldEqual("c:\\packages\\Bob"); - directories[1].ShouldEqual("c:\\packages\\Bob\\tools"); + directories.Should().HaveCount(2, "There should be 2 directories, but there was: " + string.Join(", ", directories)); + directories.Should().HaveElementAt(0,"c:\\packages\\Bob"); + directories.Should().HaveElementAt(1,"c:\\packages\\Bob\\tools"); - files.Count.ShouldEqual(2, "There should be 2 files, but there was: " + string.Join(", ", files)); - files[0].ShouldEqual("c:\\packages\\Bob\\__name_replace__.nuspec"); - files[1].ShouldEqual("c:\\packages\\Bob\\random.txt"); + files.Should().HaveCount(2, "There should be 2 files, but there was: " + string.Join(", ", files)); + files.Should().HaveElementAt(0,"c:\\packages\\Bob\\__name_replace__.nuspec"); + files.Should().HaveElementAt(1,"c:\\packages\\Bob\\random.txt"); - MockLogger.MessagesFor(LogLevel.Info).Last().ShouldEqual(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\packages\Bob'", Environment.NewLine)); + MockLogger.MessagesFor(LogLevel.Info).Last().Should().Be(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\packages\Bob'", Environment.NewLine)); } } @@ -392,18 +392,18 @@ public void Should_generate_all_files_and_directories() because(); var directories = directoryCreated.ToList(); - directories.Count.ShouldEqual(3, "There should be 3 directories, but there was: " + string.Join(", ", directories)); - directories[0].ShouldEqual("c:\\chocolatey\\Bob"); - directories[1].ShouldEqual("c:\\chocolatey\\Bob\\tools"); - directories[2].ShouldEqual("c:\\chocolatey\\Bob\\tools\\lower"); + directories.Should().HaveCount(3, "There should be 3 directories, but there was: " + string.Join(", ", directories)); + directories.Should().HaveElementAt(0,"c:\\chocolatey\\Bob"); + directories.Should().HaveElementAt(1,"c:\\chocolatey\\Bob\\tools"); + directories.Should().HaveElementAt(2,"c:\\chocolatey\\Bob\\tools\\lower"); - files.Count.ShouldEqual(4, "There should be 4 files, but there was: " + string.Join(", ", files)); - files[0].ShouldEqual("c:\\chocolatey\\Bob\\__name_replace__.nuspec"); - files[1].ShouldEqual("c:\\chocolatey\\Bob\\random.txt"); - files[2].ShouldEqual("c:\\chocolatey\\Bob\\tools\\chocolateyInstall.ps1"); - files[3].ShouldEqual("c:\\chocolatey\\Bob\\tools\\lower\\another.ps1"); + files.Should().HaveCount(4, "There should be 4 files, but there was: " + string.Join(", ", files)); + files.Should().HaveElementAt(0,"c:\\chocolatey\\Bob\\__name_replace__.nuspec"); + files.Should().HaveElementAt(1,"c:\\chocolatey\\Bob\\random.txt"); + files.Should().HaveElementAt(2,"c:\\chocolatey\\Bob\\tools\\chocolateyInstall.ps1"); + files.Should().HaveElementAt(3,"c:\\chocolatey\\Bob\\tools\\lower\\another.ps1"); - MockLogger.MessagesFor(LogLevel.Info).Last().ShouldEqual(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\chocolatey\Bob'", Environment.NewLine)); + MockLogger.MessagesFor(LogLevel.Info).Last().Should().Be(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\chocolatey\Bob'", Environment.NewLine)); } [Fact] @@ -414,18 +414,18 @@ public void Should_generate_all_files_and_directories_even_with_outputdirectory( because(); var directories = directoryCreated.ToList(); - directories.Count.ShouldEqual(3, "There should be 3 directories, but there was: " + string.Join(", ", directories)); - directories[0].ShouldEqual("c:\\packages\\Bob"); - directories[1].ShouldEqual("c:\\packages\\Bob\\tools"); - directories[2].ShouldEqual("c:\\packages\\Bob\\tools\\lower"); + directories.Should().HaveCount(3, "There should be 3 directories, but there was: " + string.Join(", ", directories)); + directories.Should().HaveElementAt(0,"c:\\packages\\Bob"); + directories.Should().HaveElementAt(1,"c:\\packages\\Bob\\tools"); + directories.Should().HaveElementAt(2,"c:\\packages\\Bob\\tools\\lower"); - files.Count.ShouldEqual(4, "There should be 4 files, but there was: " + string.Join(", ", files)); - files[0].ShouldEqual("c:\\packages\\Bob\\__name_replace__.nuspec"); - files[1].ShouldEqual("c:\\packages\\Bob\\random.txt"); - files[2].ShouldEqual("c:\\packages\\Bob\\tools\\chocolateyInstall.ps1"); - files[3].ShouldEqual("c:\\packages\\Bob\\tools\\lower\\another.ps1"); + files.Should().HaveCount(4, "There should be 4 files, but there was: " + string.Join(", ", files)); + files.Should().HaveElementAt(0,"c:\\packages\\Bob\\__name_replace__.nuspec"); + files.Should().HaveElementAt(1,"c:\\packages\\Bob\\random.txt"); + files.Should().HaveElementAt(2,"c:\\packages\\Bob\\tools\\chocolateyInstall.ps1"); + files.Should().HaveElementAt(3,"c:\\packages\\Bob\\tools\\lower\\another.ps1"); - MockLogger.MessagesFor(LogLevel.Info).Last().ShouldEqual(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\packages\Bob'", Environment.NewLine)); + MockLogger.MessagesFor(LogLevel.Info).Last().Should().Be(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\packages\Bob'", Environment.NewLine)); } } @@ -496,20 +496,20 @@ public void Should_generate_all_files_and_directories() because(); var directories = directoryCreated.ToList(); - directories.Count.ShouldEqual(5, "There should be 5 directories, but there was: " + string.Join(", ", directories)); - directories[0].ShouldEqual("c:\\chocolatey\\Bob"); - directories[1].ShouldEqual("c:\\chocolatey\\Bob\\tools"); - directories[2].ShouldEqual("c:\\chocolatey\\Bob\\tools\\lower"); - directories[3].ShouldEqual("c:\\chocolatey\\Bob\\empty"); - directories[4].ShouldEqual("c:\\chocolatey\\Bob\\empty\\nested"); + directories.Should().HaveCount(5, "There should be 5 directories, but there was: " + string.Join(", ", directories)); + directories.Should().HaveElementAt(0,"c:\\chocolatey\\Bob"); + directories.Should().HaveElementAt(1,"c:\\chocolatey\\Bob\\tools"); + directories.Should().HaveElementAt(2,"c:\\chocolatey\\Bob\\tools\\lower"); + directories.Should().HaveElementAt(3,"c:\\chocolatey\\Bob\\empty"); + directories.Should().HaveElementAt(4,"c:\\chocolatey\\Bob\\empty\\nested"); - files.Count.ShouldEqual(4, "There should be 4 files, but there was: " + string.Join(", ", files)); - files[0].ShouldEqual("c:\\chocolatey\\Bob\\__name_replace__.nuspec"); - files[1].ShouldEqual("c:\\chocolatey\\Bob\\random.txt"); - files[2].ShouldEqual("c:\\chocolatey\\Bob\\tools\\chocolateyInstall.ps1"); - files[3].ShouldEqual("c:\\chocolatey\\Bob\\tools\\lower\\another.ps1"); + files.Should().HaveCount(4, "There should be 4 files, but there was: " + string.Join(", ", files)); + files.Should().HaveElementAt(0,"c:\\chocolatey\\Bob\\__name_replace__.nuspec"); + files.Should().HaveElementAt(1,"c:\\chocolatey\\Bob\\random.txt"); + files.Should().HaveElementAt(2,"c:\\chocolatey\\Bob\\tools\\chocolateyInstall.ps1"); + files.Should().HaveElementAt(3,"c:\\chocolatey\\Bob\\tools\\lower\\another.ps1"); - MockLogger.MessagesFor(LogLevel.Info).Last().ShouldEqual(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\chocolatey\Bob'", Environment.NewLine)); + MockLogger.MessagesFor(LogLevel.Info).Last().Should().Be(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\chocolatey\Bob'", Environment.NewLine)); } [Fact] @@ -520,20 +520,20 @@ public void Should_generate_all_files_and_directories_even_with_outputdirectory( because(); var directories = directoryCreated.ToList(); - directories.Count.ShouldEqual(5, "There should be 5 directories, but there was: " + string.Join(", ", directories)); - directories[0].ShouldEqual("c:\\packages\\Bob"); - directories[1].ShouldEqual("c:\\packages\\Bob\\tools"); - directories[2].ShouldEqual("c:\\packages\\Bob\\tools\\lower"); - directories[3].ShouldEqual("c:\\packages\\Bob\\empty"); - directories[4].ShouldEqual("c:\\packages\\Bob\\empty\\nested"); + directories.Should().HaveCount(5, "There should be 5 directories, but there was: " + string.Join(", ", directories)); + directories.Should().HaveElementAt(0,"c:\\packages\\Bob"); + directories.Should().HaveElementAt(1,"c:\\packages\\Bob\\tools"); + directories.Should().HaveElementAt(2,"c:\\packages\\Bob\\tools\\lower"); + directories.Should().HaveElementAt(3,"c:\\packages\\Bob\\empty"); + directories.Should().HaveElementAt(4,"c:\\packages\\Bob\\empty\\nested"); - files.Count.ShouldEqual(4, "There should be 4 files, but there was: " + string.Join(", ", files)); - files[0].ShouldEqual("c:\\packages\\Bob\\__name_replace__.nuspec"); - files[1].ShouldEqual("c:\\packages\\Bob\\random.txt"); - files[2].ShouldEqual("c:\\packages\\Bob\\tools\\chocolateyInstall.ps1"); - files[3].ShouldEqual("c:\\packages\\Bob\\tools\\lower\\another.ps1"); + files.Should().HaveCount(4, "There should be 4 files, but there was: " + string.Join(", ", files)); + files.Should().HaveElementAt(0,"c:\\packages\\Bob\\__name_replace__.nuspec"); + files.Should().HaveElementAt(1,"c:\\packages\\Bob\\random.txt"); + files.Should().HaveElementAt(2,"c:\\packages\\Bob\\tools\\chocolateyInstall.ps1"); + files.Should().HaveElementAt(3,"c:\\packages\\Bob\\tools\\lower\\another.ps1"); - MockLogger.MessagesFor(LogLevel.Info).Last().ShouldEqual(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\packages\Bob'", Environment.NewLine)); + MockLogger.MessagesFor(LogLevel.Info).Last().Should().Be(string.Format(@"Successfully generated Bob package specification files{0} at 'c:\packages\Bob'", Environment.NewLine)); } } @@ -571,7 +571,7 @@ public void Should_use_null_value_for_template() { because(); - config.NewCommand.TemplateName.ShouldBeNull(); + config.NewCommand.TemplateName.Should().BeNull(); } } @@ -616,7 +616,7 @@ public void Should_use_template_name_from_configuration() { because(); - config.NewCommand.TemplateName.ShouldEqual("msi"); + config.NewCommand.TemplateName.Should().Be("msi"); } } @@ -662,7 +662,7 @@ public void Should_use_template_name_from_command_line_option() { because(); - config.NewCommand.TemplateName.ShouldEqual("zip"); + config.NewCommand.TemplateName.Should().Be("zip"); } } @@ -696,7 +696,7 @@ public void Should_use_null_value_for_template() { because(); - config.NewCommand.TemplateName.ShouldBeNull(); + config.NewCommand.TemplateName.Should().BeNull(); } } @@ -731,7 +731,7 @@ public void Should_use_null_value_for_template() { because(); - config.NewCommand.TemplateName.ShouldBeNull(); + config.NewCommand.TemplateName.Should().BeNull(); } } @@ -777,7 +777,7 @@ public void Should_use_template_name_from_command_line_option() { because(); - config.NewCommand.TemplateName.ShouldEqual("zip"); + config.NewCommand.TemplateName.Should().Be("zip"); } } @@ -824,7 +824,7 @@ public void Should_use_template_name_from_command_line_option() { because(); - config.NewCommand.TemplateName.ShouldEqual("zip"); + config.NewCommand.TemplateName.Should().Be("zip"); } } @@ -849,8 +849,8 @@ public void Should_log_template_location_if_no_template_name() because(); var infos = MockLogger.MessagesFor(LogLevel.Info); - infos.Count.ShouldEqual(1); - infos[0].ShouldEqual("Would have listed templates in {0}".FormatWith(ApplicationParameters.TemplatesLocation)); + infos.Should().ContainSingle(); + infos.Should().HaveElementAt(0,"Would have listed templates in {0}".FormatWith(ApplicationParameters.TemplatesLocation)); } [Fact] @@ -860,8 +860,8 @@ public void Should_log_template_name_if_template_name() because(); var infos = MockLogger.MessagesFor(LogLevel.Info); - infos.Count.ShouldEqual(1); - infos[0].ShouldEqual("Would have listed information about {0}".FormatWith(config.TemplateCommand.Name)); + infos.Should().ContainSingle(); + infos.Should().HaveElementAt(0,"Would have listed information about {0}".FormatWith(config.TemplateCommand.Name)); } } } diff --git a/src/chocolatey.tests/infrastructure.app/utility/ArgumentsUtilitySpecs.cs b/src/chocolatey.tests/infrastructure.app/utility/ArgumentsUtilitySpecs.cs index a0b6c88cc6..a21daa2b91 100644 --- a/src/chocolatey.tests/infrastructure.app/utility/ArgumentsUtilitySpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/utility/ArgumentsUtilitySpecs.cs @@ -2,7 +2,7 @@ { using chocolatey.infrastructure.app.utility; using NUnit.Framework; - using Should; + using FluentAssertions; public class ArgumentsUtilitySpecs { @@ -55,7 +55,7 @@ public override void Because() [Fact] public void Should_return_expected_result() { - _result.ShouldEqual(_expectedResult); + _result.Should().Be(_expectedResult); } } } diff --git a/src/chocolatey.tests/infrastructure.app/utility/PackageUtilitySpecs.cs b/src/chocolatey.tests/infrastructure.app/utility/PackageUtilitySpecs.cs index f1a4895963..ea81e2d309 100644 --- a/src/chocolatey.tests/infrastructure.app/utility/PackageUtilitySpecs.cs +++ b/src/chocolatey.tests/infrastructure.app/utility/PackageUtilitySpecs.cs @@ -19,7 +19,7 @@ namespace chocolatey.tests.infrastructure.app.utility using chocolatey.infrastructure.app.configuration; using chocolatey.infrastructure.platforms; using NUnit.Framework; - using Should; + using FluentAssertions; public class PackageUtilitySpecs { @@ -67,7 +67,7 @@ public override void Because() [Fact] public void Should_return_expected_result() { - _result.ShouldEqual(_expectedResult); + _result.Should().Be(_expectedResult); } } } diff --git a/src/chocolatey.tests/infrastructure/commandline/InteractivePromptSpecs.cs b/src/chocolatey.tests/infrastructure/commandline/InteractivePromptSpecs.cs index 183b03c635..41dad61211 100644 --- a/src/chocolatey.tests/infrastructure/commandline/InteractivePromptSpecs.cs +++ b/src/chocolatey.tests/infrastructure/commandline/InteractivePromptSpecs.cs @@ -21,7 +21,7 @@ namespace chocolatey.tests.infrastructure.commandline using chocolatey.infrastructure.adapters; using chocolatey.infrastructure.commandline; using Moq; - using Should; + using FluentAssertions; public class InteractivePromptSpecs { @@ -73,7 +73,7 @@ public void Should_error_when_the_choicelist_is_null() errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.Never); } @@ -94,8 +94,8 @@ public void Should_error_when_the_choicelist_is_empty() errorMessage = ex.Message; } - errored.ShouldBeTrue(); - errorMessage.ShouldContain("No choices passed in."); + errored.Should().BeTrue(); + errorMessage.Should().Contain("No choices passed in."); console.Verify(c => c.ReadLine(), Times.Never); } @@ -118,7 +118,7 @@ public void Should_error_when_the_prompt_input_is_null() errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.Never); } @@ -144,9 +144,9 @@ public void Should_error_when_the_default_choice_is_not_in_list() errorMessage = ex.Message; } - result.ShouldNotEqual("maybe"); - errored.ShouldBeTrue(); - errorMessage.ShouldEqual("Default choice value must be one of the given choices."); + result.Should().NotBe("maybe"); + errored.Should().BeTrue(); + errorMessage.Should().Be("Default choice value must be one of the given choices."); console.Verify(c => c.ReadLine(), Times.Never); } } @@ -171,7 +171,7 @@ public void Should_return_null_when_no_answer_given() { console.Setup(c => c.ReadLine()).Returns(""); //Enter pressed var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -179,7 +179,7 @@ public void Should_return_first_choice_when_1_is_given() { console.Setup(c => c.ReadLine()).Returns("1"); var result = prompt(); - result.ShouldEqual(choices[0]); + result.Should().Be(choices[0]); } [Fact] @@ -187,7 +187,7 @@ public void Should_return_first_choice_when_value_of_choice_is_given() { console.Setup(c => c.ReadLine()).Returns("yes"); var result = prompt(); - result.ShouldEqual(choices[0]); + result.Should().Be(choices[0]); } [Fact] @@ -195,7 +195,7 @@ public void Should_return_second_choice_when_2_is_given() { console.Setup(c => c.ReadLine()).Returns("2"); var result = prompt(); - result.ShouldEqual(choices[1]); + result.Should().Be(choices[1]); } [Fact] @@ -203,7 +203,7 @@ public void Should_return_null_choice_when_3_is_given() { console.Setup(c => c.ReadLine()).Returns("3"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -211,7 +211,7 @@ public void Should_return_null_choice_when_4_is_given() { console.Setup(c => c.ReadLine()).Returns("4"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -219,7 +219,7 @@ public void Should_return_null_choice_when_0_is_given() { console.Setup(c => c.ReadLine()).Returns("0"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -227,7 +227,7 @@ public void Should_return_null_choice_when_negative_1_is_given() { console.Setup(c => c.ReadLine()).Returns("-1"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -235,7 +235,7 @@ public void Should_return_null_choice_when_alphabetical_characters_are_given() { console.Setup(c => c.ReadLine()).Returns("abc"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } } @@ -268,7 +268,7 @@ public void Should_error_when_no_answer_given() { errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.AtLeast(8)); } @@ -277,7 +277,7 @@ public void Should_return_first_choice_when_1_is_given() { console.Setup(c => c.ReadLine()).Returns("1"); var result = prompt(); - result.ShouldEqual(choices[0]); + result.Should().Be(choices[0]); } [Fact] @@ -285,7 +285,7 @@ public void Should_return_second_choice_when_2_is_given() { console.Setup(c => c.ReadLine()).Returns("2"); var result = prompt(); - result.ShouldEqual(choices[1]); + result.Should().Be(choices[1]); } [Fact] @@ -302,7 +302,7 @@ public void Should_error_when_any_choice_not_available_is_given() { errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.AtLeast(8)); } } @@ -327,7 +327,7 @@ public void Should_return_default_when_no_answer_given() { console.Setup(c => c.ReadLine()).Returns(""); //Enter pressed var result = prompt(); - result.ShouldEqual(choices[1]); + result.Should().Be(choices[1]); } [Fact] @@ -335,7 +335,7 @@ public void Should_return_first_choice_when_1_is_given() { console.Setup(c => c.ReadLine()).Returns("1"); var result = prompt(); - result.ShouldEqual(choices[0]); + result.Should().Be(choices[0]); } [Fact] @@ -343,7 +343,7 @@ public void Should_return_second_choice_when_2_is_given() { console.Setup(c => c.ReadLine()).Returns("2"); var result = prompt(); - result.ShouldEqual(choices[1]); + result.Should().Be(choices[1]); } [Fact] @@ -351,7 +351,7 @@ public void Should_return_null_choice_when_3_is_given() { console.Setup(c => c.ReadLine()).Returns("3"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -359,7 +359,7 @@ public void Should_return_null_choice_when_4_is_given() { console.Setup(c => c.ReadLine()).Returns("4"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -367,7 +367,7 @@ public void Should_return_null_choice_when_0_is_given() { console.Setup(c => c.ReadLine()).Returns("0"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -375,7 +375,7 @@ public void Should_return_null_choice_when_negative_1_is_given() { console.Setup(c => c.ReadLine()).Returns("-1"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } [Fact] @@ -383,7 +383,7 @@ public void Should_return_null_choice_when_alphabetical_characters_are_given() { console.Setup(c => c.ReadLine()).Returns("abc"); var result = prompt(); - result.ShouldBeNull(); + result.Should().BeNull(); } } @@ -407,7 +407,7 @@ public void Should_error_when_no_answer_given() { console.Setup(c => c.ReadLine()).Returns(""); //Enter pressed var result = prompt(); - result.ShouldEqual(choices[0]); + result.Should().Be(choices[0]); } [Fact] @@ -415,7 +415,7 @@ public void Should_return_first_choice_when_1_is_given() { console.Setup(c => c.ReadLine()).Returns("1"); var result = prompt(); - result.ShouldEqual(choices[0]); + result.Should().Be(choices[0]); } [Fact] @@ -423,7 +423,7 @@ public void Should_return_second_choice_when_2_is_given() { console.Setup(c => c.ReadLine()).Returns("2"); var result = prompt(); - result.ShouldEqual(choices[1]); + result.Should().Be(choices[1]); } [Fact] @@ -440,7 +440,7 @@ public void Should_error_when_any_choice_not_available_is_given() { errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.AtLeast(8)); } } @@ -470,7 +470,7 @@ public void Should_error_when_the_choicelist_is_null() errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.Never); } @@ -491,8 +491,8 @@ public void Should_error_when_the_choicelist_is_empty() errorMessage = ex.Message; } - errored.ShouldBeTrue(); - errorMessage.ShouldContain("No choices passed in."); + errored.Should().BeTrue(); + errorMessage.Should().Contain("No choices passed in."); console.Verify(c => c.ReadLine(), Times.Never); } @@ -517,8 +517,8 @@ public void Should_error_when_the_prompt_input_is_null() errorMessage = ex.Message; } - errored.ShouldBeTrue(); - errorMessage.ShouldContain("Value for prompt cannot be null."); + errored.Should().BeTrue(); + errorMessage.Should().Contain("Value for prompt cannot be null."); console.Verify(c => c.ReadLine(), Times.Never); } @@ -543,8 +543,8 @@ public void Should_error_when_the_choicelist_contains_empty_values() errorMessage = ex.Message; } - errored.ShouldBeTrue(); - errorMessage.ShouldContain("Some choices are empty."); + errored.Should().BeTrue(); + errorMessage.Should().Contain("Some choices are empty."); console.Verify(c => c.ReadLine(), Times.Never); } @@ -569,8 +569,8 @@ public void Should_error_when_the_choicelist_has_multiple_items_with_same_first_ errorMessage = ex.Message; } - errored.ShouldBeTrue(); - errorMessage.ShouldContain("Multiple choices have the same first letter."); + errored.Should().BeTrue(); + errorMessage.Should().Contain("Multiple choices have the same first letter."); console.Verify(c => c.ReadLine(), Times.Never); } } @@ -604,7 +604,7 @@ public void Should_error_when_no_answer_given() { errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.AtLeast(8)); } @@ -613,7 +613,7 @@ public void Should_return_yes_when_yes_is_given() { console.Setup(c => c.ReadLine()).Returns("yes"); var result = prompt(); - result.ShouldEqual("yes"); + result.Should().Be("yes"); } [Fact] @@ -621,7 +621,7 @@ public void Should_return_yes_when_y_is_given() { console.Setup(c => c.ReadLine()).Returns("y"); var result = prompt(); - result.ShouldEqual("yes"); + result.Should().Be("yes"); } [Fact] @@ -629,7 +629,7 @@ public void Should_return_no_choice_when_no_is_given() { console.Setup(c => c.ReadLine()).Returns("no"); var result = prompt(); - result.ShouldEqual("no"); + result.Should().Be("no"); } [Fact] @@ -637,7 +637,7 @@ public void Should_return_no_choice_when_n_is_given() { console.Setup(c => c.ReadLine()).Returns("n"); var result = prompt(); - result.ShouldEqual("no"); + result.Should().Be("no"); } [Fact] @@ -654,7 +654,7 @@ public void Should_error_when_any_choice_not_available_is_given() { errored = true; } - errored.ShouldBeTrue(); + errored.Should().BeTrue(); console.Verify(c => c.ReadLine(), Times.AtLeast(8)); } } @@ -685,7 +685,7 @@ public void Should_return_all_when_full_all_answer_is_given() { console.Setup(c => c.ReadLine()).Returns("all - yes to all"); var result = prompt(); - result.ShouldEqual("all - yes to all"); + result.Should().Be("all - yes to all"); } [Fact] @@ -693,7 +693,7 @@ public void Should_return_all_when_only_all_is_given() { console.Setup(c => c.ReadLine()).Returns("all"); var result = prompt(); - result.ShouldEqual("all - yes to all"); + result.Should().Be("all - yes to all"); } } } diff --git a/src/chocolatey.tests/infrastructure/commands/CommandExecutorSpecs.cs b/src/chocolatey.tests/infrastructure/commands/CommandExecutorSpecs.cs index df582b738e..cc91a93999 100644 --- a/src/chocolatey.tests/infrastructure/commands/CommandExecutorSpecs.cs +++ b/src/chocolatey.tests/infrastructure/commands/CommandExecutorSpecs.cs @@ -22,7 +22,7 @@ namespace chocolatey.tests.infrastructure.commands using chocolatey.infrastructure.commands; using chocolatey.infrastructure.filesystem; using Moq; - using Should; + using FluentAssertions; public class CommandExecutorSpecs { @@ -94,7 +94,7 @@ public void Should_call_ExitCode() [Fact] public void Should_return_an_exit_code_of_zero_when_finished() { - result.ShouldEqual(0); + result.Should().Be(0); } } @@ -123,7 +123,7 @@ public void Should_call_WaitForExit() [Fact] public void Should_return_an_exit_code_of_negative_one_since_it_timed_out() { - result.ShouldEqual(-1); + result.Should().Be(-1); } [Fact] @@ -145,7 +145,7 @@ public override void Because() [Fact] public void Should_have_an_exit_code_of_negative_one_as_it_didnt_wait_for_finish() { - result.ShouldEqual(-1); + result.Should().Be(-1); } [Fact] diff --git a/src/chocolatey.tests/infrastructure/commands/ExternalCommandArgsBuilderSpecs.cs b/src/chocolatey.tests/infrastructure/commands/ExternalCommandArgsBuilderSpecs.cs index ddd08c029c..faedb4128c 100644 --- a/src/chocolatey.tests/infrastructure/commands/ExternalCommandArgsBuilderSpecs.cs +++ b/src/chocolatey.tests/infrastructure/commands/ExternalCommandArgsBuilderSpecs.cs @@ -20,7 +20,7 @@ namespace chocolatey.tests.infrastructure.commands using System.Collections.Generic; using chocolatey.infrastructure.app.configuration; using chocolatey.infrastructure.commands; - using Should; + using FluentAssertions; public class ExternalCommandArgsBuilderSpecs { @@ -53,7 +53,7 @@ public void Should_add_a_parameter_if_property_value_is_set() { ArgumentOption = "-source " }); - buildConfigs().ShouldEqual("-source " + configuration.Sources); + buildConfigs().Should().Be("-source " + configuration.Sources); } [Fact] @@ -66,7 +66,7 @@ public void Should_add_a_parameter_if_property_value_is_sub_property() { ArgumentOption = "-apikey " }); - buildConfigs().ShouldEqual("-apikey " + configuration.ApiKeyCommand.Key); + buildConfigs().Should().Be("-apikey " + configuration.ApiKeyCommand.Key); } [Fact] @@ -79,7 +79,7 @@ public void Should_skip_a_parameter_that_does_not_match_the_case_of_the_property { ArgumentOption = "-source " }); - buildConfigs().ShouldEqual(""); + buildConfigs().Should().Be(""); } [Fact] @@ -92,7 +92,7 @@ public void Should_add_a_parameter_that_does_not_match_the_case_of_the_property_ { ArgumentOption = "-source " }); - ExternalCommandArgsBuilder.BuildArguments(configuration, ignoreCaseDictionary).ShouldEqual("-source yo"); + ExternalCommandArgsBuilder.BuildArguments(configuration, ignoreCaseDictionary).Should().Be("-source yo"); } [Fact] @@ -106,7 +106,7 @@ public void Should_not_override_ArgumentValue_with_the_property_value_for_a_para ArgumentOption = "-source ", ArgumentValue = "bob" }); - buildConfigs().ShouldEqual("-source bob"); + buildConfigs().Should().Be("-source bob"); } [Fact] @@ -119,7 +119,7 @@ public void Should_skip_a_parameter_if_property_value_has_no_value() { ArgumentOption = "-version " }); - buildConfigs().ShouldEqual(""); + buildConfigs().Should().Be(""); } [Fact] @@ -133,7 +133,7 @@ public void Should_add_a_parameter_when_Required_set_true_even_if_property_has_n ArgumentOption = "install", Required = true }); - buildConfigs().ShouldEqual("install"); + buildConfigs().Should().Be("install"); } [Fact] @@ -146,7 +146,7 @@ public void Should_skip_a_parameter_not_found_in_the_properties_object() { ArgumentOption = "install" }); - buildConfigs().ShouldEqual(""); + buildConfigs().Should().Be(""); } [Fact] @@ -160,7 +160,7 @@ public void Should_add_a_parameter_not_found_in_the_properties_object_when_Requi ArgumentOption = "install", Required = true }); - buildConfigs().ShouldEqual("install"); + buildConfigs().Should().Be("install"); } [Fact] @@ -173,7 +173,7 @@ public void Should_add_a_boolean_as_a_switch_when_true() { ArgumentOption = "-verbose" }); - buildConfigs().ShouldEqual("-verbose"); + buildConfigs().Should().Be("-verbose"); } [Fact] @@ -186,7 +186,7 @@ public void Should_skip_a_boolean_as_a_switch_when_false() { ArgumentOption = "-pre" }); - buildConfigs().ShouldEqual(""); + buildConfigs().Should().Be(""); } [Fact] @@ -200,7 +200,7 @@ public void Should_quote_a_value_when_QuoteValue_is_set_to_true() ArgumentOption = "-source ", QuoteValue = true }); - buildConfigs().ShouldEqual("-source \"yo\""); + buildConfigs().Should().Be("-source \"yo\""); } [Fact] @@ -213,7 +213,7 @@ public void Should_auto_quote_an_argument_value_with_spaces() { ArgumentOption = "-command " }); - buildConfigs().ShouldEqual("-command \"{0}\"".FormatWith(configuration.CommandName)); + buildConfigs().Should().Be("-command \"{0}\"".FormatWith(configuration.CommandName)); } [Fact] @@ -227,7 +227,7 @@ public void Should_not_quote_an_argument_option_with_spaces() ArgumentOption = "-source you know = ", QuoteValue = true }); - buildConfigs().ShouldEqual("-source you know = \"yo\""); + buildConfigs().Should().Be("-source you know = \"yo\""); } [Fact] @@ -241,7 +241,7 @@ public void Should_use_only_the_value_when_UseValueOnly_is_set_to_true() ArgumentOption = "-source ", UseValueOnly = true }); - buildConfigs().ShouldEqual("yo"); + buildConfigs().Should().Be("yo"); } [Fact] @@ -257,7 +257,7 @@ public void Should_use_only_the_value_when_UseValueOnly_and_Required_is_set_to_t UseValueOnly = true, Required = true }); - buildConfigs().ShouldEqual("bob"); + buildConfigs().Should().Be("bob"); } [Fact] @@ -271,7 +271,7 @@ public void Should_not_add_a_value_when_UseValueOnly_is_set_to_true_and_no_value ArgumentOption = "-version ", UseValueOnly = true }); - buildConfigs().ShouldEqual(""); + buildConfigs().Should().Be(""); } [Fact] @@ -291,7 +291,7 @@ public void Should_separate_arguments_by_one_space() { ArgumentOption = "-source " }); - buildConfigs().ShouldEqual("install -source yo"); + buildConfigs().Should().Be("install -source yo"); } [Fact] @@ -336,7 +336,7 @@ public void Should_add_items_in_order_based_on_the_dictionary() Required = true }); - buildConfigs().ShouldEqual("install -outputdirectory \"bob\" -source \"{0}\" -noninteractive -nocache".FormatWith(configuration.Sources)); + buildConfigs().Should().Be("install -outputdirectory \"bob\" -source \"{0}\" -noninteractive -nocache".FormatWith(configuration.Sources)); } } } diff --git a/src/chocolatey.tests/infrastructure/commands/PowershellExecutorSpecs.cs b/src/chocolatey.tests/infrastructure/commands/PowershellExecutorSpecs.cs index 02adc4c890..7af79650b6 100644 --- a/src/chocolatey.tests/infrastructure/commands/PowershellExecutorSpecs.cs +++ b/src/chocolatey.tests/infrastructure/commands/PowershellExecutorSpecs.cs @@ -22,7 +22,7 @@ namespace chocolatey.tests.infrastructure.commands using chocolatey.infrastructure.filesystem; using Moq; using NUnit.Framework; - using Should; + using FluentAssertions; public class PowershellExecutorSpecs { @@ -55,19 +55,19 @@ public override void Because() [Fact] public void Should_not_return_null() { - result.ShouldNotBeNull(); + result.Should().NotBeNull(); } [Fact] public void Should_find_powershell() { - result.ShouldNotBeEmpty(); + result.Should().NotBeEmpty(); } [Fact] public void Should_return_the_sysnative_path() { - result.ShouldEqual(expected); + result.Should().Be(expected); } } @@ -92,7 +92,7 @@ public override void Because() [Fact] public void Should_return_system32_path() { - result.ShouldEqual(expected); + result.Should().Be(expected); } } diff --git a/src/chocolatey.tests/infrastructure/configuration/ConfigSpecs.cs b/src/chocolatey.tests/infrastructure/configuration/ConfigSpecs.cs index 952ab866f3..038ac90513 100644 --- a/src/chocolatey.tests/infrastructure/configuration/ConfigSpecs.cs +++ b/src/chocolatey.tests/infrastructure/configuration/ConfigSpecs.cs @@ -18,7 +18,7 @@ namespace chocolatey.tests.infrastructure.configuration { using chocolatey.infrastructure.app.configuration; using chocolatey.infrastructure.configuration; - using Should; + using FluentAssertions; public class ConfigSpecs { @@ -39,7 +39,7 @@ public override void Because() [Fact] public void Should_be_of_type_ChocolateyConfiguration() { - Config.GetConfigurationSettings().ShouldBeType(); + Config.GetConfigurationSettings().Should().BeOfType(); } } @@ -57,7 +57,7 @@ public override void Because() [Fact] public void Should_use_the_overridden_type() { - Config.GetConfigurationSettings().ShouldBeType(); + Config.GetConfigurationSettings().Should().BeOfType(); } } } diff --git a/src/chocolatey.tests/infrastructure/cryptography/CryptoHashProviderSpecs.cs b/src/chocolatey.tests/infrastructure/cryptography/CryptoHashProviderSpecs.cs index b11a7714a8..db4685c48e 100644 --- a/src/chocolatey.tests/infrastructure/cryptography/CryptoHashProviderSpecs.cs +++ b/src/chocolatey.tests/infrastructure/cryptography/CryptoHashProviderSpecs.cs @@ -24,7 +24,7 @@ namespace chocolatey.tests.infrastructure.cryptography using chocolatey.infrastructure.cryptography; using chocolatey.infrastructure.filesystem; using Moq; - using Should; + using FluentAssertions; public class CryptoHashProviderSpecs { @@ -62,7 +62,7 @@ public void Should_provide_the_correct_hash_based_on_a_checksum() { var expected = BitConverter.ToString(SHA256.Create().ComputeHash(byteArray)).Replace("-", string.Empty); - result.ShouldEqual(expected); + result.Should().Be(expected); } } @@ -91,7 +91,7 @@ public override void Because() [Fact] public void Should_log_a_warning() { - MockLogger.MessagesFor(LogLevel.Warn).Count.ShouldEqual(1); + MockLogger.MessagesFor(LogLevel.Warn).Should().HaveCount(1); } [Fact] @@ -103,7 +103,7 @@ public void Should_not_throw_an_error_itself() [Fact] public void Should_provide_an_unchanging_hash_for_a_file_too_big_to_hash() { - result.ShouldEqual(ApplicationParameters.HashProviderFileTooBig); + result.Should().Be(ApplicationParameters.HashProviderFileTooBig); } } } diff --git a/src/chocolatey.tests/infrastructure/events/EventSubscriptionManagerSpecs.cs b/src/chocolatey.tests/infrastructure/events/EventSubscriptionManagerSpecs.cs index f21c45ba0d..67a0512052 100644 --- a/src/chocolatey.tests/infrastructure/events/EventSubscriptionManagerSpecs.cs +++ b/src/chocolatey.tests/infrastructure/events/EventSubscriptionManagerSpecs.cs @@ -22,7 +22,7 @@ namespace chocolatey.tests.infrastructure.events using chocolatey.infrastructure.services; using context; using NUnit.Framework; - using Should; + using FluentAssertions; public class EventSubscriptionManagerSpecs { @@ -65,25 +65,25 @@ public override void Because() [Fact] public void Should_have_called_the_action() { - _wasCalled.ShouldBeTrue(); + _wasCalled.Should().BeTrue(); } [Fact] public void Should_have_passed_the_message() { - _localFakeEvent.ShouldEqual(Event); + _localFakeEvent.Should().Be(Event); } [Fact] public void Should_have_passed_the_name_correctly() { - _localFakeEvent.Name.ShouldEqual("yo"); + _localFakeEvent.Name.Should().Be("yo"); } [Fact] public void Should_have_passed_the_digits_correctly() { - _localFakeEvent.Digits.ShouldEqual(12d); + _localFakeEvent.Digits.Should().Be(12d); } } @@ -117,13 +117,13 @@ public override void Because() public void Should_wait_the_event_to_complete() { Console.WriteLine("event complete should be above this"); - _wasCalled.ShouldBeTrue(); + _wasCalled.Should().BeTrue(); } [Fact] public void Should_have_passed_the_message() { - _localFakeEvent.ShouldEqual(Event); + _localFakeEvent.Should().Be(Event); } } @@ -153,25 +153,25 @@ public override void Because() [Fact] public void Should_have_called_the_action() { - _wasCalled.ShouldBeTrue(); + _wasCalled.Should().BeTrue(); } [Fact] public void Should_have_passed_the_message() { - _localFakeEvent.ShouldEqual(Event); + _localFakeEvent.Should().Be(Event); } [Fact] public void Should_have_passed_the_name_correctly() { - _localFakeEvent.Name.ShouldEqual("yo"); + _localFakeEvent.Name.Should().Be("yo"); } [Fact] public void Should_have_passed_the_digits_correctly() { - _localFakeEvent.Digits.ShouldEqual(12d); + _localFakeEvent.Digits.Should().Be(12d); } } @@ -201,13 +201,13 @@ public override void Because() [Fact] public void Should_not_have_called_the_action() { - _wasCalled.ShouldBeFalse(); + _wasCalled.Should().BeFalse(); } [Fact] public void Should_not_have_passed_the_message() { - _localFakeEvent.ShouldNotEqual(Event); + _localFakeEvent.Should().NotBe(Event); } } @@ -253,7 +253,7 @@ public override void Because() public void Should_throw_an_error() { Assert.Throws(() => SubscriptionManager.Publish(null)); - _errored.ShouldBeTrue(); + _errored.Should().BeTrue(); } } } diff --git a/src/chocolatey.tests/infrastructure/filesystem/DotNetFileSystemSpecs.cs b/src/chocolatey.tests/infrastructure/filesystem/DotNetFileSystemSpecs.cs index 39a7ccf298..126fec8e3b 100644 --- a/src/chocolatey.tests/infrastructure/filesystem/DotNetFileSystemSpecs.cs +++ b/src/chocolatey.tests/infrastructure/filesystem/DotNetFileSystemSpecs.cs @@ -24,7 +24,7 @@ namespace chocolatey.tests.infrastructure.filesystem using chocolatey.infrastructure.platforms; using Moq; using NUnit.Framework; - using Should; + using FluentAssertions; public class DotNetFileSystemSpecs { @@ -47,37 +47,37 @@ public override void Because() [Fact] public void GetFullPath_should_return_the_full_path_to_an_item() { - FileSystem.GetFullPath("test.txt").ShouldEqual(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.txt")); + FileSystem.GetFullPath("test.txt").Should().Be(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.txt")); } [Fact] public void GetFileNameWithoutExtension_should_return_a_file_name_without_an_extension() { - FileSystem.GetFilenameWithoutExtension("test.txt").ShouldEqual("test"); + FileSystem.GetFilenameWithoutExtension("test.txt").Should().Be("test"); } [Fact] public void GetFileNameWithoutExtension_should_return_a_file_name_without_an_extension_even_with_a_full_path() { - FileSystem.GetFilenameWithoutExtension("C:\\temp\\test.txt").ShouldEqual("test"); + FileSystem.GetFilenameWithoutExtension("C:\\temp\\test.txt").Should().Be("test"); } [Fact] public void GetExtension_should_return_the_extension_of_the_filename() { - FileSystem.GetFileExtension("test.txt").ShouldEqual(".txt"); + FileSystem.GetFileExtension("test.txt").Should().Be(".txt"); } [Fact] public void GetExtension_should_return_the_extension_of_the_filename_even_with_a_full_path() { - FileSystem.GetFileExtension("C:\\temp\\test.txt").ShouldEqual(".txt"); + FileSystem.GetFileExtension("C:\\temp\\test.txt").Should().Be(".txt"); } [Fact] public void GetDirectoryName_should_return_the_directory_of_the_path_to_the_file() { - FileSystem.GetDirectoryName("C:\\temp\\test.txt").ShouldEqual( + FileSystem.GetDirectoryName("C:\\temp\\test.txt").Should().Be( Platform.GetPlatform() == PlatformType.Windows ? "C:\\temp" : "C:/temp"); @@ -86,7 +86,7 @@ public void GetDirectoryName_should_return_the_directory_of_the_path_to_the_file [Fact] public void Combine_should_combine_the_file_paths_of_all_the_included_items_together() { - FileSystem.CombinePaths("C:\\temp", "yo", "filename.txt").ShouldEqual( + FileSystem.CombinePaths("C:\\temp", "yo", "filename.txt").Should().Be( Platform.GetPlatform() == PlatformType.Windows ? "C:\\temp\\yo\\filename.txt" : "C:/temp/yo/filename.txt"); @@ -95,7 +95,7 @@ public void Combine_should_combine_the_file_paths_of_all_the_included_items_toge [Fact] public void Combine_should_combine_when_paths_have_backslashes_in_subpaths() { - FileSystem.CombinePaths("C:\\temp", "yo\\timmy", "filename.txt").ShouldEqual( + FileSystem.CombinePaths("C:\\temp", "yo\\timmy", "filename.txt").Should().Be( Platform.GetPlatform() == PlatformType.Windows ? "C:\\temp\\yo\\timmy\\filename.txt" : "C:/temp/yo/timmy/filename.txt"); @@ -104,7 +104,7 @@ public void Combine_should_combine_when_paths_have_backslashes_in_subpaths() [Fact] public void Combine_should_combine_when_paths_start_with_backslashes_in_subpaths() { - FileSystem.CombinePaths("C:\\temp", "\\yo", "filename.txt").ShouldEqual( + FileSystem.CombinePaths("C:\\temp", "\\yo", "filename.txt").Should().Be( Platform.GetPlatform() == PlatformType.Windows ? "C:\\temp\\yo\\filename.txt" : "C:/temp/yo/filename.txt"); @@ -113,7 +113,7 @@ public void Combine_should_combine_when_paths_start_with_backslashes_in_subpaths [Fact] public void Combine_should_combine_when_paths_start_with_forwardslashes_in_subpaths() { - FileSystem.CombinePaths("C:\\temp", "/yo", "filename.txt").ShouldEqual( + FileSystem.CombinePaths("C:\\temp", "/yo", "filename.txt").Should().Be( Platform.GetPlatform() == PlatformType.Windows ? "C:\\temp\\yo\\filename.txt" : "C:/temp/yo/filename.txt"); @@ -155,41 +155,38 @@ private void reset() [Fact] public void GetExecutablePath_should_find_existing_executable() { - FileSystem.GetExecutablePath("cmd").ToLowerSafe().ShouldEqual( + FileSystem.GetExecutablePath("cmd").ToLowerSafe().Should().BeEquivalentTo( Platform.GetPlatform() == PlatformType.Windows ? "c:\\windows\\system32\\cmd.exe" - : "cmd", - StringComparer.OrdinalIgnoreCase - ); + : "cmd"); } [Fact] public void GetExecutablePath_should_find_existing_executable_with_extension() { - FileSystem.GetExecutablePath("cmd.exe").ToLowerSafe().ShouldEqual( + FileSystem.GetExecutablePath("cmd.exe").ToLowerSafe().Should().BeEquivalentTo( Platform.GetPlatform() == PlatformType.Windows ? "c:\\windows\\system32\\cmd.exe" - : "cmd.exe", - StringComparer.OrdinalIgnoreCase + : "cmd.exe" ); } [Fact] public void GetExecutablePath_should_return_same_value_when_executable_is_not_found() { - FileSystem.GetExecutablePath("daslakjsfdasdfwea").ShouldEqual("daslakjsfdasdfwea"); + FileSystem.GetExecutablePath("daslakjsfdasdfwea").Should().Be("daslakjsfdasdfwea"); } [Fact] public void GetExecutablePath_should_return_empty_string_when_value_is_null() { - FileSystem.GetExecutablePath(null).ShouldEqual(string.Empty); + FileSystem.GetExecutablePath(null).Should().BeEmpty(); } [Fact] public void GetExecutablePath_should_return_empty_string_when_value_is_empty_string() { - FileSystem.GetExecutablePath(string.Empty).ShouldEqual(string.Empty); + FileSystem.GetExecutablePath(string.Empty).Should().BeEmpty(); } } @@ -217,33 +214,33 @@ public void GetExecutablePath_should_find_existing_executable() { if (Platform.GetPlatform() == PlatformType.Windows) { - FileSystem.GetExecutablePath("ls").ShouldEqual("ls"); + FileSystem.GetExecutablePath("ls").Should().Be("ls"); } else { - new string[] + FileSystem.GetExecutablePath("ls").Should().BeOneOf(new string[] { "/bin/ls", "/usr/bin/ls" - }.ShouldContain(FileSystem.GetExecutablePath("ls")); + }); } } [Fact] public void GetExecutablePath_should_return_same_value_when_executable_is_not_found() { - FileSystem.GetExecutablePath("daslakjsfdasdfwea").ShouldEqual("daslakjsfdasdfwea"); + FileSystem.GetExecutablePath("daslakjsfdasdfwea").Should().Be("daslakjsfdasdfwea"); } [Fact] public void GetExecutablePath_should_return_empty_string_when_value_is_null() { - FileSystem.GetExecutablePath(null).ShouldEqual(string.Empty); + FileSystem.GetExecutablePath(null).Should().BeEmpty(); } [Fact] public void GetExecutablePath_should_return_empty_string_when_value_is_empty_string() { - FileSystem.GetExecutablePath(string.Empty).ShouldEqual(string.Empty); + FileSystem.GetExecutablePath(string.Empty).Should().BeEmpty(); } } } diff --git a/src/chocolatey.tests/infrastructure/guards/EnsureSpecs.cs b/src/chocolatey.tests/infrastructure/guards/EnsureSpecs.cs index 2db5c954c5..995998b67f 100644 --- a/src/chocolatey.tests/infrastructure/guards/EnsureSpecs.cs +++ b/src/chocolatey.tests/infrastructure/guards/EnsureSpecs.cs @@ -20,7 +20,7 @@ namespace chocolatey.tests.infrastructure.guards using chocolatey.infrastructure.app.configuration; using chocolatey.infrastructure.guards; using Moq; - using Should; + using FluentAssertions; public class EnsureSpecs { @@ -44,14 +44,14 @@ public override void Because() [Fact] public void Should_return_a_type_of_object_for_ensuring() { - result.ShouldBeType>(); + result.Should().BeOfType>(); } [Fact] public void Should_have_the_value_specified() { var bobEnsure = result as Ensure; - bobEnsure.Value.ShouldEqual(bob); + bobEnsure.Value.Should().Be(bob); } } @@ -68,14 +68,14 @@ public override void Because() [Fact] public void Should_return_a_ensure_string_type() { - result.ShouldBeType(); + result.Should().BeOfType(); } [Fact] public void Should_have_the_value_specified() { var bobEnsure = result as EnsureString; - bobEnsure.Value.ShouldEqual(bob); + bobEnsure.Value.Should().Be(bob); } } @@ -92,7 +92,7 @@ public void When_testing_a_string_against_null_value_should_fail() Action a = () => Ensure.That(() => test).NotNullOrWhitespace(); - a.ShouldThrow(); + a.Should().Throw(); } [Fact] @@ -100,7 +100,7 @@ public void When_testing_a_string_against_an_empty_value_should_fail() { Action a = () => Ensure.That(() => string.Empty).NotNullOrWhitespace(); - a.ShouldThrow(); + a.Should().Throw(); } [Fact] @@ -110,7 +110,7 @@ public void When_testing_a_string_against_a_whitespace_value_should_fail() Action a = () => Ensure.That(() => test).NotNullOrWhitespace(); - a.ShouldThrow(); + a.Should().Throw(); } [Fact] @@ -128,7 +128,7 @@ public void When_testing_a_string_without_expected_extension_should_fail() Action a = () => Ensure.That(() => test).HasExtension(".jpg", ".bmp", ".gif"); - a.ShouldThrow(); + a.Should().Throw(); } [Fact] @@ -169,8 +169,8 @@ public void When_testing_a_null_string_against_is_not_null_should_throw_an_Argum exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("cannot be null."); } [Fact] @@ -196,8 +196,8 @@ public void When_testing_a_null_Func_against_is_not_null_should_throw_an_Argumen exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("cannot be null."); } [Fact] @@ -223,8 +223,8 @@ public void When_testing_an_uninstantiated_class_against_is_not_null_should_thro exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("cannot be null."); } [Fact] @@ -245,8 +245,8 @@ public void When_testing_meets_with_null_ensureFunction_against_string_value_sho exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("Value for ensureFunction cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("Value for ensureFunction cannot be null."); } [Fact] @@ -267,9 +267,9 @@ public void When_testing_meets_with_null_exceptionAction_against_string_value_th exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("exceptionAction"); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("exceptionAction"); + exceptionMessage.Should().Contain("cannot be null."); } [Fact] @@ -290,9 +290,9 @@ public void When_testing_meets_with_null_exceptionAction_against_string_value_th exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("exceptionAction"); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("exceptionAction"); + exceptionMessage.Should().Contain("cannot be null."); } [Fact] @@ -313,9 +313,9 @@ public void When_testing_meets_with_null_ensureFunction_against_null_value_shoul exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("ensureFunction"); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("ensureFunction"); + exceptionMessage.Should().Contain("cannot be null."); } [Fact] @@ -336,9 +336,9 @@ public void When_testing_meets_with_null_exceptionAction_against_null_value_shou exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("exceptionAction"); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("exceptionAction"); + exceptionMessage.Should().Contain("cannot be null."); } [Fact] @@ -359,9 +359,9 @@ public void When_testing_meets_with_null_everything_should_throw_ArgumentNullExc exceptionMessage = ex.Message; } - exceptionType.ShouldBeType(); - exceptionMessage.ShouldContain("ensureFunction"); - exceptionMessage.ShouldContain("cannot be null."); + exceptionType.Should().BeOfType(); + exceptionMessage.Should().Contain("ensureFunction"); + exceptionMessage.Should().Contain("cannot be null."); } } @@ -395,19 +395,19 @@ public override void Because() [Fact] public void Should_not_invoke_the_exceptionAction() { - exceptionActionInvoked.ShouldBeFalse(); + exceptionActionInvoked.Should().BeFalse(); } [Fact] public void Should_not_return_a_specified_exception_since_there_was_no_failure() { - exceptionType.ShouldBeNull(); + exceptionType.Should().BeNull(); } [Fact] public void Should_not_return_the_specified_error_message() { - exceptionMessage.ShouldNotContain("this is what we throw."); + exceptionMessage.Should().NotContain("this is what we throw."); } [Fact] @@ -447,19 +447,19 @@ public override void Because() [Fact] public void Should_invoke_the_exceptionAction() { - exceptionActionInvoked.ShouldBeTrue(); + exceptionActionInvoked.Should().BeTrue(); } [Fact] public void Should_return_the_specified_exception_of_type_ApplicationException() { - exceptionType.ShouldBeType(); + exceptionType.Should().BeOfType(); } [Fact] public void Should_return_the_specified_error_message() { - exceptionMessage.ShouldContain("this is what we throw."); + exceptionMessage.Should().Contain("this is what we throw."); } [Fact] @@ -499,25 +499,25 @@ public override void Because() [Fact] public void Should_not_invoke_the_exceptionAction() { - exceptionActionInvoked.ShouldBeFalse(); + exceptionActionInvoked.Should().BeFalse(); } [Fact] public void Should_throw_an_error() { - exceptionType.ShouldNotBeNull(); + exceptionType.Should().NotBeNull(); } [Fact] public void Should_not_return_the_specified_exception_of_type_ApplicationException() { - exceptionType.ShouldNotBeType(); + exceptionType.Should().NotBeOfType(); } [Fact] public void Should_not_return_the_specified_error_message() { - exceptionMessage.ShouldNotContain("this is what we throw."); + exceptionMessage.Should().NotContain("this is what we throw."); } //[Fact] @@ -530,9 +530,9 @@ public void Should_not_return_the_specified_error_message() // public void Should_log_the_error_we_expect() // { // var messages = MockLogger.MessagesFor(LogLevel.Error); - // messages.ShouldNotBeEmpty(); - // messages.Count.ShouldEqual(1); - // messages[0].ShouldContain("Trying to call ensureFunction on"); + // messages.Should().NotBeEmpty(); + // messages.Should().ContainSingle(); + // messages[0].Should().Contain("Trying to call ensureFunction on"); // } } } diff --git a/src/chocolatey.tests/infrastructure/information/VersionInformationSpecs.cs b/src/chocolatey.tests/infrastructure/information/VersionInformationSpecs.cs index 645d6a2e15..b1138e00ab 100644 --- a/src/chocolatey.tests/infrastructure/information/VersionInformationSpecs.cs +++ b/src/chocolatey.tests/infrastructure/information/VersionInformationSpecs.cs @@ -18,7 +18,7 @@ namespace chocolatey.tests.infrastructure.information { using System; using chocolatey.infrastructure.information; - using Should; + using FluentAssertions; public class VersionInformationSpecs { @@ -41,25 +41,25 @@ public override void Because() [Fact] public void Should_not_be_null() { - result.ShouldNotBeNull(); + result.Should().NotBeNull(); } [Fact] public void Should_not_be_empty() { - result.ShouldNotBeEmpty(); + result.Should().NotBeEmpty(); } [Fact] public void Should_be_transferable_to_Version() { - new Version(result).ShouldNotBeNull(); + new Version(result).Should().NotBeNull(); } [Fact] public void Should_not_equal_zero_dot_zero_dot_zero_dot_zero() { - result.ShouldNotEqual("0.0.0.0"); + result.Should().NotBe("0.0.0.0"); } } } diff --git a/src/chocolatey.tests/infrastructure/platforms/PlatformSpecs.cs b/src/chocolatey.tests/infrastructure/platforms/PlatformSpecs.cs index 543cde7987..8e3058aeb0 100644 --- a/src/chocolatey.tests/infrastructure/platforms/PlatformSpecs.cs +++ b/src/chocolatey.tests/infrastructure/platforms/PlatformSpecs.cs @@ -21,7 +21,7 @@ namespace chocolatey.tests.infrastructure.platforms using chocolatey.infrastructure.filesystem; using chocolatey.infrastructure.platforms; using Moq; - using Should; + using FluentAssertions; using Environment = System.Environment; public class PlatformSpecs @@ -50,7 +50,7 @@ public override void Because() [Fact] public void Should_not_be_Unknown() { - result.ShouldNotEqual(PlatformType.Unknown); + result.Should().NotBe(PlatformType.Unknown); } } @@ -72,7 +72,7 @@ public override void Because() [Fact] public void Should_return_Windows() { - result.ShouldEqual(PlatformType.Windows); + result.Should().Be(PlatformType.Windows); } } @@ -94,7 +94,7 @@ public override void Because() [Fact] public void Should_return_Mac() { - result.ShouldEqual(PlatformType.Mac); + result.Should().Be(PlatformType.Mac); } } @@ -117,7 +117,7 @@ public override void Because() [Fact] public void Should_return_Linux() { - result.ShouldEqual(PlatformType.Linux); + result.Should().Be(PlatformType.Linux); } } @@ -140,7 +140,7 @@ public override void Because() [Fact] public void Should_return_Mac() { - result.ShouldEqual(PlatformType.Mac); + result.Should().Be(PlatformType.Mac); } } } diff --git a/src/chocolatey.tests/infrastructure/tokens/TokenReplacerSpecs.cs b/src/chocolatey.tests/infrastructure/tokens/TokenReplacerSpecs.cs index d3f48a2be5..1463a66d3a 100644 --- a/src/chocolatey.tests/infrastructure/tokens/TokenReplacerSpecs.cs +++ b/src/chocolatey.tests/infrastructure/tokens/TokenReplacerSpecs.cs @@ -19,7 +19,7 @@ namespace chocolatey.tests.infrastructure.tokens using System.Collections.Generic; using chocolatey.infrastructure.app.configuration; using chocolatey.infrastructure.tokens; - using Should; + using FluentAssertions; public class TokenReplacerSpecs { @@ -43,67 +43,67 @@ public override void Because() [Fact] public void When_given_brace_brace_CommandName_brace_brace_should_replace_with_the_Name_from_the_configuration() { - TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[CommandName]]").ShouldEqual("Hi! My name is " + name); + TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[CommandName]]").Should().Be("Hi! My name is " + name); } [Fact] public void When_given_brace_CommandName_brace_should_NOT_replace_the_value() { - TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [CommandName]").ShouldEqual("Hi! My name is [CommandName]"); + TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [CommandName]").Should().Be("Hi! My name is [CommandName]"); } [Fact] public void When_given_a_value_that_is_the_name_of_a_configuration_item_but_is_not_properly_tokenized_it_should_NOT_replace_the_value() { - TokenReplacer.ReplaceTokens(configuration, "Hi! My name is CommandName").ShouldEqual("Hi! My name is CommandName"); + TokenReplacer.ReplaceTokens(configuration, "Hi! My name is CommandName").Should().Be("Hi! My name is CommandName"); } [Fact] public void When_given_brace_brace_commandname_brace_brace_should_replace_with_the_Name_from_the_configuration() { - TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[commandname]]").ShouldEqual("Hi! My name is " + name); + TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[commandname]]").Should().Be("Hi! My name is " + name); } [Fact] public void When_given_brace_brace_COMMANDNAME_brace_brace_should_replace_with_the_Name_from_the_configuration() { - TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[COMMANDNAME]]").ShouldEqual("Hi! My name is " + name); + TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[COMMANDNAME]]").Should().Be("Hi! My name is " + name); } [Fact] public void When_given_brace_brace_cOMmAnDnAMe_brace_brace_should_replace_with_the_Name_from_the_configuration() { - TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[cOMmAnDnAMe]]").ShouldEqual("Hi! My name is " + name); + TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[cOMmAnDnAMe]]").Should().Be("Hi! My name is " + name); } [Fact] public void If_given_brace_brace_Version_brace_brace_should_NOT_replace_with_the_Name_from_the_configuration() { - TokenReplacer.ReplaceTokens(configuration, "Go to [[Version]]").ShouldNotContain(name); + TokenReplacer.ReplaceTokens(configuration, "Go to [[Version]]").Should().NotContain(name); } [Fact] public void If_given_a_value_that_is_not_set_should_return_that_value_as_string_Empty() { - TokenReplacer.ReplaceTokens(configuration, "Go to [[Version]]").ShouldEqual("Go to " + string.Empty); + TokenReplacer.ReplaceTokens(configuration, "Go to [[Version]]").Should().Be("Go to " + string.Empty); } [Fact] public void If_given_a_value_that_does_not_exist_should_return_the_original_value_unchanged() { - TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[DataBase]]").ShouldEqual("Hi! My name is [[DataBase]]"); + TokenReplacer.ReplaceTokens(configuration, "Hi! My name is [[DataBase]]").Should().Be("Hi! My name is [[DataBase]]"); } [Fact] public void If_given_an_empty_value_should_return_the_empty_value() { - TokenReplacer.ReplaceTokens(configuration, "").ShouldEqual(""); + TokenReplacer.ReplaceTokens(configuration, "").Should().Be(""); } [Fact] public void If_given_an_null_value_should_return_the_ll_value() { - TokenReplacer.ReplaceTokens(configuration, null).ShouldEqual(""); + TokenReplacer.ReplaceTokens(configuration, null).Should().Be(""); } } @@ -120,7 +120,7 @@ public override void Because() [Fact] public void When_given_a_proper_token_it_should_replace_with_the_dictionary_value() { - TokenReplacer.ReplaceTokens(tokens, "Hi! My name is [[dude]]").ShouldEqual("Hi! My name is " + value); + TokenReplacer.ReplaceTokens(tokens, "Hi! My name is [[dude]]").Should().Be("Hi! My name is " + value); } } } diff --git a/src/chocolatey.tests/infrastructure/tolerance/FaultToleranceSpecs.cs b/src/chocolatey.tests/infrastructure/tolerance/FaultToleranceSpecs.cs index 935bd0487a..a2087de2f9 100644 --- a/src/chocolatey.tests/infrastructure/tolerance/FaultToleranceSpecs.cs +++ b/src/chocolatey.tests/infrastructure/tolerance/FaultToleranceSpecs.cs @@ -19,7 +19,7 @@ namespace chocolatey.tests.infrastructure.tolerance using System; using chocolatey.infrastructure.tolerance; using NUnit.Framework; - using Should; + using FluentAssertions; public class FaultToleranceSpecs { @@ -52,7 +52,7 @@ public void Should_not_allow_the_number_of_retries_to_be_zero() { }); - m.ShouldThrow(); + m.Should().Throw(); } [Fact] @@ -62,7 +62,7 @@ public void Should_throw_an_error_if_retries_are_reached() Action m = () => FaultTolerance.Retry(2, () => { throw new Exception("YIKES"); }, waitDurationMilliseconds: 0); - m.ShouldThrow(); + m.Should().Throw(); } [Fact] @@ -79,7 +79,7 @@ public void Should_log_warning_each_time() // don't care } - MockLogger.MessagesFor(LogLevel.Warn).Count.ShouldEqual(2); + MockLogger.MessagesFor(LogLevel.Warn).Should().HaveCount(2); } [Fact] @@ -104,7 +104,7 @@ public void Should_retry_the_number_of_times_specified() // don't care } - i.ShouldEqual(10); + i.Should().Be(10); } [Fact] @@ -115,9 +115,9 @@ public void Should_return_immediately_when_successful() var i = 0; FaultTolerance.Retry(3, () => { i += 1; }, waitDurationMilliseconds: 0); - i.ShouldEqual(1); + i.Should().Be(1); - MockLogger.MessagesFor(LogLevel.Warn).Count.ShouldEqual(0); + MockLogger.MessagesFor(LogLevel.Warn).Should().BeEmpty(); } } @@ -137,7 +137,7 @@ public void Should_log_an_error_message() "You have an error" ); - MockLogger.MessagesFor(LogLevel.Error).Count.ShouldEqual(1); + MockLogger.MessagesFor(LogLevel.Error).Should().ContainSingle(); } [Fact] @@ -150,7 +150,7 @@ public void Should_log_the_expected_error_message() "You have an error" ); - MockLogger.MessagesFor(LogLevel.Error)[0].ShouldEqual("You have an error:{0} This is the message".FormatWith(Environment.NewLine)); + MockLogger.MessagesFor(LogLevel.Error)[0].Should().Be("You have an error:{0} This is the message".FormatWith(Environment.NewLine)); } [Fact] @@ -164,7 +164,7 @@ public void Should_log_a_warning_message_when_set_to_warn() logWarningInsteadOfError: true ); - MockLogger.MessagesFor(LogLevel.Warn).Count.ShouldEqual(1); + MockLogger.MessagesFor(LogLevel.Warn).Should().ContainSingle(); } [Fact] @@ -178,7 +178,7 @@ public void Should_throw_an_error_if_throwError_set_to_true() throwError: true ); - m.ShouldThrow(); + m.Should().Throw(); } [Fact] @@ -193,7 +193,7 @@ public void Should_still_throw_an_error_when_warn_is_set_if_throwError_set_to_tr throwError: true ); - m.ShouldThrow(); + m.Should().Throw(); } } } diff --git a/src/chocolatey.tests/packages.config b/src/chocolatey.tests/packages.config index 7b628043aa..a311d919f3 100644 --- a/src/chocolatey.tests/packages.config +++ b/src/chocolatey.tests/packages.config @@ -1,18 +1,20 @@  - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -20,6 +22,7 @@ - + + \ No newline at end of file diff --git a/src/chocolatey/StringResources.cs b/src/chocolatey/StringResources.cs new file mode 100644 index 0000000000..4bbf0f6c99 --- /dev/null +++ b/src/chocolatey/StringResources.cs @@ -0,0 +1,60 @@ +// Copyright © 2023-Present Chocolatey Software, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace chocolatey +{ + using System.ComponentModel; + + public static class StringResources + { + /// + /// Resources for the names of available environment variables + /// that will be created or used as part of executing + /// Chocolatey CLI. + /// + /// + /// DEV NOTICE: Mark anything that is not meant for public consumption as + /// internal constants and not browsable, even if used in other projects. + /// + public static class EnvironmentVariables + { + /// + /// The version of the package that is being handled as it is defined in the embedded + /// nuspec file. + /// + /// + /// Will be sets during package installs, upgrades and uninstalls. + /// Environment variable is only for internal uses. + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + [Browsable(false)] + internal const string ChocolateyPackageNuspecVersion = "chocolateyPackageNuspecVersion"; + + /// + /// The version of the package that is being handled as it is defined in the embedded + /// nuspec file. + /// + /// + /// Will be sets during package installs, upgrades and uninstalls. + /// Environment variable is only for internal uses. + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + [Browsable(false)] + internal const string PackageNuspecVersion = "packageNuspecVersion"; + } + } +} \ No newline at end of file diff --git a/src/chocolatey/chocolatey.csproj b/src/chocolatey/chocolatey.csproj index 30f8827977..eb291d883c 100644 --- a/src/chocolatey/chocolatey.csproj +++ b/src/chocolatey/chocolatey.csproj @@ -1,4 +1,4 @@ - + @@ -12,6 +12,7 @@ chocolatey chocolatey v4.8 + 7.3 512 ..\ @@ -102,43 +103,43 @@ ..\packages\AlphaFS.2.1.3\lib\net40\AlphaFS.dll - ..\packages\Chocolatey.NuGet.Commands.3.1.0\lib\net472\Chocolatey.NuGet.Commands.dll + ..\packages\Chocolatey.NuGet.Commands.3.3.0\lib\net472\Chocolatey.NuGet.Commands.dll - ..\packages\Chocolatey.NuGet.Common.3.1.0\lib\net472\Chocolatey.NuGet.Common.dll + ..\packages\Chocolatey.NuGet.Common.3.3.0\lib\net472\Chocolatey.NuGet.Common.dll - ..\packages\Chocolatey.NuGet.Configuration.3.1.0\lib\net472\Chocolatey.NuGet.Configuration.dll + ..\packages\Chocolatey.NuGet.Configuration.3.3.0\lib\net472\Chocolatey.NuGet.Configuration.dll - ..\packages\Chocolatey.NuGet.Credentials.3.1.0\lib\net472\Chocolatey.NuGet.Credentials.dll + ..\packages\Chocolatey.NuGet.Credentials.3.3.0\lib\net472\Chocolatey.NuGet.Credentials.dll - ..\packages\Chocolatey.NuGet.DependencyResolver.Core.3.1.0\lib\net472\Chocolatey.NuGet.DependencyResolver.Core.dll + ..\packages\Chocolatey.NuGet.DependencyResolver.Core.3.3.0\lib\net472\Chocolatey.NuGet.DependencyResolver.Core.dll - ..\packages\Chocolatey.NuGet.Frameworks.3.1.0\lib\net472\Chocolatey.NuGet.Frameworks.dll + ..\packages\Chocolatey.NuGet.Frameworks.3.3.0\lib\net472\Chocolatey.NuGet.Frameworks.dll - ..\packages\Chocolatey.NuGet.LibraryModel.3.1.0\lib\net472\Chocolatey.NuGet.LibraryModel.dll + ..\packages\Chocolatey.NuGet.LibraryModel.3.3.0\lib\net472\Chocolatey.NuGet.LibraryModel.dll - ..\packages\Chocolatey.NuGet.PackageManagement.3.1.0\lib\net472\Chocolatey.NuGet.PackageManagement.dll + ..\packages\Chocolatey.NuGet.PackageManagement.3.3.0\lib\net472\Chocolatey.NuGet.PackageManagement.dll - ..\packages\Chocolatey.NuGet.Packaging.3.1.0\lib\net472\Chocolatey.NuGet.Packaging.dll + ..\packages\Chocolatey.NuGet.Packaging.3.3.0\lib\net472\Chocolatey.NuGet.Packaging.dll - ..\packages\Chocolatey.NuGet.ProjectModel.3.1.0\lib\net472\Chocolatey.NuGet.ProjectModel.dll + ..\packages\Chocolatey.NuGet.ProjectModel.3.3.0\lib\net472\Chocolatey.NuGet.ProjectModel.dll - ..\packages\Chocolatey.NuGet.Protocol.3.1.0\lib\net472\Chocolatey.NuGet.Protocol.dll + ..\packages\Chocolatey.NuGet.Protocol.3.3.0\lib\net472\Chocolatey.NuGet.Protocol.dll - ..\packages\Chocolatey.NuGet.Resolver.3.1.0\lib\net472\Chocolatey.NuGet.Resolver.dll + ..\packages\Chocolatey.NuGet.Resolver.3.3.0\lib\net472\Chocolatey.NuGet.Resolver.dll - ..\packages\Chocolatey.NuGet.Versioning.3.1.0\lib\net472\Chocolatey.NuGet.Versioning.dll + ..\packages\Chocolatey.NuGet.Versioning.3.3.0\lib\net472\Chocolatey.NuGet.Versioning.dll ..\packages\log4net.2.0.12\lib\net45\log4net.dll @@ -200,10 +201,12 @@ + + @@ -237,6 +240,7 @@ + @@ -471,6 +475,7 @@ + diff --git a/src/chocolatey/infrastructure.app/attributes/CommandForAttribute.cs b/src/chocolatey/infrastructure.app/attributes/CommandForAttribute.cs index da8c76914d..927a108349 100644 --- a/src/chocolatey/infrastructure.app/attributes/CommandForAttribute.cs +++ b/src/chocolatey/infrastructure.app/attributes/CommandForAttribute.cs @@ -24,6 +24,11 @@ public class CommandForAttribute : Attribute public string CommandName { get; private set; } public string Description { get; private set; } + /// + /// Gets or sets the version a command was introduced in. + /// + public string Version { get; set; } + public CommandForAttribute(string commandName, string description) { CommandName = commandName; diff --git a/src/chocolatey/infrastructure.app/builders/ConfigurationBuilder.cs b/src/chocolatey/infrastructure.app/builders/ConfigurationBuilder.cs index b0c88aa11c..a82d647c48 100644 --- a/src/chocolatey/infrastructure.app/builders/ConfigurationBuilder.cs +++ b/src/chocolatey/infrastructure.app/builders/ConfigurationBuilder.cs @@ -89,7 +89,6 @@ public static void SetupConfiguration(IList args, ChocolateyConfiguratio SetGlobalOptions(args, config, container); SetEnvironmentOptions(config); EnvironmentSettings.SetEnvironmentVariables(config); - SetProxyOptions(config, container); // must be done last for overrides SetLicensedOptions(config, license, configFileSettings); // save all changes if there are any @@ -218,6 +217,15 @@ private static void SetMachineSources(ChocolateyConfiguration config, ConfigFile private static void SetAllConfigItems(ChocolateyConfiguration config, ConfigFileSettings configFileSettings, IFileSystem fileSystem) { + config.CacheLocation = Environment.ExpandEnvironmentVariables( + SetConfigItem( + ApplicationParameters.ConfigSettings.CacheLocation, + configFileSettings, + string.Empty, + "Cache location if not TEMP folder. Replaces `$env:TEMP` value for choco.exe process. It is highly recommended this be set to make Chocolatey more deterministic in cleanup." + ) + ); + if (string.IsNullOrWhiteSpace(config.CacheLocation)) { config.CacheLocation = fileSystem.GetTempPath(); // System.Environment.GetEnvironmentVariable("TEMP"); @@ -234,10 +242,12 @@ private static void SetAllConfigItems(ChocolateyConfiguration config, ConfigFile if (string.IsNullOrWhiteSpace(config.CacheLocation)) config.CacheLocation = fileSystem.CombinePaths(ApplicationParameters.InstallLocation, "temp"); var commandExecutionTimeoutSeconds = 0; - var commandExecutionTimeout = configFileSettings.ConfigSettings - .Where(f => f.Key.IsEqualTo(ApplicationParameters.ConfigSettings.CommandExecutionTimeoutSeconds)) - .Select(c => c.Value) - .FirstOrDefault(); + var commandExecutionTimeout = SetConfigItem( + ApplicationParameters.ConfigSettings.CommandExecutionTimeoutSeconds, + configFileSettings, + ApplicationParameters.DefaultWaitForExitInSeconds.ToStringSafe(), + "Default timeout for command execution. '0' for infinite." + ); int.TryParse(commandExecutionTimeout, out commandExecutionTimeoutSeconds); config.CommandExecutionTimeoutSeconds = commandExecutionTimeoutSeconds; @@ -442,6 +452,15 @@ private static void SetGlobalOptions(IList args, ChocolateyConfiguration .Add("skipcompatibilitychecks|skip-compatibility-checks", "SkipCompatibilityChecks - Prevent warnings being shown before and after command execution when a runtime compatibility problem is found between the version of Chocolatey and the Chocolatey Licensed Extension. Available in 1.1.0+", option => config.DisableCompatibilityChecks = option != null) + .Add("ignore-http-cache", + "IgnoreHttpCache - Ignore any HTTP caches that have previously been created when querying sources, and create new caches. Available in 2.1.0+", + option => + { + if (option != null) + { + config.CacheExpirationInMinutes = -1; + } + }); ; }, (unparsedArgs) => @@ -464,53 +483,6 @@ private static void SetGlobalOptions(IList args, ChocolateyConfiguration }); } - private static void SetProxyOptions(ChocolateyConfiguration config, Container container) - { - // Evaluation order of Proxy settings: System Set -> Environment Variable Set -> Chocolatey Configuration File Set -> CLI Passed in Argument - var proxyAlreadySet = !string.IsNullOrWhiteSpace(config.Proxy.Location); - var onWindows = Platform.GetPlatform() == PlatformType.Windows; - - // Only Windows has a registry provider, if it's already set, or we're not on Windows we don't need to continue. - if (proxyAlreadySet || !onWindows) - { - return; - } - - // We don't yet have a Proxy Location, check if the system has one configured in the registry - var registryService = container.GetInstance(); - var internetSettingsRegKey = registryService.GetKey(RegistryHive.CurrentUser, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"); - - if (!internetSettingsRegKey.GetValue("ProxyEnable").ToStringSafe().IsEqualTo("1")) - { - return; - } - - var proxySetting = internetSettingsRegKey.GetValue("ProxyServer").ToStringSafe(); - - if (string.IsNullOrWhiteSpace(proxySetting)) - { - return; - } - - if (proxySetting.IndexOf(';') != -1) - { - var allProxies = proxySetting.Split(';'); - proxySetting = allProxies.FirstOrDefault(s => s.TrimSafe().StartsWith("https=")); - - if (string.IsNullOrWhiteSpace(proxySetting)) - { - proxySetting = allProxies.FirstOrDefault(s => s.TrimSafe().StartsWith("http=")); - } - } - - if (proxySetting?.IndexOf('=') != -1 && !proxySetting.StartsWith("http")) - { - return; - } - - config.Proxy.Location = proxySetting.Split('=').LastOrDefault(); - } - private static void SetEnvironmentOptions(ChocolateyConfiguration config) { config.Information.PlatformType = Platform.GetPlatform(); @@ -550,6 +522,7 @@ private static void SetEnvironmentOptions(ChocolateyConfiguration config) private static void SetLicensedOptions(ChocolateyConfiguration config, ChocolateyLicense license, ConfigFileSettings configFileSettings) { config.Information.IsLicensedVersion = license.IsLicensedVersion(); + config.Information.IsLicensedAssemblyLoaded = license.AssemblyLoaded; config.Information.LicenseType = license.LicenseType.DescriptionOrValue(); if (license.AssemblyLoaded) diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyCacheCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyCacheCommand.cs new file mode 100644 index 0000000000..f83b26c085 --- /dev/null +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyCacheCommand.cs @@ -0,0 +1,314 @@ +// Copyright © 2023 Chocolatey Software, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace chocolatey.infrastructure.app.commands +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using chocolatey.infrastructure.app.attributes; + using chocolatey.infrastructure.app.configuration; + using chocolatey.infrastructure.app.domain; + using chocolatey.infrastructure.app.nuget; + using chocolatey.infrastructure.commandline; + using chocolatey.infrastructure.commands; + using chocolatey.infrastructure.filesystem; + using chocolatey.infrastructure.logging; + + [CommandFor("cache", "Manage the local HTTP caches used to store queries", Version = "2.1.0")] + public class ChocolateyCacheCommand : ChocolateyCommandBase, ICommand + { + private readonly IFileSystem _fileSystem; + + public ChocolateyCacheCommand(IFileSystem fileSystem) + { + _fileSystem = fileSystem; + } + + public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfiguration configuration) + { + optionSet + .Add("expired", + "Expired - Remove cached items that have expired.", + option => configuration.CacheCommand.RemoveExpiredItemsOnly = option != null); + } + + public virtual void DryRun(ChocolateyConfiguration configuration) + { + Run(configuration); + } + + public virtual bool MayRequireAdminAccess() + { + // We will support cleaning the user cache directory without cleaning the system directory. + // As such it can be run without admin access. + return false; + } + + public virtual void ParseAdditionalArguments(IList unparsedArguments, ChocolateyConfiguration configuration) + { + CacheCommandType command; + + if (unparsedArguments.Count == 0) + { + command = CacheCommandType.List; + } + else if (!Enum.TryParse(unparsedArguments[0], true, out command) || command == CacheCommandType.Unknown) + { + this.Log().Warn("Unknown command '{0}'. Setting to list.", unparsedArguments[0]); + command = CacheCommandType.List; + } + + configuration.CacheCommand.Command = command; + } + + public virtual void Run(ChocolateyConfiguration config) + { + switch (config.CacheCommand.Command) + { + case CacheCommandType.List: + ListCacheStatistics(config); + break; + + case CacheCommandType.Remove: + RemoveCachedItems(config); + break; + } + } + + public virtual void Validate(ChocolateyConfiguration configuration) + { + // Nothing to validate + } + + protected void CleanCachedItemsInPath(ChocolateyConfiguration configuration, string cacheLocation) + { + if (configuration.Noop && configuration.CacheCommand.RemoveExpiredItemsOnly) + { + this.Log().Info("Would remove all files with the .dat extension older than 30 minutes in '{0}'.", cacheLocation); + + return; + } + else if (configuration.Noop) + { + this.Log().Info("Would remove all files with the .dat in '{0}'.", cacheLocation); + + return; + } + + var expirationTimer = GetCacheExpiration(configuration); + + var filesBeforeClean = _fileSystem.GetFiles(cacheLocation, "*.dat", SearchOption.AllDirectories); + + if (configuration.CacheCommand.RemoveExpiredItemsOnly) + { + filesBeforeClean = filesBeforeClean.Where(f => _fileSystem.GetFileModifiedDate(f) < expirationTimer); + } + + var beforeFilesCount = filesBeforeClean.Count(); + + if (beforeFilesCount == 0) + { + this.Log().Info("No cached items available to be removed in '{0}'.", cacheLocation); + return; + } + + if (configuration.CacheCommand.RemoveExpiredItemsOnly) + { + // We need to remove each individual file when the user only request + // deleting expired items. This takes a bit longer. + foreach (var fileToRemove in filesBeforeClean) + { + _fileSystem.DeleteFile(fileToRemove); + } + + foreach (var directoryToRemove in _fileSystem.GetDirectories(cacheLocation)) + { + if (!_fileSystem.GetFiles(directoryToRemove, "*", SearchOption.AllDirectories).Any()) + { + _fileSystem.DeleteDirectoryChecked(directoryToRemove, recursive: false, overrideAttributes: false, isSilent: true); + } + } + } + else + { + foreach (var directoryToRemove in _fileSystem.GetDirectories(cacheLocation)) + { + _fileSystem.DeleteDirectoryChecked(directoryToRemove, recursive: true); + } + } + + var filesAfterClean = _fileSystem.GetFiles(cacheLocation, "*.dat", SearchOption.AllDirectories); + + if (configuration.CacheCommand.RemoveExpiredItemsOnly) + { + filesAfterClean = filesAfterClean.Where(f => _fileSystem.GetFileModifiedDate(f) < expirationTimer); + + this.Log().Info("Removed {0} expired cached items in '{1}'.", beforeFilesCount - filesAfterClean.Count(), cacheLocation); + } + else + { + this.Log().Info("Removed {0} cached items in '{1}'.", beforeFilesCount - filesAfterClean.Count(), cacheLocation); + } + } + + protected override string GetCommandDescription(CommandForAttribute attribute, ChocolateyConfiguration configuration) + { + return @"Get the statistics of what Chocolatey CLI has cached or clear any cached +items in the current context. + +The behavior of this command will vary depending on whether it is running in an elevated context or not. +Statistics and removing cached items will always happen on the User HTTP Cache. +However, the System HTTP Cache will only be considered if running in an elevated context."; + } + + protected override IEnumerable GetCommandExamples(CommandForAttribute[] attributes, ChocolateyConfiguration configuration) + { + return new[] + { + "choco cache", + "choco cache list", + "choco cache remove", + "choco cache remove --expired" + }; + } + + protected override IEnumerable GetCommandUsage(CommandForAttribute[] attributes, ChocolateyConfiguration configuration) + { + return new[] { "choco cache [list]|remove [options/switches]" }; + } + + protected virtual void ListCacheStatistics(ChocolateyConfiguration configuration) + { + var userCacheLocation = ApplicationParameters.HttpCacheUserLocation; + var systemCacheLocation = ApplicationParameters.HttpCacheLocation; + + if (userCacheLocation != systemCacheLocation) + { + this.Log().Info(ChocolateyLoggers.Important, "System HTTP Cache"); + ListCachedItems(configuration, systemCacheLocation); + + this.Log().Info(string.Empty); + this.Log().Info(ChocolateyLoggers.Important, "User HTTP Cache"); + ListCachedItems(configuration, userCacheLocation); + } + else + { + this.Log().Info(ChocolateyLoggers.Important, "User HTTP Cache"); + ListCachedItems(configuration, userCacheLocation); + + this.Log().Info(string.Empty); + this.Log().Warn("Run the same command as an Administrator to list information about the System HTTP cache."); + } + } + + protected virtual void RemoveCachedItems(ChocolateyConfiguration configuration) + { + var systemCacheLocation = ApplicationParameters.HttpCacheLocation; + var userCacheLocation = ApplicationParameters.HttpCacheUserLocation; + + this.Log().Info(ChocolateyLoggers.Important, "Cache cleanup"); + + if (userCacheLocation != systemCacheLocation) + { + CleanCachedItemsInPath(configuration, systemCacheLocation); + CleanCachedItemsInPath(configuration, userCacheLocation); + } + else + { + CleanCachedItemsInPath(configuration, userCacheLocation); + + this.Log().Info(string.Empty); + this.Log().Warn("Run the same command as an Administrator to remove the System HTTP cache."); + } + } + + private static DateTime GetCacheExpiration(ChocolateyConfiguration configuration) + { + DateTime? expirationTimer; + var cacheContext = new ChocolateySourceCacheContext(configuration); + + if (cacheContext.MaxAge.HasValue) + { + expirationTimer = cacheContext.MaxAge.Value.DateTime; + } + else + { + expirationTimer = DateTime.Now.Subtract(cacheContext.MaxAgeTimeSpan); + } + + return expirationTimer.Value; + } + + private void ListCachedItems(ChocolateyConfiguration configuration, string cacheLocation) + { + var cachedFiles = _fileSystem.GetFiles(cacheLocation, "*.dat", SearchOption.AllDirectories); + var cachedDirectories = _fileSystem.GetDirectories(cacheLocation); + var expirationTimer = GetCacheExpiration(configuration); + + var expiredFiles = cachedFiles.Where(f => _fileSystem.GetFileModifiedDate(f) < expirationTimer); + + this.Log().Info("We found {0} cached sources.", cachedDirectories.Count()); + this.Log().Info("We found {0} cached items for all sources, where {1} items have expired.", cachedFiles.Count(), expiredFiles.Count()); + } + + #region Obsoleted methods + + [Obsolete("Will be removed in v3. Use ConfigureArgumentParser instead!")] + public void configure_argument_parser(OptionSet optionSet, ChocolateyConfiguration configuration) + { + ConfigureArgumentParser(optionSet, configuration); + } + + [Obsolete("Will be removed in v3. Use ParseAdditionalArguments instead!")] + public void handle_additional_argument_parsing(IList unparsedArguments, ChocolateyConfiguration configuration) + { + ParseAdditionalArguments(unparsedArguments, configuration); + } + + [Obsolete("Will be removed in v3. Use Validate instead!")] + public void handle_validation(ChocolateyConfiguration configuration) + { + Validate(configuration); + } + + [Obsolete("Will be removed in v3. Use HelpMessage instead!")] + public void help_message(ChocolateyConfiguration configuration) + { + HelpMessage(configuration); + } + + [Obsolete("Will be removed in v3. Use MayRequireAdminAccess instead!")] + public bool may_require_admin_access() + { + return MayRequireAdminAccess(); + } + + [Obsolete("Will be removed in v3. Use DryRun instead!")] + public void noop(ChocolateyConfiguration configuration) + { + DryRun(configuration); + } + + [Obsolete("Will be removed in v3. Use Run instead!")] + public void run(ChocolateyConfiguration config) + { + Run(config); + } + + #endregion Obsoleted methods + } +} \ No newline at end of file diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyCommandBase.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyCommandBase.cs index 1f757dbef4..3697cdb696 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyCommandBase.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyCommandBase.cs @@ -1,47 +1,290 @@ -// Copyright © 2023 Chocolatey Software, Inc -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System.Collections.Generic; -using System.Linq; - -namespace chocolatey.infrastructure.app.commands -{ - /// - /// A base class for any Chocolatey commands which need to utilise shared logic. - /// - public abstract class ChocolateyCommandBase - { - /// - /// Emit a warning to the use if any of the options which are known to be deprecated are found in the . - /// - /// The list of unrecognised and unparsed options. - /// The list of options which are known to be removed and should be warned for. - protected virtual void WarnForRemovedOptions(IEnumerable unparsedOptions, IEnumerable removedOptions) - { - if (!unparsedOptions.OrEmpty().Any() || !removedOptions.OrEmpty().Any()) - { - return; - } - - foreach (var removed in removedOptions) - { - if (unparsedOptions.Contains(removed)) - { - this.Log().Warn("The {0} option is no longer supported.", removed); - } - } - } - } -} +// Copyright © 2023 Chocolatey Software, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace chocolatey.infrastructure.app.commands +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Reflection; + using System.Text; + using chocolatey.infrastructure.app.attributes; + using chocolatey.infrastructure.app.configuration; + using chocolatey.infrastructure.commands; + using chocolatey.infrastructure.logging; + + /// + /// A base class for any Chocolatey commands which need to utilise shared logic. + /// + public abstract class ChocolateyCommandBase + { + public virtual void HelpMessage(ChocolateyConfiguration configuration) + { + var allCommandForAttributes = GetType().GetCustomAttributes().ToArray(); + var commandForAttribute = allCommandForAttributes.OrEmpty().FirstOrDefault(); + + if (commandForAttribute == null) + { + throw new ApplicationException("No command for attribute was found on the command class: {0}".FormatWith(GetType().Name)); + } + + this.Log().Info(ChocolateyLoggers.Important, "{0} Command", GetCommandName(commandForAttribute)); + + if (!string.IsNullOrEmpty(commandForAttribute.Version)) + { + this.Log().Info(@" +WARNING: {0}", GetCommandVersionWarning(commandForAttribute, configuration)); + } + + this.Log().Info(@" +{0} +", GetCommandDescription(commandForAttribute, configuration)); + + var commandUsages = GetCommandUsage(allCommandForAttributes, configuration).ToArray(); + + if (commandUsages.Length > 0) + { + this.Log().Info(ChocolateyLoggers.Important, @"Usage"); + this.Log().Info(string.Empty); + + foreach (var commandUsage in commandUsages) + { + this.Log().Info(" {0}", commandUsage); + } + + this.Log().Info(string.Empty); + } + + foreach (var note in GetCommandUsageNotes(configuration)) + { + this.Log().Info(@"NOTE: {0} +", note); + } + + var commandExamples = GetCommandExamples(allCommandForAttributes, configuration).ToArray(); + + if (commandExamples.Length > 0) + { + this.Log().Info(ChocolateyLoggers.Important, "Examples"); + this.Log().Info(string.Empty); + + foreach (var commandExample in commandExamples) + { + this.Log().Info(" {0}", commandExample); + } + + var exampleDescription = GetCommandExampleDescription(configuration); + + if (!string.IsNullOrEmpty(exampleDescription)) + { + this.Log().Info(string.Empty); + this.Log().Info(exampleDescription); + } + + this.Log().Info(@" +NOTE: See scripting in the command reference (`choco -?`) for how to + write proper scripts and integrations. +"); + } + + var normalExitCodes = GetNormalExitCodes(configuration).ToArray(); + var enhancedExitCodes = GetEnhancedExitCodes(configuration).ToArray(); + var additionalExitCodeDescription = GetAdditionalExitCodeDescription(configuration); + + if (normalExitCodes.Length > 0 || enhancedExitCodes.Length > 0 || !string.IsNullOrEmpty(additionalExitCodeDescription)) + { + this.Log().Info(ChocolateyLoggers.Important, "Exit Codes"); + this.Log().Info(@" +Exit codes that normally result from running this command. +"); + } + + if (normalExitCodes.Length > 0) + { + this.Log().Info("Normal:"); + OutputExitCodes(normalExitCodes); + } + + if (enhancedExitCodes.Length > 0) + { + this.Log().Info("Enhanced:"); + OutputExitCodes(enhancedExitCodes); + } + + if (normalExitCodes.Length > 0 || enhancedExitCodes.Length > 0) + { + this.Log().Info(@" +If you find other exit codes that we have not yet documented, please + file a ticket so we can document it at + {0}. + +", GetRepositoryIssueLink()); + } + + if (!string.IsNullOrEmpty(additionalExitCodeDescription)) + { + this.Log().Info(additionalExitCodeDescription); + this.Log().Info(string.Empty); + } + + var additionalHelpContent = GetAdditionalHelpContent(configuration); + + if (!string.IsNullOrEmpty(additionalHelpContent)) + { + this.Log().Info(additionalHelpContent); + this.Log().Info(string.Empty); + } + + this.Log().Info(ChocolateyLoggers.Important, "Options and Switches"); + + var optionsAndSwitchesContent = GetOptionsAndSwitchesDescription(configuration); + + if (!string.IsNullOrEmpty(optionsAndSwitchesContent)) + { + this.Log().Info(string.Empty); + this.Log().Info(optionsAndSwitchesContent); + } + } + + protected virtual string GetCommandDescription(CommandForAttribute attribute, ChocolateyConfiguration configuration) + { + return attribute.Description; + } + + protected virtual string GetCommandExampleDescription(ChocolateyConfiguration configuration) + { + return string.Empty; + } + + protected virtual IEnumerable GetCommandExamples(CommandForAttribute[] attributes, ChocolateyConfiguration configuration) + { + foreach (var attribute in attributes) + { + yield return "choco {0}".FormatWith(attribute.CommandName); + } + } + + protected virtual string GetCommandName(CommandForAttribute attribute) + { + return char.ToUpperInvariant(attribute.CommandName[0]) + attribute.CommandName.Substring(1); + } + + protected virtual IEnumerable GetCommandUsage(CommandForAttribute[] attributes, ChocolateyConfiguration configuration) + { + foreach (var attribute in attributes) + { + yield return "choco {0} [options/switches]".FormatWith(attribute.CommandName); + } + } + + protected virtual IEnumerable GetCommandUsageNotes(ChocolateyConfiguration configuration) + { + return Enumerable.Empty(); + } + + protected virtual string GetCommandVersionWarning(CommandForAttribute attribute, ChocolateyConfiguration configuration) + { + return "This command was introduced in Chocolatey CLI v{0}".FormatWith(attribute.Version); + } + + protected virtual IEnumerable GetEnhancedExitCodes(ChocolateyConfiguration configuration) + { + return Enumerable.Empty(); + } + + protected virtual IEnumerable GetNormalExitCodes(ChocolateyConfiguration configuration) + { + return new[] + { + new ExitCodeDescription("operation was successful, no issues detected", 0), + new ExitCodeDescription("an error has occurred", -1, 1) + }; + } + + protected virtual Uri GetRepositoryIssueLink() + { + return new Uri("https://github.com/chocolatey/choco/issues/new/choose"); + } + + /// + /// Emit a warning to the use if any of the options which are known to be deprecated are found in the . + /// + /// The list of unrecognised and unparsed options. + /// The list of options which are known to be removed and should be warned for. + protected virtual void WarnForRemovedOptions(IEnumerable unparsedOptions, IEnumerable removedOptions) + { + if (!unparsedOptions.OrEmpty().Any() || !removedOptions.OrEmpty().Any()) + { + return; + } + + foreach (var removed in removedOptions) + { + if (unparsedOptions.Contains(removed)) + { + this.Log().Warn("The {0} option is no longer supported.", removed); + } + } + } + + private string GetAdditionalExitCodeDescription(ChocolateyConfiguration configuration) + { + return string.Empty; + } + + private string GetAdditionalHelpContent(ChocolateyConfiguration configuration) + { + return string.Empty; + } + + private string GetOptionsAndSwitchesDescription(ChocolateyConfiguration configuration) + { + return string.Empty; + } + + private void OutputExitCodes(ExitCodeDescription[] normalExitCodes) + { + foreach (var exitCodeDescription in normalExitCodes) + { + var sb = new StringBuilder(" - "); + + for (var j = 0; j < exitCodeDescription.ExitCodes.Length; j++) + { + if (j > 0 && j + 1 == exitCodeDescription.ExitCodes.Length) + { + sb.Append(" or "); + } + else if (j > 0) + { + sb.Append(", "); + } + + sb.Append(exitCodeDescription.ExitCodes[j]); + } + + if (exitCodeDescription.ExitCodes.Length > 0) + { + sb.AppendFormat(": {0}", exitCodeDescription.Description); + } + else + { + sb.Append(exitCodeDescription.Description); + } + + this.Log().Info(sb.ToString()); + } + } + } +} \ No newline at end of file diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyHelpCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyHelpCommand.cs index 411688db78..221665768d 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyHelpCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyHelpCommand.cs @@ -89,7 +89,14 @@ public static void DisplayHelpMessage(Container container = null) return c.GetType().GetCustomAttributes(typeof(CommandForAttribute), false).Cast(); }).OrderBy(c => c.CommandName)) { - commandsLog.AppendFormat(" * {0} - {1}\n", command.CommandName, command.Description); + if (!string.IsNullOrEmpty(command.Version)) + { + commandsLog.AppendFormat(" * {0} - {1} (v{2}+)\n", command.CommandName, command.Description, command.Version); + } + else + { + commandsLog.AppendFormat(" * {0} - {1}\n", command.CommandName, command.Description); + } } "chocolatey".Log().Info(@"This is a listing of all of the different things you can pass to choco. diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyInstallCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyInstallCommand.cs index 23f10109cb..78f78b9787 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyInstallCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyInstallCommand.cs @@ -254,7 +254,7 @@ public virtual void Validate(ChocolateyConfiguration configuration) } } - public virtual void HelpMessage(ChocolateyConfiguration configuration) + public override void HelpMessage(ChocolateyConfiguration configuration) { this.Log().Info(ChocolateyLoggers.Important, "Install Command"); this.Log().Info(@" diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyListCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyListCommand.cs index e730243774..9e37dd568b 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyListCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyListCommand.cs @@ -95,7 +95,7 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi "Prerelease - Include Prereleases? Defaults to false.", option => configuration.Prerelease = option != null) .Add("i|includeprograms|include-programs", - "IncludePrograms - Used in conjunction with LocalOnly, filters out apps chocolatey has listed as packages and includes those in the list. Defaults to false.", + "IncludePrograms - Filters out apps Chocolatey has listed as packages and includes those in the list. Defaults to false.", option => configuration.ListCommand.IncludeRegistryPrograms = option != null) .Add("version=", "Version - Specific version of a package to return.", diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyPinCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyPinCommand.cs index 38bf19321a..ef4ebe3d36 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyPinCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyPinCommand.cs @@ -190,9 +190,12 @@ public virtual void SetPin(ChocolateyConfiguration config) config.Input = config.PinCommand.Name; config.Version = semanticVersion.ToFullStringChecked(); config.ListCommand.ByIdOnly = true; + var exact = config.ListCommand.Exact; + config.ListCommand.Exact = true; var quiet = config.QuietOutput; config.QuietOutput = true; var installedPackage = _nugetService.List(config).FirstOrDefault(); + config.ListCommand.Exact = exact; config.QuietOutput = quiet; config.Input = input; diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateySearchCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateySearchCommand.cs index 417bd41ef0..28c3368a73 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateySearchCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateySearchCommand.cs @@ -51,7 +51,7 @@ public virtual void ConfigureArgumentParser(OptionSet optionSet, ChocolateyConfi "Prerelease - Include Prereleases? Defaults to false.", option => configuration.Prerelease = option != null) .Add("i|includeprograms|include-programs", // Should this parameter be deprecated on Search? - "IncludePrograms - Used in conjunction with LocalOnly, filters out apps chocolatey has listed as packages and includes those in the list. Defaults to false.", + "IncludePrograms - Filters out apps Chocolatey has listed as packages and includes those in the list. Defaults to false.", option => configuration.ListCommand.IncludeRegistryPrograms = option != null) .Add("a|all|allversions|all-versions", "AllVersions - include results from all versions.", diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyUninstallCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyUninstallCommand.cs index 44bb8c5c55..dc468bfb80 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyUninstallCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyUninstallCommand.cs @@ -168,7 +168,7 @@ public virtual void Validate(ChocolateyConfiguration configuration) } } - public virtual void HelpMessage(ChocolateyConfiguration configuration) + public override void HelpMessage(ChocolateyConfiguration configuration) { this.Log().Info(ChocolateyLoggers.Important, "Uninstall Command"); this.Log().Info(@" diff --git a/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs b/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs index ec42a2cb74..8c8080d3b8 100644 --- a/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs +++ b/src/chocolatey/infrastructure.app/commands/ChocolateyUpgradeCommand.cs @@ -285,7 +285,7 @@ public virtual void Validate(ChocolateyConfiguration configuration) } } - public virtual void HelpMessage(ChocolateyConfiguration configuration) + public override void HelpMessage(ChocolateyConfiguration configuration) { this.Log().Info(ChocolateyLoggers.Important, "Upgrade Command"); this.Log().Info(@" diff --git a/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs b/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs index 69f38cbbb1..5ec4816f43 100644 --- a/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs +++ b/src/chocolatey/infrastructure.app/configuration/ChocolateyConfiguration.cs @@ -1,4 +1,4 @@ -// Copyright © 2017 - 2022 Chocolatey Software, Inc +// Copyright © 2017 - 2023 Chocolatey Software, Inc // Copyright © 2011 - 2017 RealDimensions Software, LLC // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -38,6 +38,7 @@ public ChocolateyConfiguration() RegularOutput = true; PromptForConfirmation = true; DisableCompatibilityChecks = false; + CacheExpirationInMinutes = 30; SourceType = SourceTypes.Normal; Information = new InformationCommandConfiguration(); Features = new FeaturesConfiguration(); @@ -56,6 +57,7 @@ public ChocolateyConfiguration() Proxy = new ProxyConfiguration(); ExportCommand = new ExportCommandConfiguration(); TemplateCommand = new TemplateCommandConfiguration(); + CacheCommand = new CacheCommandConfiguration(); #if DEBUG AllowUnofficialBuild = true; #endif @@ -340,6 +342,15 @@ private void AppendOutput(StringBuilder propertyValues, string append) public bool ApplyInstallArgumentsToDependencies { get; set; } public bool IgnoreDependencies { get; set; } + /// + /// Gets or sets the time before the cache is considered to have expired in minutes. + /// + /// + /// The cache expiration in minutes. + /// + /// specifying a negative number disables the caching completely. + public int CacheExpirationInMinutes { get; set; } + public bool AllowDowngrade { get; set; } public bool ForceDependencies { get; set; } public string DownloadChecksum { get; set; } @@ -478,6 +489,11 @@ private void AppendOutput(StringBuilder propertyValues, string append) /// public TemplateCommandConfiguration TemplateCommand { get; set; } + /// + /// Gets or sets the configuration related specifically to the Cache command. + /// + public CacheCommandConfiguration CacheCommand { get; set; } + #pragma warning disable IDE1006 [Obsolete("This overload is deprecated and will be removed in v3.")] public void start_backup() @@ -511,6 +527,7 @@ public sealed class InformationCommandConfiguration public bool IsUserRemote { get; set; } public bool IsProcessElevated { get; set; } public bool IsLicensedVersion { get; set; } + public bool IsLicensedAssemblyLoaded { get; set; } public string LicenseType { get; set; } public string CurrentDirectory { get; set; } } @@ -709,4 +726,24 @@ public sealed class TemplateCommandConfiguration public TemplateCommandType Command { get; set; } public string Name { get; set; } } + + [Serializable] + public sealed class CacheCommandConfiguration + { + /// + /// Gets or sets the type of the command that should be used when running the Cache command. + /// + /// + /// The command type to use. + /// + public CacheCommandType Command { get; set; } + + /// + /// Gets or sets a value indicating whether only expired items in the cache should be removed. + /// + /// + /// true if only expired cache items should be removed; otherwise, false. + /// + public bool RemoveExpiredItemsOnly { get; set; } + } } diff --git a/src/chocolatey/infrastructure.app/configuration/ConfigurationOptions.cs b/src/chocolatey/infrastructure.app/configuration/ConfigurationOptions.cs index 8a19f00c1e..8b13a07ff0 100644 --- a/src/chocolatey/infrastructure.app/configuration/ConfigurationOptions.cs +++ b/src/chocolatey/infrastructure.app/configuration/ConfigurationOptions.cs @@ -79,7 +79,7 @@ public static OptionSet OptionSet "Prints out the help menu.", option => configuration.HelpRequested = option != null) .Add("online", - "Online - Open help for specified command in default browser application. This option only works when used in combintation with the -?/--help/-h option.", + "Online - Open help for specified command in default browser application. This option only works when used in combintation with the -?/--help/-h option. Available in 2.0.0+", option => configuration.ShowOnlineHelp = option != null); } diff --git a/src/chocolatey/infrastructure.app/configuration/EnvironmentSettings.cs b/src/chocolatey/infrastructure.app/configuration/EnvironmentSettings.cs index afa69676ad..6f1decbde3 100644 --- a/src/chocolatey/infrastructure.app/configuration/EnvironmentSettings.cs +++ b/src/chocolatey/infrastructure.app/configuration/EnvironmentSettings.cs @@ -1,4 +1,4 @@ -// Copyright © 2017 - 2021 Chocolatey Software, Inc +// Copyright © 2017 - 2021 Chocolatey Software, Inc // Copyright © 2011 - 2017 RealDimensions Software, LLC // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -134,10 +134,13 @@ public static void SetEnvironmentVariables(ChocolateyConfiguration config) private static void SetLicensedEnvironment(ChocolateyConfiguration config) { - if (!config.Information.IsLicensedVersion) return; - Environment.SetEnvironmentVariable("ChocolateyLicenseType", config.Information.LicenseType); + if (!(config.Information.IsLicensedVersion && config.Information.IsLicensedAssemblyLoaded)) + { + return; + } + var licenseAssembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.GetName().Name.IsEqualTo("chocolatey.licensed")); if (licenseAssembly != null) diff --git a/src/chocolatey/infrastructure.app/domain/CacheCommandType.cs b/src/chocolatey/infrastructure.app/domain/CacheCommandType.cs new file mode 100644 index 0000000000..68d1ce58af --- /dev/null +++ b/src/chocolatey/infrastructure.app/domain/CacheCommandType.cs @@ -0,0 +1,24 @@ +// Copyright © 2023 Chocolatey Software, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace chocolatey.infrastructure.app.domain +{ + public enum CacheCommandType + { + Unknown, + List, + Remove, + } +} diff --git a/src/chocolatey/infrastructure.app/nuget/ChocolateySourceCacheContext.cs b/src/chocolatey/infrastructure.app/nuget/ChocolateySourceCacheContext.cs index 251ed9e12d..aa494477de 100644 --- a/src/chocolatey/infrastructure.app/nuget/ChocolateySourceCacheContext.cs +++ b/src/chocolatey/infrastructure.app/nuget/ChocolateySourceCacheContext.cs @@ -1,14 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace chocolatey.infrastructure.app.nuget +namespace chocolatey.infrastructure.app.nuget { + using System; using System.Threading; using Alphaleonis.Win32.Filesystem; - using configuration; + using chocolatey.infrastructure.app.configuration; using NuGet.Protocol.Core.Types; public class ChocolateySourceCacheContext : SourceCacheContext @@ -22,6 +17,16 @@ public class ChocolateySourceCacheContext : SourceCacheContext public ChocolateySourceCacheContext(ChocolateyConfiguration config) { _chocolateyCacheLocation = config.CacheLocation; + + if (config.CacheExpirationInMinutes <= 0) + { + MaxAge = DateTime.UtcNow; + RefreshMemoryCache = true; + } + else + { + MaxAge = DateTime.UtcNow.AddMinutes(-config.CacheExpirationInMinutes); + } } public override string GeneratedTempFolder diff --git a/src/chocolatey/infrastructure.app/nuget/NuGetEndpointResources.cs b/src/chocolatey/infrastructure.app/nuget/NuGetEndpointResources.cs index 8143077a98..e93e9b0be8 100644 --- a/src/chocolatey/infrastructure.app/nuget/NuGetEndpointResources.cs +++ b/src/chocolatey/infrastructure.app/nuget/NuGetEndpointResources.cs @@ -26,6 +26,7 @@ public sealed class NuGetEndpointResources private static readonly ConcurrentDictionary _cachedResources = new ConcurrentDictionary(); private bool _resolvingFailed; + private readonly ChocolateySourceCacheContext _cacheContext; private readonly Lazy _dependencyInfoResource; private readonly Lazy _downloadResource; private readonly Lazy _findPackageResource; @@ -34,10 +35,11 @@ public sealed class NuGetEndpointResources private readonly Lazy _packageUpdateResource; private readonly Lazy _searchResource; - private NuGetEndpointResources(SourceRepository _sourceRepository) + private NuGetEndpointResources(SourceRepository _sourceRepository, ChocolateySourceCacheContext cacheContext) { Source = _sourceRepository; + _cacheContext = cacheContext; _dependencyInfoResource = new Lazy(() => ResolveResource()); _downloadResource = new Lazy(() => ResolveResource()); _findPackageResource = new Lazy(() => ResolveResource()); @@ -105,21 +107,33 @@ public PackageSearchResource SearchResource public SourceRepository Source { get; private set; } + [Obsolete("This overload is deprecated and will be removed in v3.")] public static NuGetEndpointResources GetResourcesBySource(SourceRepository source) + { + return GetResourcesBySource(source, cacheContext: null); + } + + public static NuGetEndpointResources GetResourcesBySource(SourceRepository source, ChocolateySourceCacheContext cacheContext) { return _cachedResources.GetOrAdd(source, (key) => { - var endpointResource = new NuGetEndpointResources(key); + var endpointResource = new NuGetEndpointResources(key, cacheContext); return endpointResource; }); } + [Obsolete("This overload is deprecated and will be removed in v3.")] public static IEnumerable GetResourcesBySource(IEnumerable sources) + { + return GetResourcesBySource(sources, cacheContext: null); + } + + public static IEnumerable GetResourcesBySource(IEnumerable sources, ChocolateySourceCacheContext cacheContext) { foreach (SourceRepository source in sources) { - yield return GetResourcesBySource(source); + yield return GetResourcesBySource(source, cacheContext); } } @@ -132,7 +146,7 @@ private T ResolveResource() { this.Log().Debug("Resolving resource {0} for source {1}", typeof(T).Name, Source.PackageSource.Source); #pragma warning disable RS0030 // Do not used banned APIs - resource = Source.GetResource(); + resource = Source.GetResource(_cacheContext); #pragma warning restore RS0030 // Do not used banned APIs } catch (AggregateException ex) when (!(ex.InnerException is null)) diff --git a/src/chocolatey/infrastructure.app/nuget/NugetCommon.cs b/src/chocolatey/infrastructure.app/nuget/NugetCommon.cs index 20911503e8..3550ebd467 100644 --- a/src/chocolatey/infrastructure.app/nuget/NugetCommon.cs +++ b/src/chocolatey/infrastructure.app/nuget/NugetCommon.cs @@ -124,7 +124,10 @@ public static IEnumerable GetRemoteRepositories(ChocolateyConf } else { - ProxyCache.Instance.Override(new System.Net.WebProxy()); + // We need to override the proxy so that we don't use the NuGet configuration. + // We must however also be able to use the system proxy. + // Our changes to ProxyCache test for a null overridden proxy and get the system proxy if it's null. + ProxyCache.Instance.Override(proxy: null); } IEnumerable sources = configuration.Sources.ToStringSafe().Split(new[] { ";", "," }, StringSplitOptions.RemoveEmptyEntries); @@ -134,7 +137,7 @@ public static IEnumerable GetRemoteRepositories(ChocolateyConf var updatedSources = new StringBuilder(); foreach (var sourceValue in sources.OrEmpty()) { -var source = sourceValue; + var source = sourceValue; var bypassProxy = false; var sourceClientCertificates = new List(); @@ -240,15 +243,27 @@ public static IEnumerable GetRemoteRepositories(ChocolateyConf return repositories; } + [Obsolete("This overload is deprecated and will be removed in v3.")] public static IReadOnlyList GetRepositoryResources(ChocolateyConfiguration configuration, ILogger nugetLogger, IFileSystem filesystem) + { + return GetRepositoryResources(configuration, nugetLogger, filesystem, new ChocolateySourceCacheContext(configuration)); + } + + public static IReadOnlyList GetRepositoryResources(ChocolateyConfiguration configuration, ILogger nugetLogger, IFileSystem filesystem, ChocolateySourceCacheContext cacheContext) { IEnumerable remoteRepositories = GetRemoteRepositories(configuration, nugetLogger, filesystem); - return GetRepositoryResources(remoteRepositories); + return GetRepositoryResources(remoteRepositories, cacheContext); } + [Obsolete("This overload is deprecated and will be removed in v3.")] public static IReadOnlyList GetRepositoryResources(IEnumerable packageRepositories) { - return NuGetEndpointResources.GetResourcesBySource(packageRepositories).ToList(); + return GetRepositoryResources(packageRepositories, cacheContext: null); + } + + public static IReadOnlyList GetRepositoryResources(IEnumerable packageRepositories, ChocolateySourceCacheContext cacheContext) + { + return NuGetEndpointResources.GetResourcesBySource(packageRepositories, cacheContext).ToList(); } public static void SetHttpHandlerCredentialService(ChocolateyConfiguration configuration) diff --git a/src/chocolatey/infrastructure.app/nuget/NugetList.cs b/src/chocolatey/infrastructure.app/nuget/NugetList.cs index 3da6b30258..7ea3957df0 100644 --- a/src/chocolatey/infrastructure.app/nuget/NugetList.cs +++ b/src/chocolatey/infrastructure.app/nuget/NugetList.cs @@ -41,9 +41,15 @@ public static IEnumerable GetPackages(ChocolateyConfigur return SearchPackagesAsync(configuration, nugetLogger, filesystem).GetAwaiter().GetResult(); } + [Obsolete("This overload is deprecated and will be removed in v3.")] public static int GetCount(ChocolateyConfiguration configuration, ILogger nugetLogger, IFileSystem filesystem) { - var packageRepositoriesResources = NugetCommon.GetRepositoryResources(configuration, nugetLogger, filesystem); + return GetCount(configuration, nugetLogger, filesystem, new ChocolateySourceCacheContext(configuration)); + } + + public static int GetCount(ChocolateyConfiguration configuration, ILogger nugetLogger, IFileSystem filesystem, ChocolateySourceCacheContext cacheContext) + { + var packageRepositoriesResources = NugetCommon.GetRepositoryResources(configuration, nugetLogger, filesystem, cacheContext); string searchTermLower = configuration.Input.ToLowerSafe(); SearchFilter searchFilter = new SearchFilter(configuration.Prerelease); @@ -64,7 +70,8 @@ private async static Task> SearchPackagesAsyn ThresholdHit = false; LowerThresholdHit = false; - var packageRepositoryResources = NugetCommon.GetRepositoryResources(configuration, nugetLogger, filesystem); + var cacheContext = new ChocolateySourceCacheContext(configuration); + var packageRepositoryResources = NugetCommon.GetRepositoryResources(configuration, nugetLogger, filesystem, cacheContext); string searchTermLower = configuration.Input.ToLowerSafe(); SearchFilter searchFilter = new SearchFilter(configuration.Prerelease); @@ -91,8 +98,6 @@ private async static Task> SearchPackagesAsyn searchFilter.IdStartsWith = true; } - var cacheContext = new ChocolateySourceCacheContext(configuration); - NuGetVersion version = !string.IsNullOrWhiteSpace(configuration.Version) ? NuGetVersion.Parse(configuration.Version) : null; if (version != null) @@ -153,15 +158,15 @@ private async static Task> SearchPackagesAsyn } partResults.Clear(); - partResults.AddRange(await repositoryResources.SearchResource.SearchAsync(searchTermLower, searchFilter, skipNumber, takeNumber, nugetLogger, CancellationToken.None)); + partResults.AddRange(await repositoryResources.SearchResource.SearchAsync(searchTermLower, searchFilter, skipNumber, takeNumber, nugetLogger, cacheContext, CancellationToken.None)); skipNumber += takeNumber; perSourceThresholdLimit -= partResults.Count; perSourceThresholdMinLimit -= partResults.Count; latestResults.AddRange(partResults); } while (partResults.Count >= takeNumber && skipNumber < totalToGet); - ThresholdHit = perSourceThresholdLimit <= 0; - LowerThresholdHit = perSourceThresholdMinLimit <= 0; + ThresholdHit = ThresholdHit || perSourceThresholdLimit <= 0; + LowerThresholdHit = LowerThresholdHit || perSourceThresholdMinLimit <= 0; if (configuration.AllVersions) { @@ -191,7 +196,7 @@ private async static Task> SearchPackagesAsyn configuration.Prerelease = configuration.Prerelease || (version != null && version.IsPrerelease); configuration.AllVersions = configuration.AllVersions || (version != null); - var tempResults = await repositoryResources.ListResource.ListAsync(searchTermLower, configuration.Prerelease, configuration.AllVersions, false, nugetLogger, CancellationToken.None); + var tempResults = await repositoryResources.ListResource.ListAsync(searchTermLower, configuration.Prerelease, configuration.AllVersions, false, nugetLogger, cacheContext, CancellationToken.None); var enumerator = tempResults.GetEnumeratorAsync(); var perSourceThresholdLimit = thresholdLimit; @@ -361,7 +366,7 @@ public static ISet FindAllPackageVersions(string package if (config.Features.UsePackageRepositoryOptimizations && resource.ListResource != null) { var package = FaultTolerance.TryCatchWithLoggingException( - () => resource.ListResource.PackageAsync(packageNameLower, config.Prerelease, nugetLogger, CancellationToken.None).GetAwaiter().GetResult(), + () => resource.ListResource.PackageAsync(packageNameLower, config.Prerelease, nugetLogger, cacheContext, CancellationToken.None).GetAwaiter().GetResult(), errorMessage: "Unable to connect to source '{0}'".FormatWith(resource.Source.PackageSource.Source), throwError: false, logWarningInsteadOfError: true); diff --git a/src/chocolatey/infrastructure.app/nuget/NugetPush.cs b/src/chocolatey/infrastructure.app/nuget/NugetPush.cs index daec85fda5..7b6cfa84ad 100644 --- a/src/chocolatey/infrastructure.app/nuget/NugetPush.cs +++ b/src/chocolatey/infrastructure.app/nuget/NugetPush.cs @@ -28,7 +28,13 @@ namespace chocolatey.infrastructure.app.nuget public class NugetPush { + [Obsolete("This overload is deprecated and will be removed in v3.")] public static void PushPackage(ChocolateyConfiguration config, string nupkgFilePath, ILogger nugetLogger, string nupkgFileName, IFileSystem filesystem) + { + PushPackage(config, nupkgFilePath, nugetLogger, nupkgFileName, filesystem, cacheContext: null); + } + + public static void PushPackage(ChocolateyConfiguration config, string nupkgFilePath, ILogger nugetLogger, string nupkgFileName, IFileSystem filesystem, ChocolateySourceCacheContext cacheContext) { var timeout = TimeSpan.FromSeconds(Math.Abs(config.CommandExecutionTimeoutSeconds)); if (timeout.Seconds <= 0) @@ -43,7 +49,7 @@ public static void PushPackage(ChocolateyConfiguration config, string nupkgFileP const bool skipDuplicate = false; //OK to use FirstOrDefault in this case as the command validates that there is only one source - NuGetEndpointResources sourceEndpoint = NugetCommon.GetRepositoryResources(config, nugetLogger, filesystem).FirstOrDefault(); + NuGetEndpointResources sourceEndpoint = NugetCommon.GetRepositoryResources(config, nugetLogger, filesystem, cacheContext).FirstOrDefault(); PackageUpdateResource packageUpdateResource = sourceEndpoint.PackageUpdateResource; var nupkgFilePaths = new List() { nupkgFilePath }; diff --git a/src/chocolatey/infrastructure.app/services/AutomaticUninstallerService.cs b/src/chocolatey/infrastructure.app/services/AutomaticUninstallerService.cs index db493c2f47..84c28b402a 100644 --- a/src/chocolatey/infrastructure.app/services/AutomaticUninstallerService.cs +++ b/src/chocolatey/infrastructure.app/services/AutomaticUninstallerService.cs @@ -102,7 +102,7 @@ public void Run(PackageResult packageResult, ChocolateyConfiguration config) foreach (var key in registryKeys.OrEmpty()) { - var packageCacheLocation = _fileSystem.CombinePaths(_fileSystem.GetFullPath(config.CacheLocation), package.Id, package.Version.ToStringSafe()); + var packageCacheLocation = _fileSystem.CombinePaths(_fileSystem.GetFullPath(config.CacheLocation), package.Id, package.Version.ToNormalizedStringChecked()); Remove(key, config, packageResult, packageCacheLocation); } } diff --git a/src/chocolatey/infrastructure.app/services/ChocolateyPackageInformationService.cs b/src/chocolatey/infrastructure.app/services/ChocolateyPackageInformationService.cs index 4450823e60..37eaeee373 100644 --- a/src/chocolatey/infrastructure.app/services/ChocolateyPackageInformationService.cs +++ b/src/chocolatey/infrastructure.app/services/ChocolateyPackageInformationService.cs @@ -225,7 +225,7 @@ public void Save(ChocolateyPackageInformation packageInformation) { var versionOverrideFile = _fileSystem.CombinePaths(pkgStorePath, VersionOverrideFile); if (_fileSystem.FileExists(versionOverrideFile)) _fileSystem.DeleteFile(versionOverrideFile); - _fileSystem.WriteFile(versionOverrideFile, packageInformation.VersionOverride.ToStringSafe()); + _fileSystem.WriteFile(versionOverrideFile, packageInformation.VersionOverride.ToNormalizedStringChecked()); } else { @@ -266,6 +266,9 @@ private static string GetStorePath(IFileSystem fileSystem, string id, NuGetVersi return preferredStorePath; } + // Legacy handling for old package versions that was installed prior to v2.0.0. + // Do not remove the call to `ToStringSafe`. + var pkgStorePath = fileSystem.CombinePaths(ApplicationParameters.ChocolateyPackageInfoStoreLocation, "{0}.{1}".FormatWith(id, version.ToStringSafe())); if (fileSystem.DirectoryExists(pkgStorePath)) diff --git a/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs b/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs index 21912f20ac..e79199659d 100644 --- a/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs +++ b/src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs @@ -1,4 +1,4 @@ -// Copyright © 2017 - 2023 Chocolatey Software, Inc +// Copyright © 2017 - 2023 Chocolatey Software, Inc // Copyright © 2011 - 2017 RealDimensions Software, LLC // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -1312,11 +1312,6 @@ private int ReportActionSummary(ConcurrentDictionary pack public virtual void HandlePackageUninstall(PackageResult packageResult, ChocolateyConfiguration config) { - if (!_fileSystem.DirectoryExists(packageResult.InstallLocation)) - { - packageResult.InstallLocation += ".{0}".FormatWith(packageResult.PackageMetadata.Version.ToStringSafe()); - } - //These items only apply to windows systems. if (config.Information.PlatformType == PlatformType.Windows) { diff --git a/src/chocolatey/infrastructure.app/services/NugetService.cs b/src/chocolatey/infrastructure.app/services/NugetService.cs index 0349148085..21f5df285a 100644 --- a/src/chocolatey/infrastructure.app/services/NugetService.cs +++ b/src/chocolatey/infrastructure.app/services/NugetService.cs @@ -124,7 +124,8 @@ public virtual int Count(ChocolateyConfiguration config) int? pageValue = config.ListCommand.Page; try { - return NugetList.GetCount(config, _nugetLogger, _fileSystem); + var sourceCacheContext = new ChocolateySourceCacheContext(config); + return NugetList.GetCount(config, _nugetLogger, _fileSystem, sourceCacheContext); } finally { @@ -421,7 +422,8 @@ public virtual void Push(ChocolateyConfiguration config) string nupkgFileName = _fileSystem.GetFileName(nupkgFilePath); if (config.RegularOutput) this.Log().Info(() => "Attempting to push {0} to {1}".FormatWith(nupkgFileName, config.Sources)); - NugetPush.PushPackage(config, _fileSystem.GetFullPath(nupkgFilePath), _nugetLogger, nupkgFileName, _fileSystem); + var sourceCacheContext = new ChocolateySourceCacheContext(config); + NugetPush.PushPackage(config, _fileSystem.GetFullPath(nupkgFilePath), _nugetLogger, nupkgFileName, _fileSystem, sourceCacheContext); if (config.RegularOutput && (config.Sources.IsEqualTo(ApplicationParameters.ChocolateyCommunityFeedPushSource) || config.Sources.IsEqualTo(ApplicationParameters.ChocolateyCommunityFeedPushSourceOld))) { @@ -487,7 +489,7 @@ public void InstallDryRun(ChocolateyConfiguration config, Action GetOutdated(ChocolateyConfiguration config) { + var sourceCacheContext = new ChocolateySourceCacheContext(config); var remoteRepositories = NugetCommon.GetRemoteRepositories(config, _nugetLogger, _fileSystem); - var remoteEndpoints = NugetCommon.GetRepositoryResources(remoteRepositories); + var remoteEndpoints = NugetCommon.GetRepositoryResources(remoteRepositories, sourceCacheContext); var pathResolver = NugetCommon.GetPathResolver(_fileSystem); var outdatedPackages = new ConcurrentDictionary(); - var sourceCacheContext = new ChocolateySourceCacheContext(config); var allPackages = SetPackageNamesIfAllSpecified(config, () => { config.IgnoreDependencies = true; }); var packageNames = config.PackageNames.Split(new[] { ApplicationParameters.PackageNamesSeparator }, StringSplitOptions.RemoveEmptyEntries).OrEmpty().ToList(); @@ -1858,7 +1859,7 @@ public virtual void BackupChangedFiles(string packageInstallPath, ChocolateyConf { if (packageInfo == null || packageInfo.Package == null) return; - var version = packageInfo.Package.Version.ToStringSafe(); + var version = packageInfo.Package.Version.ToNormalizedStringChecked(); if (packageInfo.FilesSnapshot == null || packageInfo.FilesSnapshot.Files.Count == 0) { @@ -1923,7 +1924,7 @@ private void RemoveShimgenDirectors(IPackageMetadata installedPackage) private void RemovePackageFromCache(ChocolateyConfiguration config, IPackageMetadata installedPackage) { this.Log().Debug(ChocolateyLoggers.Verbose, "Ensuring removal of package cache files."); - var cacheDirectory = _fileSystem.CombinePaths(config.CacheLocation, installedPackage.Id, installedPackage.Version.ToStringSafe()); + var cacheDirectory = _fileSystem.CombinePaths(config.CacheLocation, installedPackage.Id, installedPackage.Version.ToNormalizedStringChecked()); if (!_fileSystem.DirectoryExists(cacheDirectory)) return; @@ -1952,8 +1953,8 @@ protected void RemovePackageFromNugetCache(IPackageSearchMetadata installedPacka FaultTolerance.TryCatchWithLoggingException( () => { - var packageFolderPath = _fileSystem.CombinePaths(tempFolder, "{0}/{1}".FormatWith(installedPackage.Identity.Id, installedPackage.Identity.Version.ToStringSafe())); - var nugetCachedFile = _fileSystem.CombinePaths(packageFolderPath, "{0}.{1}.nupkg".FormatWith(installedPackage.Identity.Id, installedPackage.Identity.Version.ToStringSafe())); + var packageFolderPath = _fileSystem.CombinePaths(tempFolder, "{0}/{1}".FormatWith(installedPackage.Identity.Id, installedPackage.Identity.Version.ToNormalizedStringChecked())); + var nugetCachedFile = _fileSystem.CombinePaths(packageFolderPath, "{0}.{1}.nupkg".FormatWith(installedPackage.Identity.Id, installedPackage.Identity.Version.ToNormalizedStringChecked())); var nupkgMetaDataFile = _fileSystem.CombinePaths(packageFolderPath, ".nupkg.metadata"); var nupkgShaFile = nugetCachedFile + ".sha512"; diff --git a/src/chocolatey/infrastructure.app/services/PowershellService.cs b/src/chocolatey/infrastructure.app/services/PowershellService.cs index 90b5835a07..b80dce5ba8 100644 --- a/src/chocolatey/infrastructure.app/services/PowershellService.cs +++ b/src/chocolatey/infrastructure.app/services/PowershellService.cs @@ -444,10 +444,13 @@ public void PreparePowerShellEnvironment(IPackageSearchMetadata package, Chocola Environment.SetEnvironmentVariable("packageName", package.Identity.Id); Environment.SetEnvironmentVariable("chocolateyPackageTitle", package.Title); Environment.SetEnvironmentVariable("packageTitle", package.Title); - Environment.SetEnvironmentVariable("chocolateyPackageVersion", package.Identity.Version.ToStringSafe()); - Environment.SetEnvironmentVariable("packageVersion", package.Identity.Version.ToStringSafe()); + Environment.SetEnvironmentVariable("chocolateyPackageVersion", package.Identity.Version.ToNormalizedStringChecked()); + Environment.SetEnvironmentVariable("packageVersion", package.Identity.Version.ToNormalizedStringChecked()); + // We use ToStringSafe on purpose here. There is a need for the version + // the package specified, not the normalized version we want users to use. + Environment.SetEnvironmentVariable(StringResources.EnvironmentVariables.ChocolateyPackageNuspecVersion, package.Identity.Version.ToStringSafe()); + Environment.SetEnvironmentVariable(StringResources.EnvironmentVariables.PackageNuspecVersion, package.Identity.Version.ToStringSafe()); Environment.SetEnvironmentVariable("chocolateyPackageVersionPrerelease", package.Identity.Version.Release.ToStringSafe()); - Environment.SetEnvironmentVariable("chocolateyPackageVersionPackageRelease", package.Identity.Version.Version.ToStringSafe()); Environment.SetEnvironmentVariable("chocolateyPackageFolder", packageDirectory); Environment.SetEnvironmentVariable("packageFolder", packageDirectory); diff --git a/src/chocolatey/infrastructure.app/services/RuleService.cs b/src/chocolatey/infrastructure.app/services/RuleService.cs index 8478e83875..a0ab53dc55 100644 --- a/src/chocolatey/infrastructure.app/services/RuleService.cs +++ b/src/chocolatey/infrastructure.app/services/RuleService.cs @@ -104,11 +104,26 @@ private class RuleIdEqualityComparer : IEqualityComparer { public bool Equals(ImmutableRule x, ImmutableRule y) { - return ReferenceEquals(x, y) || x.Id.IsEqualTo(x.Id); + // When the id is empty on both classes, we need to compare + // using the summary to detect if the rules are unique or not. + if (string.IsNullOrEmpty(x.Id) && string.IsNullOrEmpty(y.Id)) + { + return x.Summary.IsEqualTo(y.Summary); + } + + return x.Id.IsEqualTo(y.Id); } public int GetHashCode(ImmutableRule obj) { + // When the id is empty, we need to compare + // using the summary to detect if the rules are unique or not. + + if (string.IsNullOrEmpty(obj.Id)) + { + return obj.Summary?.GetHashCode() ?? 0; + } + return obj.Id.GetHashCode(); } } diff --git a/src/chocolatey/infrastructure.app/services/TemplateService.cs b/src/chocolatey/infrastructure.app/services/TemplateService.cs index c10014be5f..f1f103a276 100644 --- a/src/chocolatey/infrastructure.app/services/TemplateService.cs +++ b/src/chocolatey/infrastructure.app/services/TemplateService.cs @@ -271,8 +271,8 @@ public void List(ChocolateyConfiguration configuration) protected void ListCustomTemplateInformation(ChocolateyConfiguration configuration) { - var packageResources = NugetCommon.GetRepositoryResources(configuration, _nugetLogger, _fileSystem); var sourceCacheContext = new ChocolateySourceCacheContext(configuration); + var packageResources = NugetCommon.GetRepositoryResources(configuration, _nugetLogger, _fileSystem, sourceCacheContext); var pkg = NugetList.FindPackage( "{0}.template".FormatWith(configuration.TemplateCommand.Name), configuration, @@ -282,7 +282,7 @@ protected void ListCustomTemplateInformation(ChocolateyConfiguration configurati var templateInstalledViaPackage = (pkg != null); - var pkgVersion = templateInstalledViaPackage ? pkg.Identity.Version.ToStringSafe() : "0.0.0"; + var pkgVersion = templateInstalledViaPackage ? pkg.Identity.Version.ToNormalizedStringChecked() : "0.0.0"; var pkgTitle = templateInstalledViaPackage ? pkg.Title : "{0} (Unmanaged)".FormatWith(configuration.TemplateCommand.Name); var pkgSummary = templateInstalledViaPackage ? (pkg.Summary != null && !string.IsNullOrWhiteSpace(pkg.Summary.ToStringSafe()) ? "{0}".FormatWith(pkg.Summary.EscapeCurlyBraces().ToStringSafe()) : string.Empty) : string.Empty; diff --git a/src/chocolatey/infrastructure.app/templates/ChocolateyReadMeTemplate.cs b/src/chocolatey/infrastructure.app/templates/ChocolateyReadMeTemplate.cs index 7dac594a22..fd17ae41c0 100644 --- a/src/chocolatey/infrastructure.app/templates/ChocolateyReadMeTemplate.cs +++ b/src/chocolatey/infrastructure.app/templates/ChocolateyReadMeTemplate.cs @@ -84,7 +84,7 @@ public class ChocolateyReadMeTemplate * ChocolateyInstall - Top level folder where Chocolatey is installed * ChocolateyPackageName - The name of the package, equivalent to the `` field in the nuspec * ChocolateyPackageTitle - The title of the package, equivalent to the `` field in the nuspec - * ChocolateyPackageVersion - The version of the package, equivalent to the `<version />` field in the nuspec + * ChocolateyPackageVersion - The normalized version of the package, equivalent to a normalized edition of the `<version />` field in the nuspec * ChocolateyPackageFolder - The top level location of the package folder - the folder where Chocolatey has downloaded and extracted the NuGet package, typically `C:\ProgramData\chocolatey\lib\packageName`. #### Advanced Environment Variables diff --git a/src/chocolatey/infrastructure/commands/ExitCodeDescription.cs b/src/chocolatey/infrastructure/commands/ExitCodeDescription.cs new file mode 100644 index 0000000000..ff7c4072f1 --- /dev/null +++ b/src/chocolatey/infrastructure/commands/ExitCodeDescription.cs @@ -0,0 +1,34 @@ +// Copyright © 2023 Chocolatey Software, Inc +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace chocolatey.infrastructure.commands +{ + using System; + + public sealed class ExitCodeDescription + { + public ExitCodeDescription(string description, params int[] exitCodes) + { + // We use intern to save a bit of bytes so the same memory location + // is reused when possible. + Description = string.Intern(description); + ExitCodes = exitCodes; + } + + public string Description { get; } + + public int[] ExitCodes { get; } + } +} \ No newline at end of file diff --git a/src/chocolatey/infrastructure/results/PackageResult.cs b/src/chocolatey/infrastructure/results/PackageResult.cs index f7b1f0d35b..28b6621ccd 100644 --- a/src/chocolatey/infrastructure/results/PackageResult.cs +++ b/src/chocolatey/infrastructure/results/PackageResult.cs @@ -55,16 +55,16 @@ public void ResetMetadata(IPackageMetadata metadata, IPackageSearchMetadata sear PackageMetadata = metadata; SearchMetadata = search; Name = metadata.Id; - Version = metadata.Version.ToStringSafe(); + Version = metadata.Version.ToNormalizedStringChecked(); } - public PackageResult(IPackageMetadata packageMetadata, string installLocation, string source = null) : this(packageMetadata.Id, packageMetadata.Version.ToStringSafe(), installLocation) + public PackageResult(IPackageMetadata packageMetadata, string installLocation, string source = null) : this(packageMetadata.Id, packageMetadata.Version.ToNormalizedStringChecked(), installLocation) { PackageMetadata = packageMetadata; Source = source; } - public PackageResult(IPackageSearchMetadata packageSearch, string installLocation, string source = null) : this(packageSearch.Identity.Id, packageSearch.Identity.Version.ToStringSafe(), installLocation) + public PackageResult(IPackageSearchMetadata packageSearch, string installLocation, string source = null) : this(packageSearch.Identity.Id, packageSearch.Identity.Version.ToNormalizedStringChecked(), installLocation) { SearchMetadata = packageSearch; Source = source; @@ -103,7 +103,7 @@ public PackageResult(IPackageSearchMetadata packageSearch, string installLocatio */ } - public PackageResult(IPackageMetadata packageMetadata, IPackageSearchMetadata packageSearch, string installLocation, string source = null) : this(packageMetadata.Id, packageMetadata.Version.ToStringSafe(), installLocation) + public PackageResult(IPackageMetadata packageMetadata, IPackageSearchMetadata packageSearch, string installLocation, string source = null) : this(packageMetadata.Id, packageMetadata.Version.ToNormalizedStringChecked(), installLocation) { SearchMetadata = packageSearch; PackageMetadata = packageMetadata; diff --git a/src/chocolatey/packages.config b/src/chocolatey/packages.config index 116418dd7f..9dee77f615 100644 --- a/src/chocolatey/packages.config +++ b/src/chocolatey/packages.config @@ -1,19 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="AlphaFS" version="2.1.3" targetFramework="net40-Client" /> - <package id="Chocolatey.NuGet.Commands" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Common" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Configuration" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Credentials" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.DependencyResolver.Core" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Frameworks" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.LibraryModel" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.PackageManagement" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Packaging" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.ProjectModel" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Protocol" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Resolver" version="3.1.0" targetFramework="net48" /> - <package id="Chocolatey.NuGet.Versioning" version="3.1.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Commands" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Common" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Configuration" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Credentials" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.DependencyResolver.Core" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Frameworks" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.LibraryModel" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.PackageManagement" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Packaging" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.ProjectModel" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Protocol" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Resolver" version="3.3.0" targetFramework="net48" /> + <package id="Chocolatey.NuGet.Versioning" version="3.3.0" targetFramework="net48" /> <package id="log4net" version="2.0.12" targetFramework="net48" /> <package id="Microsoft.Bcl.HashCode" version="1.1.1" targetFramework="net48" /> <package id="Microsoft.CodeAnalysis.BannedApiAnalyzers" version="3.3.3" targetFramework="net48" developmentDependency="true" /> diff --git a/tests/chocolatey-tests/chocolatey.Tests.ps1 b/tests/chocolatey-tests/chocolatey.Tests.ps1 index 3e73940b1d..ee1a485d66 100644 --- a/tests/chocolatey-tests/chocolatey.Tests.ps1 +++ b/tests/chocolatey-tests/chocolatey.Tests.ps1 @@ -170,7 +170,9 @@ Describe "Ensuring Chocolatey is correctly installed" -Tag Environment, Chocolat # These tests are not a true test of PowerShell v2 compatibility as -Version 2 does not guarantee that things run exactly as in a PowerShell 2 instance, but it is as close as we can get in a testing environment. # Full proper testing on v2 would require a VM with only v2 installed. # This is skipped when not run in CI because it modifies the local system. - Context "PowerShell v2 compatibility" -Skip:(-not $env:TEST_KITCHEN) { + # These are skipped on Proxy tests because the proxy server we use doesn't allow + # the Windows updates access this needs to install PowerShell 2 support + Context "PowerShell v2 compatibility" -Skip:(-not $env:TEST_KITCHEN) -Tag ProxySkip { BeforeAll { # TODO: This doesn't work on client OSes (might be Install-WindowsOptionalFeature). Make sure this works on both server and client. Install-WindowsFeature powershell-v2 diff --git a/tests/chocolatey-tests/commands/choco-install.Tests.ps1 b/tests/chocolatey-tests/commands/choco-install.Tests.ps1 index 14190788b4..c5257a4d49 100644 --- a/tests/chocolatey-tests/commands/choco-install.Tests.ps1 +++ b/tests/chocolatey-tests/commands/choco-install.Tests.ps1 @@ -1806,6 +1806,96 @@ To install a local, or remote file, you may use: } } + # Tagged as Internal since this package is only available internally and downloads from internal infrastructure. + Context 'Installing package with Open Source Get-ChocolateyWebFile, Get-WebFileName and Get-WebHeaders' -Tag Internal, FossOnly { + BeforeAll { + $paths = New-ChocolateyInstallSnapshot + + # Cache directory is set here to prevent assertion failures + $Output = Invoke-Choco install get-chocolateywebfile "--cache-location=$($paths.PackagesPath)" --confirm + } + + AfterAll { + $null = Invoke-Choco uninstall get-chocolateywebfile --confirm + } + + It 'Exits with Success (0)' { + $Output.ExitCode | Should -Be 0 -Because $Output.String + } + + It 'Runs under background Service' -Tag Background { + $Output.Lines | Should -Contain 'Running in background mode' -Because $Output.String + } + + It 'Outputs name of remote file' { + $Output.Lines | Should -Contain 'FileName: ChocolateyGUI.msi' -Because $Output.String + } + + # We only get an output of System.Collections.Hashtable here, + # but that is enough for us to assert against the call to + # Get-WebHeaders + It 'Outputs information from web headers' { + $Output.Lines | Should -Contain 'System.Collections.Hashtable' -Because $Output.String + } + + It 'Outputs downloading software' { + $Output.Lines | Should -Contain 'Downloading get-chocolateywebfile' -Because $Output.String + } + + It 'Outputs download completed' { + $Output.Lines | Should -Contain "Download of ChocolateyGUI.msi (16.23 MB) completed." -Because $Output.String + } + + It 'Outputs path to msi executable' { + $Output.Lines | Should -Contain "Path: $env:ChocolateyInstall\lib\get-chocolateywebfile\tools\ChocolateyGUI.msi" -Because $Output.String + } + + It 'Outputs installing msi executable' { + $Output.Lines | Should -Contain 'Installing get-chocolateywebfile...' -Because $Output.String + } + + It 'Outputs installation was successful' { + $Output.Lines | Should -Contain 'get-chocolateywebfile has been installed.' -Because $Output.String + } + + It 'Installs software to expected directory' { + "${env:ProgramFiles(x86)}\Chocolatey GUI\ChocolateyGui.exe" | Should -Exist + } + } + + # Tagged as Internal as this package needs to be packaged by an older version of Chocolatey CLI to have the nuspec version + # not be normalized. + Context 'Installing non-normalized package outputting all environment variables' -Tag Internal { + BeforeAll { + Restore-ChocolateyInstallSnapshot + + $Output = Invoke-Choco install test-environment --version 0.9 --confirm + } + + It 'Exits with Success (0)' { + $Output.ExitCode | Should -Be 0 -Because $Output.String + } + + It 'Outputs <Name> as <Value>' -ForEach @(@{ + Name = 'chocolateyPackageVersion' + Value= '0.9.0' + } + @{ + Name = 'packageVersion' + Value= '0.9.0' + } + @{ + Name = 'chocolateyPackageNuspecVersion' + Value= '0.9' + } + @{ + Name = 'packageNuspecVersion' + Value= '0.9' + }) { + $Output.Lines | Should -Contain "$Name=$Value" + } + } + # This needs to be the last test in this block, to ensure NuGet configurations aren't being created. # Any tests after this block are expected to generate the configuration as they're explicitly using the NuGet CLI Test-NuGetPaths diff --git a/tests/chocolatey-tests/features/ChocolateyCache.Tests.ps1 b/tests/chocolatey-tests/features/ChocolateyCache.Tests.ps1 new file mode 100644 index 0000000000..25077ee9dc --- /dev/null +++ b/tests/chocolatey-tests/features/ChocolateyCache.Tests.ps1 @@ -0,0 +1,50 @@ +Describe 'Ensuring nupkgs cleared from temporary cache location (<Command>)' -ForEach @( + @{ Command = 'install' } + @{ Command = 'upgrade' } + @{ Command = 'download' } +) -Tag ChocolateyCache { + BeforeDiscovery { + $HasLicensedExtension = Test-PackageIsEqualOrHigher -PackageName 'chocolatey.extension' -Version '6.0.0' + } + + BeforeAll { + Initialize-ChocolateyTestInstall + } + + # Skip the download command if chocolatey.extension is not installed. + Context 'Command (<Command>)' -Skip:($Command -eq 'download' -and -not $HasLicensedExtension) { + BeforeAll { + $PackageUnderTest = 'hasdependency' + Restore-ChocolateyInstallSnapshot + + if ($Command -eq 'upgrade') { + $prep = @( + Invoke-Choco install isdependency --version 1.0.0 + Invoke-Choco install $PackageUnderTest --version 1.0.0 + ) + } + + # Clear the default Chocolatey cache directory + $TempDir = Get-TempDirectory + Remove-Item -Path $TempDir/chocolatey -Recurse -Force -ErrorAction SilentlyContinue + $Output = Invoke-Choco $Command $PackageUnderTest + } + + AfterAll { + Remove-ChocolateyInstallSnapshot + } + + It 'Exits with Success (0)' { + $Output.ExitCode | Should -Be 0 -Because $Output.String + } + + It 'Did not retain a nupkg in the Chocolatey cache' { + Get-ChildItem -Filter *.nupkg -Path $TempDir/chocolatey -Recurse | Should -BeNullOrEmpty -Because $Output.String + } + + # Skipping Download command because it downloads direct without storing files in the cache. + It 'Did retain a nuspec in the Chocolatey cache' -Skip:($Command -eq 'download') { + Get-ChildItem -Filter "$PackageUnderTest.nuspec" -Path $TempDir/chocolatey -Recurse | Should -Not -BeNullOrEmpty -Because $Output.String + } + } +} diff --git a/tests/chocolatey-tests/features/ChocolateyFunctions.Tests.ps1 b/tests/chocolatey-tests/features/ChocolateyFunctions.Tests.ps1 new file mode 100644 index 0000000000..777c302fbc --- /dev/null +++ b/tests/chocolatey-tests/features/ChocolateyFunctions.Tests.ps1 @@ -0,0 +1,39 @@ +# These tests install packages that exercise the Chocolatey PowerShell functions +# TODO: Move some of the install tests into this file +Describe 'Chocolatey PowerShell functions' { + BeforeAll { + Initialize-ChocolateyTestInstall + } + + Context 'Get-ChocolateyConfigValue' -ForEach @{ + ConfigValues = @( + @{ Name = 'addedTextValue' ; Value = 'SomeTextValue' } + @{ Name = 'addedNumberValue' ; Value = 123456 } + @{ Name = 'commandExecutionTimeoutSeconds' ; Value = 2795 } + @{ Name = 'cacheLocation' ; Value = $null } + @{ Name = 'nonExistentKey' ; Value = $null } + ) + } -Tag Get-ChocolateyConfigValue { + + BeforeAll { + Restore-ChocolateyInstallSnapshot + + foreach ($Value in $ConfigValues) { + if ($null -ne $Value.Value) { + Invoke-Choco config set --name $Value.Name --value $Value.Value + } + } + + $Output = Invoke-Choco install getconfig --confirm + } + + It 'Exits with Success (0)' { + $Output.ExitCode | Should -Be 0 -Because $Output.String + } + + It 'Outputs the expected value for config entry (<Name>)' -ForEach $ConfigValues { + # Trim the output as Lines is trimmed. + $Output.Lines | Should -Contain "${Name}: $Value".Trim() -Because $Output.String + } + } +} diff --git a/tests/chocolatey-tests/features/EnvironmentVariables.Tests.ps1 b/tests/chocolatey-tests/features/EnvironmentVariables.Tests.ps1 new file mode 100644 index 0000000000..cd3a6a2faf --- /dev/null +++ b/tests/chocolatey-tests/features/EnvironmentVariables.Tests.ps1 @@ -0,0 +1,43 @@ +Describe "Ensuring Chocolatey Environment variables are correct (<_>)" -ForEach @( + "config" + "cli" +) -Tag EnvironmentVariables, Chocolatey { + BeforeDiscovery { + $TestedVariables = @( + @{ Name = 'TEMP' ; Value = "C:\Temp\$PID" } + @{ Name = 'TMP' ; Value = "C:\Temp\$PID" } + @{ Name = 'ChocolateyPackageFolder' ; Value = '{0}\lib\test-environment' } + @{ Name = 'ChocolateyPackageName' ; Value = 'test-environment' } + @{ Name = 'ChocolateyPackageTitle' ; Value = 'test-environment (Install)' } + @{ Name = 'ChocolateyPackageVersion' ; Value = '1.0.0' } + ) + } + + BeforeAll { + Initialize-ChocolateyTestInstall + New-ChocolateyInstallSnapshot + $cacheDir = "C:\Temp\$PID" + switch ($_) { + 'config' { + Invoke-Choco config set --name=cachelocation --value $cacheDir + } + 'cli' { + $cacheArg = "--cache-location='$cacheDir'" + } + } + $Output = Invoke-Choco install test-environment --version 1.0.0 $cacheArg + } + + AfterAll { + Remove-ChocolateyTestInstall + } + + It "Should exit with success (0)" { + $Output.ExitCode | Should -Be 0 -Because $Output.String + } + + It 'Should Output the expected value for <Name> environment variable' -ForEach $TestedVariables { + $ExpectedLine = "$Name=$Value" -f $env:ChocolateyInstall + $Output.Lines | Should -Contain $ExpectedLine -Because $Output.String + } +} diff --git a/tests/chocolatey-tests/features/Proxy.Tests.ps1 b/tests/chocolatey-tests/features/Proxy.Tests.ps1 index 08926f0dcd..d69bb7a495 100644 --- a/tests/chocolatey-tests/features/Proxy.Tests.ps1 +++ b/tests/chocolatey-tests/features/Proxy.Tests.ps1 @@ -221,11 +221,6 @@ Describe "Proxy configuration (<Name>)" -Tag Proxy, ProxySkip -ForEach $TestCase continue } - $ConfigurationsToTest.System { - $Output.String | Should -MatchExactly "Proxy\.Location='$SystemSet'" - continue - } - default { $Output.String | Should -Not -Match "Proxy\.Location" $Output.String | Should -Not -Match "Proxy\.BypassList" @@ -234,33 +229,3 @@ Describe "Proxy configuration (<Name>)" -Tag Proxy, ProxySkip -ForEach $TestCase } } } - -Describe "Multi-Protocol Proxy configuration" -Tag Proxy, ProxySkip -Skip:(-not $env:TEST_KITCHEN) { - BeforeAll { - Initialize-ChocolateyTestInstall - New-ChocolateyInstallSnapshot - $arguments = $null - - $SystemSet = "SystemSetProxy" - Set-ItemProperty -Path 'HKCU:/Software/Microsoft/Windows/CurrentVersion/Internet Settings' -Name ProxyServer -Value "ftp=something;socks=another" - Set-ItemProperty -Path 'HKCU:/Software/Microsoft/Windows/CurrentVersion/Internet Settings' -Name ProxyEnable -Value 1 - } - - AfterAll { - Remove-ChocolateyTestInstall - Remove-ItemProperty -Path 'HKCU:/Software/Microsoft/Windows/CurrentVersion/Internet Settings' -Name ProxyServer -ErrorAction Ignore - Remove-ItemProperty -Path 'HKCU:/Software/Microsoft/Windows/CurrentVersion/Internet Settings' -Name ProxyEnable -ErrorAction Ignore - $env:https_proxy = $null - } - - Context "Configured for command (<Command>)" -ForEach $CommandsToTest { - BeforeAll { - $Output = Invoke-Choco $Command @arguments @ExtraArguments --debug --verbose --noop - } - - It "Should output the correct Proxy setting" { - $Output.String | Should -Not -MatchExactly "Proxy\.Location='$SystemSet'" - $Output.String | Should -Not -MatchExactly "Proxy\.Location" - } - } -} diff --git a/tests/helpers/common/Chocolatey/Get-ChocolateyVersion.ps1 b/tests/helpers/common/Chocolatey/Get-ChocolateyVersion.ps1 index 867f676391..0be6be0280 100644 --- a/tests/helpers/common/Chocolatey/Get-ChocolateyVersion.ps1 +++ b/tests/helpers/common/Chocolatey/Get-ChocolateyVersion.ps1 @@ -8,7 +8,7 @@ [CmdletBinding()] param() if (-not $script:runningVersion) { - [NuGet.Versioning.NuGetVersion]$script:runningVersion = ((Invoke-Choco --version).Lines | Where-Object { $_ -NotMatch "please upgrade" }) -join '`r`n' + [NuGet.Versioning.NuGetVersion]$script:runningVersion = (Invoke-Choco --version).Lines | Where-Object { $_ -Match "^\d+\.[\d\.]+" } | Select-Object -First 1 } $script:runningVersion diff --git a/tests/packages/getconfig/getconfig.nuspec b/tests/packages/getconfig/getconfig.nuspec new file mode 100755 index 0000000000..9678f092ef --- /dev/null +++ b/tests/packages/getconfig/getconfig.nuspec @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Do not remove this test for UTF-8: if “Ω” doesn’t appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. --> +<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd"> + <metadata> + <id>getconfig</id> + <version>1.0.0</version> + <owners>Chocolatey</owners> + <title>getconfig + Chocolatey + Chocolatey + getconfig + Test package for using Get-ChocolateyConfigValue. + + + + + diff --git a/tests/packages/getconfig/tools/chocolateyinstall.ps1 b/tests/packages/getconfig/tools/chocolateyinstall.ps1 new file mode 100755 index 0000000000..1a402b1e9e --- /dev/null +++ b/tests/packages/getconfig/tools/chocolateyinstall.ps1 @@ -0,0 +1,14 @@ +$ErrorActionPreference = 'Stop' + +$ValuesToTest = @( + 'addedTextValue' + 'addedNumberValue' + 'commandExecutionTimeoutSeconds' + 'cacheLocation' + 'nonExistentKey' +) + +foreach ($Value in $ValuesToTest) { + $Result = Get-ChocolateyConfigValue -configKey $Value + Write-Host "${Value}: $Result" +}