Skip to content

Commit 0f9278b

Browse files
committed
Working on tests
1 parent 3657be7 commit 0f9278b

File tree

2 files changed

+178
-73
lines changed

2 files changed

+178
-73
lines changed

GitHubReleases.ps1

Lines changed: 58 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -89,60 +89,65 @@ function Get-GitHubRelease
8989
[Parameter(
9090
ParameterSetName='Elements')]
9191
[Parameter(
92-
ParameterSetName="Elements-ReleaseId")]
92+
ParameterSetName='Elements-ReleaseId')]
9393
[Parameter(
94-
ParameterSetName="Elements-Latest")]
94+
ParameterSetName='Elements-Latest')]
9595
[Parameter(
96-
ParameterSetName="Elements-Tag")]
96+
ParameterSetName='Elements-Tag')]
9797
[string] $OwnerName,
9898

9999
[Parameter(
100100
ParameterSetName='Elements')]
101101
[Parameter(
102-
ParameterSetName="Elements-ReleaseId")]
102+
ParameterSetName='Elements-ReleaseId')]
103103
[Parameter(
104-
ParameterSetName="Elements-Latest")]
104+
ParameterSetName='Elements-Latest')]
105105
[Parameter(
106-
ParameterSetName="Elements-Tag")]
106+
ParameterSetName='Elements-Tag')]
107107
[string] $RepositoryName,
108108

109109
[Parameter(
110110
Mandatory,
111+
ValueFromPipelineByPropertyName,
111112
ParameterSetName='Uri')]
112113
[Parameter(
113114
Mandatory,
114-
ParameterSetName="Uri-ReleaseId")]
115+
ValueFromPipelineByPropertyName,
116+
ParameterSetName='Uri-ReleaseId')]
115117
[Parameter(
116118
Mandatory,
117-
ParameterSetName="Uri-Latest")]
119+
ValueFromPipelineByPropertyName,
120+
ParameterSetName='Uri-Latest')]
118121
[Parameter(
119122
Mandatory,
120-
ParameterSetName="Uri-Tag")]
123+
ValueFromPipelineByPropertyName,
124+
ParameterSetName='Uri-Tag')]
125+
[Alias('RepositoryUrl')]
121126
[string] $Uri,
122127

123128
[Parameter(
124129
Mandatory,
125-
ParameterSetName="Elements-ReleaseId")]
130+
ParameterSetName='Elements-ReleaseId')]
126131
[Parameter(
127132
Mandatory,
128-
ParameterSetName="Uri-ReleaseId")]
133+
ParameterSetName='Uri-ReleaseId')]
129134
[Alias('ReleaseId')]
130135
[int64] $Release,
131136

132137
[Parameter(
133138
Mandatory,
134-
ParameterSetName="Elements-Latest")]
139+
ParameterSetName='Elements-Latest')]
135140
[Parameter(
136141
Mandatory,
137-
ParameterSetName="Uri-Latest")]
142+
ParameterSetName='Uri-Latest')]
138143
[switch] $Latest,
139144

140145
[Parameter(
141146
Mandatory,
142-
ParameterSetName="Elements-Tag")]
147+
ParameterSetName='Elements-Tag')]
143148
[Parameter(
144149
Mandatory,
145-
ParameterSetName="Uri-Tag")]
150+
ParameterSetName='Uri-Tag')]
146151
[string] $Tag,
147152

148153
[string] $AccessToken,
@@ -197,7 +202,15 @@ function Get-GitHubRelease
197202
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -BoundParameters $PSBoundParameters -Name NoStatus -ConfigValueName DefaultNoStatus)
198203
}
199204

200-
return Invoke-GHRestMethodMultipleResult @params
205+
$multipleResult = Invoke-GHRestMethodMultipleResult @params
206+
207+
# Add additional property to ease pipelining
208+
foreach ($result in $multipleResult)
209+
{
210+
Add-Member -InputObject $result -Name 'ReleaseId' -Value $result.id -MemberType NoteProperty -Force
211+
}
212+
213+
return $multipleResult
201214
}
202215

