You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

104 lines
4.6 KiB

<#
Tests repository files that the build and GitHub use, without a build: every packages.config lists the AlphaFS
version that the projects reference and ship, Dependabot keeps the actions of the CI workflow up to date, and the
manifest and the README describe the release.
#>
[Diagnostics.CodeAnalysis.SuppressMessageAttribute(
'PSUseDeclaredVarsMoreThanAssignments', '', Justification = 'Pester shares variables between blocks.'
)]
param ()
BeforeDiscovery {
$repositoryPath = Join-Path -Path $PSScriptRoot -ChildPath '..'
$packageConfigs = foreach ($project in Get-ChildItem -Path $repositoryPath -Filter '*.csproj' -Recurse -Depth 1) {
$configPath = Join-Path -Path $project.DirectoryName -ChildPath 'packages.config'
if ((Test-Path -LiteralPath $configPath) -and (Select-String -LiteralPath $configPath -Pattern 'id="AlphaFS"' -Quiet)) {
@{ Project = $project.Directory.Name; Path = $configPath }
}
}
}
Describe 'NuGet packages of the projects' {
BeforeAll {
$repositoryPath = Join-Path -Path $PSScriptRoot -ChildPath '..'
$projects = Get-ChildItem -Path $repositoryPath -Filter '*.csproj' -Recurse -Depth 1
$hintPathVersions = @($projects | Select-String -Pattern 'packages\\AlphaFS\.(\d+\.\d+\.\d+)\\' |
ForEach-Object -Process { $_.Matches[0].Groups[1].Value } | Sort-Object -Unique)
}
It 'Should reference one AlphaFS version in the HintPaths of all projects' {
$hintPathVersions | Should -HaveCount 1
}
It 'Should find the packages.config of the three projects that reference AlphaFS' -ForEach @(@{ Configs = $packageConfigs }) {
$Configs | Should -HaveCount 3
}
It 'Should list the AlphaFS version of the HintPaths in <Project>\packages.config' -ForEach $packageConfigs {
$package = ([xml] (Get-Content -LiteralPath $Path -Raw)).packages.package |
Where-Object -Property id -EQ -Value 'AlphaFS'
$package.version | Should -BeExactly $hintPathVersions[0]
}
}
Describe 'Dependabot configuration' {
BeforeAll {
$configPath = Join-Path -Path $PSScriptRoot -ChildPath '..\.github\dependabot.yml'
$lines = if (Test-Path -LiteralPath $configPath) { Get-Content -LiteralPath $configPath } else { @() }
$raw = $lines -join "`n"
$ecosystems = @($lines | Select-String -Pattern '^\s*-\s*package-ecosystem:\s*"?([\w-]+)"?\s*$' |
ForEach-Object -Process { $_.Matches[0].Groups[1].Value })
}
It 'Should exist in the .github folder' {
$configPath | Should -Exist
}
It 'Should use version 2 of the format and the root folder of the repository' {
$lines -match '^version:\s*2\s*$' | Should -HaveCount 1
$lines -match '^\s+directory:\s*"?/"?\s*$' | Should -HaveCount 1
}
It 'Should update only the actions of the CI workflow' {
$ecosystems | Should -BeExactly @('github-actions')
}
It 'Should check for updates every week' {
$lines -match '^\s+interval:\s*"?weekly"?\s*$' | Should -HaveCount 1
}
It 'Should wait at least a week before it proposes a new release' {
$raw | Should -Match '(?m)^\s+cooldown:\s*\n\s+default-days:\s*([7-9]|[1-9]\d+)\s*$'
}
It 'Should group all updates into one pull request' {
$raw | Should -Match '(?m)^\s+groups:\s*\n\s+[\w-]+:\s*\n\s+patterns:\s*\n\s+-\s*["'']\*["'']\s*$'
}
}
Describe 'Release metadata' {
BeforeAll {
$repositoryPath = Join-Path -Path $PSScriptRoot -ChildPath '..'
$manifest = Import-PowerShellDataFile -Path (Join-Path -Path $repositoryPath -ChildPath 'NTFSSecurity\NTFSSecurity.psd1')
$version = $manifest.ModuleVersion
if ($manifest.PrivateData.PSData.Prerelease) {
$version = '{0}-{1}' -f $version, $manifest.PrivateData.PSData.Prerelease
}
}
# Before 5.0.0-rc2, the description named Windows PowerShell, although the module supports PowerShell 7 as well.
It 'Should describe the module without naming one PowerShell edition' {
$manifest.Description | Should -BeExactly 'PowerShell module for managing file and folder security on NTFS volumes'
}
# The PowerShell Gallery doesn't accept a version twice, and CI published 5.0.0-rc1 on 2026-10-04.
It 'Should not reuse the published version 5.0.0-rc1' {
$version | Should -Not -Be '5.0.0-rc1'
}
It 'Should not name a prerelease version in the README, which outlives the release' {
Get-Content -LiteralPath (Join-Path -Path $repositoryPath -ChildPath 'Docs\README.md') -Raw |
Should -Not -Match '\d+\.\d+\.\d+-[A-Za-z]'
}
}