Skip to content

Commit d0f8f7a

Browse files
Add regression test for the version prefix on release tags
The test asserts the tag a repository with VersionPrefix 'v' expects, and keeps an unprefixed repository covered. It fails against the current derivation, which builds the tag from the manifest's Major.Minor.Patch only. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent fd2c7d9 commit d0f8f7a

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
[Diagnostics.CodeAnalysis.SuppressMessageAttribute(
2+
'PSUseDeclaredVarsMoreThanAssignments', '',
3+
Justification = 'Variables are assigned in BeforeAll and used inside It blocks.'
4+
)]
5+
[CmdletBinding()]
6+
param()
7+
8+
BeforeAll {
9+
Import-Module -Name 'PSModule' -Force
10+
Import-Module -Name (Join-Path -Path $PSScriptRoot -ChildPath '../src/Publish-PSModule.Helpers.psm1') -Force
11+
}
12+
13+
Describe 'Publish-PSModule.Helpers' {
14+
Describe 'Get-ReleaseTag' {
15+
Context 'Get-ReleaseTag - repository with a version prefix' {
16+
It 'Get-ReleaseTag - prefixes a stable release tag with the configured prefix' {
17+
Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' | Should -Be 'v1.1.10'
18+
}
19+
20+
It 'Get-ReleaseTag - prefixes a stable release tag when the prerelease label is empty' {
21+
Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' -Prerelease '' | Should -Be 'v1.1.10'
22+
}
23+
24+
It 'Get-ReleaseTag - prefixes a prerelease tag with the configured prefix' {
25+
Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' -Prerelease 'mybranch001' |
26+
Should -Be 'v1.1.10-mybranch001'
27+
}
28+
29+
It 'Get-ReleaseTag - supports a multi-character prefix' {
30+
Get-ReleaseTag -VersionPrefix 'release-v' -ModuleVersion '2.0.0' | Should -Be 'release-v2.0.0'
31+
}
32+
}
33+
34+
Context 'Get-ReleaseTag - repository without a version prefix' {
35+
It 'Get-ReleaseTag - leaves a stable release tag unprefixed' {
36+
Get-ReleaseTag -VersionPrefix '' -ModuleVersion '1.1.10' | Should -Be '1.1.10'
37+
}
38+
39+
It 'Get-ReleaseTag - leaves a prerelease tag unprefixed' {
40+
Get-ReleaseTag -VersionPrefix '' -ModuleVersion '1.1.10' -Prerelease 'mybranch001' |
41+
Should -Be '1.1.10-mybranch001'
42+
}
43+
44+
It 'Get-ReleaseTag - treats an absent prefix as no prefix' {
45+
Get-ReleaseTag -ModuleVersion '1.1.10' | Should -Be '1.1.10'
46+
}
47+
48+
It 'Get-ReleaseTag - treats a null prefix as no prefix' {
49+
Get-ReleaseTag -VersionPrefix $null -ModuleVersion '1.1.10' | Should -Be '1.1.10'
50+
}
51+
}
52+
53+
Context 'Get-ReleaseTag - input normalization' {
54+
It 'Get-ReleaseTag - trims whitespace around the prefix' {
55+
Get-ReleaseTag -VersionPrefix ' v ' -ModuleVersion '1.1.10' | Should -Be 'v1.1.10'
56+
}
57+
58+
It 'Get-ReleaseTag - trims whitespace around the prerelease label' {
59+
Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' -Prerelease ' mybranch001 ' |
60+
Should -Be 'v1.1.10-mybranch001'
61+
}
62+
63+
It 'Get-ReleaseTag - treats a whitespace-only prerelease label as a stable release' {
64+
Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' -Prerelease ' ' | Should -Be 'v1.1.10'
65+
}
66+
67+
It 'Get-ReleaseTag - requires a module version' {
68+
{ Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '' } | Should -Throw
69+
}
70+
}
71+
72+
# Cleanup-PSModulePrereleases selects the releases to delete with
73+
# `tagName -like "*$prereleaseName*" -and tagName -ne $publishedReleaseTag`, where the published tag is
74+
# the value publish.ps1 exports as PSMODULE_PUBLISH_PSMODULE_CONTEXT_ReleaseTag. Both halves of that
75+
# filter have to keep working once the tag carries a prefix.
76+
Context 'Get-ReleaseTag - AutoCleanup tag matching contract' {
77+
It 'Get-ReleaseTag - keeps the prerelease name inside a prefixed tag so cleanup still matches it' {
78+
Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' -Prerelease 'mybranch001' |
79+
Should -BeLike '*mybranch*'
80+
}
81+
82+
It 'Get-ReleaseTag - keeps the prerelease name inside an unprefixed tag so cleanup still matches it' {
83+
Get-ReleaseTag -VersionPrefix '' -ModuleVersion '1.1.10' -Prerelease 'mybranch001' |
84+
Should -BeLike '*mybranch*'
85+
}
86+
87+
It 'Get-ReleaseTag - produces the same tag twice so cleanup can exclude the published release' {
88+
$first = Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' -Prerelease 'mybranch001'
89+
$second = Get-ReleaseTag -VersionPrefix 'v' -ModuleVersion '1.1.10' -Prerelease 'mybranch001'
90+
$first | Should -Be $second
91+
}
92+
}
93+
}
94+
}

0 commit comments

Comments
 (0)