203216
function New-GitHubRelease
@@ -276,7 +289,9 @@ function New-GitHubRelease
276289

277290
[Parameter(
278291
Mandatory,
292+
ValueFromPipelineByPropertyName,
279293
ParameterSetName='Uri')]
294+
[Alias('html_url')]
280295
[string] $Uri,
281296

282297
[Parameter(Mandatory)]
@@ -334,7 +349,12 @@ function New-GitHubRelease
334349
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
335350
}
336351

337-
return Invoke-GHRestMethod @params
352+
$result = Invoke-GHRestMethod @params
353+
354+
# Add additional property to ease pipelining
355+
Add-Member -InputObject $result -Name 'ReleaseId' -Value $result.id -MemberType NoteProperty -Force
356+
357+
return $result
338358
}
339359

340360
function Set-GitHubRelease
@@ -413,10 +433,15 @@ function Set-GitHubRelease
413433

414434
[Parameter(
415435
Mandatory,
436+
ValueFromPipelineByPropertyName,
416437
ParameterSetName='Uri')]
438+
[Alias('html_url')]
417439
[string] $Uri,
418440

419-
[Parameter(Mandatory)]
441+
[Parameter(
442+
Mandatory,
443+
ValueFromPipelineByPropertyName)]
444+
[Alias('ReleaseId')]
420445
[int64] $Release,
421446

422447
[string] $TagName,
@@ -472,7 +497,12 @@ function Set-GitHubRelease
472497
'NoStatus' = (Resolve-ParameterWithDefaultConfigurationValue -Name NoStatus -ConfigValueName DefaultNoStatus)
473498
}
474499

475-
return Invoke-GHRestMethod @params
500+
$result = Invoke-GHRestMethod @params
501+
502+
# Add additional property to ease pipelining
503+
Add-Member -InputObject $result -Name 'ReleaseId' -Value $result.id -MemberType NoteProperty -Force
504+
505+
return $result
476506
}
477507

478508
function Remove-GitHubRelease
@@ -526,7 +556,7 @@ function Remove-GitHubRelease
526556
[CmdletBinding(
527557
SupportsShouldProcess,
528558
DefaultParameterSetName='Elements',
529-
ConfirmImpact="High")]
559+
ConfirmImpact='High')]
530560
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="One or more parameters (like NoStatus) are only referenced by helper methods which get access to it from the stack via Get-Variable -Scope 1.")]
531561
[Alias('Delete-GitHubRelease')]
532562
param(
@@ -538,10 +568,15 @@ function Remove-GitHubRelease
538568

539569
[Parameter(
540570
Mandatory,
571+
ValueFromPipelineByPropertyName,
541572
ParameterSetName='Uri')]
573+
[Alias('html_url')]
542574
[string] $Uri,
543575

544-
[Parameter(Mandatory)]
576+
[Parameter(
577+
Mandatory,
578+
ValueFromPipelineByPropertyName)]
579+
[Alias('ReleaseId')]
545580
[int64] $Release,
546581

547582
[string] $AccessToken,
@@ -785,7 +820,7 @@ function New-GitHubReleaseAsset
785820
The path to the file to upload as a new asset.
786821
787822
.PARAMETER Label
788-
An alternate short description o fthe asset. Used in place of the filename.
823+
An alternate short description of the asset. Used in place of the filename.
789824
790825
.PARAMETER ContentType
791826
The MIME Media Type for the file being uploaded. By default, this will be inferred based
@@ -1064,7 +1099,7 @@ function Remove-GitHubReleaseAsset
10641099
[CmdletBinding(
10651100
SupportsShouldProcess,
10661101
DefaultParameterSetName='Elements',
1067-
ConfirmImpact="High")]
1102+
ConfirmImpact='High')]
10681103
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="One or more parameters (like NoStatus) are only referenced by helper methods which get access to it from the stack via Get-Variable -Scope 1.")]
10691104
[Alias('Delete-GitHubReleaseAsset')]
10701105
param(

Tests/GitHubReleases.tests.ps1

Lines changed: 120 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -12,78 +12,148 @@ $moduleRootPath = Split-Path -Path $PSScriptRoot -Parent
1212

1313
try
1414
{
15-
if ($accessTokenConfigured)
15+
if (-not $accessTokenConfigured)
1616
{
17-
Describe 'Getting releases from repository' {
18-
$ownerName = "dotnet"
19-
$repositoryName = "core"
20-
$releases = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName)
17+
return
18+
}
2119

22-
Context 'When getting all releases' {
23-
It 'Should return multiple releases' {
24-
$releases.Count | Should BeGreaterThan 1
25-
}
20+
# Define Script-scoped, readonly, hidden variables.
21+
@{
22+
defaultTagName = '0.2.0'
23+
defaultReleaseName = 'ReleaseName'
24+
defaultReleaseBody = 'ReleaseBody'
25+
}.GetEnumerator() | ForEach-Object {
26+
Set-Variable -Force -Scope Script -Option ReadOnly -Visibility Private -Name $_.Key -Value $_.Value
27+
28+
}
29+
30+
Describe 'Getting releases from repository' {
31+
$ownerName = "dotnet"
32+
$repositoryName = "core"
33+
$releases = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName)
34+
35+
Context 'When getting all releases' {
36+
It 'Should return multiple releases' {
37+
$releases.Count | Should BeGreaterThan 1
2638
}
39+
}
2740

28-
Context 'When getting the latest releases' {
29-
$latest = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName -Latest)
41+
Context 'When getting the latest releases' {
42+
$latest = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName -Latest)
3043

31-
It 'Should return one value' {
32-
$latest.Count | Should Be 1
33-
}
44+
It 'Should return one value' {
45+
$latest.Count | Should Be 1
46+
}
3447

35-
It 'Should return the first release from the full releases list' {
36-
$latest[0].url | Should Be $releases[0].url
37-
$latest[0].name | Should Be $releases[0].name
38-
}
48+
It 'Should return the first release from the full releases list' {
49+
$latest[0].url | Should Be $releases[0].url
50+
$latest[0].name | Should Be $releases[0].name
3951
}
52+
}
4053

41-
Context 'When getting a specific release' {
42-
$specificIndex = 5
43-
$specific = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName -ReleaseId $releases[$specificIndex].id)
54+
Context 'When getting a specific release' {
55+
$specificIndex = 5
56+
$specific = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName -ReleaseId $releases[$specificIndex].id)
4457

45-
It 'Should return one value' {
46-
$specific.Count | Should Be 1
47-
}
58+
It 'Should return one value' {
59+
$specific.Count | Should Be 1
60+
}
4861

49-
It 'Should return the correct release' {
50-
$specific.name | Should Be $releases[$specificIndex].name
51-
}
62+
It 'Should return the correct release' {
63+
$specific.name | Should Be $releases[$specificIndex].name
5264
}
65+
}
5366

54-
Context 'When getting a tagged release' {
55-
$taggedIndex = 8
56-
$tagged = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName -Tag $releases[$taggedIndex].tag_name)
67+
Context 'When getting a tagged release' {
68+
$taggedIndex = 8
69+
$tagged = @(Get-GitHubRelease -OwnerName $ownerName -RepositoryName $repositoryName -Tag $releases[$taggedIndex].tag_name)
5770

58-
It 'Should return one value' {
59-
$tagged.Count | Should Be 1
60-
}
71+
It 'Should return one value' {
72+
$tagged.Count | Should Be 1
73+
}
6174

62-
It 'Should return the correct release' {
63-
$tagged.name | Should Be $releases[$taggedIndex].name
64-
}
75+
It 'Should return the correct release' {
76+
$tagged.name | Should Be $releases[$taggedIndex].name
6577
}
6678
}
79+
}
6780

68-
Describe 'Getting releases from default owner/repository' {
69-
$originalOwnerName = Get-GitHubConfiguration -Name DefaultOwnerName
70-
$originalRepositoryName = Get-GitHubConfiguration -Name DefaultRepositoryName
81+
Describe 'Getting releases from default owner/repository' {
82+
$originalOwnerName = Get-GitHubConfiguration -Name DefaultOwnerName
83+
$originalRepositoryName = Get-GitHubConfiguration -Name DefaultRepositoryName
7184

72-
try {
73-
Set-GitHubConfiguration -DefaultOwnerName "dotnet"
74-
Set-GitHubConfiguration -DefaultRepositoryName "core"
75-
$releases = @(Get-GitHubRelease)
85+
try
86+
{
87+
Set-GitHubConfiguration -DefaultOwnerName "dotnet"
88+
Set-GitHubConfiguration -DefaultRepositoryName "core"
89+
$releases = @(Get-GitHubRelease)
7690

77-
Context 'When getting all releases' {
78-
It 'Should return multiple releases' {
79-
$releases.Count | Should BeGreaterThan 1
80-
}
91+
Context 'When getting all releases' {
92+
It 'Should return multiple releases' {
93+
$releases.Count | Should BeGreaterThan 1
8194
}
82-
} finally {
83-
Set-GitHubConfiguration -DefaultOwnerName $originalOwnerName
84-
Set-GitHubConfiguration -DefaultRepositoryName $originalRepositoryName
8595
}
8696
}
97+
finally
98+
{
99+
Set-GitHubConfiguration -DefaultOwnerName $originalOwnerName
100+
Set-GitHubConfiguration -DefaultRepositoryName $originalRepositoryName
101+
}
102+
}
103+
104+
Describe 'Creating, changing and deleting releases' {
105+
$repo = New-GitHubRepository -RepositoryName ([Guid]::NewGuid().Guid) -AutoInit -Private
106+
107+
Context 'When creating a simple new release' {
108+
$release = New-GitHubRelease -Uri $repo.svn_url -TagName $script:defaultTagName
109+
$queried = Get-GitHubRelease -Uri $repo.svn_url -Release $release.id
110+
111+
It 'Should be queryable' {
112+
$queried.id | Should -Be $release.id
113+
$queried.tag_name | Should -Be $script:defaultTagName
114+
}
115+
116+
It 'Should have the expected default property values' {
117+
$queried.name | Should -BeNullOrEmpty
118+
$queried.body | Should -BeNullOrEmpty
119+
$queried.draft | Should -BeFalse
120+
$queried.prerelease | Should -BeFalse
121+
}
122+
123+
It 'Should be modifiable' {
124+
Set-GitHubRelease -Uri $repo.svn_url -Release $release.id -Name $script:defaultReleaseName -Body $script:defaultReleaseBody -Draft -PreRelease
125+
$queried = Get-GitHubRelease -Uri $repo.svn_url -Release $release.id
126+
$queried.name | Should -Be $script:defaultReleaseName
127+
$queried.body | Should -Be $script:defaultReleaseBody
128+
$queried.draft | Should -BeTrue
129+
$queried.prerelease | Should -BeTrue
130+
}
131+
132+
It 'Should be removable' {
133+
Remove-GitHubRelease -Uri $repo.svn_url -Release $release.id -Confirm:$false
134+
{ Get-GitHubRelease -Uri $repo.svn_url -Release $release.id } | Should -Throw
135+
}
136+
137+
It 'Should be creatable with non-default property values' {
138+
$release = New-GitHubRelease -Uri $repo.svn_url -TagName $script:defaultTagName -Name $script:defaultReleaseName -Body $script:defaultReleaseBody -Draft -PreRelease
139+
$queried = Get-GitHubRelease -Uri $repo.svn_url -Release $release.id
140+
$queried.id | Should -Be $release.id
141+
$queried.tag_name | Should -Be $script:defaultTagName
142+
$queried.name | Should -Be $script:defaultReleaseName
143+
$queried.body | Should -Be $script:defaultReleaseBody
144+
$queried.draft | Should -BeTrue
145+
$queried.prerelease | Should -BeTrue
146+
Remove-GitHubRelease -Uri $repo.svn_url -Release $release.id -Confirm:$false
147+
}
148+
}
149+
150+
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
151+
}
152+
153+
Describe 'Creating, changing and deleting release assets' {
154+
155+
# TODO
156+
87157
}
88158
}
89159
finally

0 commit comments

Comments
 (0)