Tests/GitHubLabels.tests.ps1
# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. <# .Synopsis Tests for GitHubLabels.ps1 module #> [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', '', Justification='Suppress false positives in Pester code blocks')] param() # This is common test code setup logic for all Pester test files $moduleRootPath = Split-Path -Path $PSScriptRoot -Parent . (Join-Path -Path $moduleRootPath -ChildPath 'Tests\Common.ps1') try { $defaultLabels = @( @{ 'name' = 'pri:lowest' 'color' = '4285F4' }, @{ 'name' = 'pri:low' 'color' = '4285F4' }, @{ 'name' = 'pri:medium' 'color' = '4285F4' }, @{ 'name' = 'pri:high' 'color' = '4285F4' }, @{ 'name' = 'pri:highest' 'color' = '4285F4' }, @{ 'name' = 'bug' 'color' = 'fc2929' }, @{ 'name' = 'duplicate' 'color' = 'cccccc' }, @{ 'name' = 'enhancement' 'color' = '121459' }, @{ 'name' = 'up for grabs' 'color' = '159818' }, @{ 'name' = 'question' 'color' = 'cc317c' }, @{ 'name' = 'discussion' 'color' = 'fe9a3d' }, @{ 'name' = 'wontfix' 'color' = 'dcb39c' }, @{ 'name' = 'in progress' 'color' = 'f0d218' }, @{ 'name' = 'ready' 'color' = '145912' } ) Describe 'Getting labels from a repository' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName Initialize-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $defaultLabels } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'When querying for all labels' { $labels = @(Get-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName) It 'Should return expected number of labels' { $labels.Count | Should -Be $defaultLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $labels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'When querying for all labels (via repo on pipeline)' { $labels = @($repo | Get-GitHubLabel) It 'Should return expected number of labels' { $labels.Count | Should -Be $defaultLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $labels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'When pipeline properties are disabled' { BeforeAll { Set-GitHubConfiguration -DisablePipelineSupport $labels = @($repo | Get-GitHubLabel) } AfterAll { Set-GitHubConfiguration -DisablePipelineSupport:$false } It 'Should return expected number of labels' { $labels.Count | Should -Be $defaultLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $labels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -BeNullOrEmpty $label.LabelId | Should -BeNullOrEmpty $label.LabelName | Should -BeNullOrEmpty } } } Context 'When querying for a specific label' { $labelName = 'bug' $label = Get-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $labelName It 'Should return expected label' { $label.name | Should -Be $labelName } It 'Should have the expected type and additional properties' { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } Context 'When querying for a specific label (via repo on pipeline)' { $labelName = 'bug' $label = $repo | Get-GitHubLabel -Label $labelName It 'Should return expected label' { $label.name | Should -Be $labelName } It 'Should have the expected type and additional properties' { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } # TODO: This test has been disabled until we can figure out how to fix the parameter sets # for Get-GitHubLabel pipelining to still support Label this way. # # Context 'When querying for a specific label (via Label on pipeline)' { # $labelName = 'bug' # $label = $labelName | Get-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName # It 'Should return expected label' { # $label.name | Should -Be $labelName # } # It 'Should have the expected type and additional properties' { # $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' # $label.RepositoryUrl | Should -Be $repo.RepositoryUrl # $label.LabelId | Should -Be $label.id # $label.LabelName | Should -Be $label.name # } # } } Describe 'Creating a new label' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'On a repo with parameters' { $labelName = [Guid]::NewGuid().Guid $color = 'AAAAAA' $label = New-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $labelName -Color $color It 'New label should be created' { $label.name | Should -Be $labelName $label.color | Should -Be $color } It 'Should have the expected type and additional properties' { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } Context 'On a repo with and color starts with a #' { $labelName = [Guid]::NewGuid().Guid $color = '#AAAAAA' $label = New-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $labelName -Color $color It 'New label should be created' { $label.name | Should -Be $labelName $label.color | Should -Be $color.Substring(1) $label.description | Should -BeNullOrEmpty } It 'Should have the expected type and additional properties' { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } Context 'On a repo with the repo on the pipeline' { $labelName = [Guid]::NewGuid().Guid $color = 'BBBBBB' $description = 'test description' $label = $repo | New-GitHubLabel -Label $labelName -Color $color -Description $description It 'New label should be created' { $label.name | Should -Be $labelName $label.color | Should -Be $color $label.description | Should -Be $description } It 'Should have the expected type and additional properties' { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } Context 'On a repo with the name on the pipeline' { $labelName = [Guid]::NewGuid().Guid $color = 'CCCCCC' $label = $labelName | New-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Color $color It 'New label should be created' { $label.name | Should -Be $labelName $label.color | Should -Be $color } It 'Should have the expected type and additional properties' { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } Context 'On a repo with three names on the pipeline' { $labelNames = @(([Guid]::NewGuid().Guid), ([Guid]::NewGuid().Guid), ([Guid]::NewGuid().Guid)) $color = 'CCCCCC' $labels = @($labelNames | New-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Color $color) It 'Has the right count of labels' { $labels.Count | Should -Be $labelNames.Count } It 'Has the right label details' { foreach ($label in $labels) { $labelNames | Should -Contain $label.name $label.color | Should -Be $color } } It 'Should have the expected type and additional properties' { foreach ($label in $labels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } } Describe 'Removing a label' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'Removing a label with parameters' { $label = $repo | New-GitHubLabel -Label 'test' -Color 'CCCCCC' Remove-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $label.name -Force It 'Should be gone after being removed by parameter' { { $label | Get-GitHubLabel } | Should -Throw } } Context 'Removing a label with the repo on the pipeline' { $label = $repo | New-GitHubLabel -Label 'test' -Color 'CCCCCC' $repo | Remove-GitHubLabel -Label $label.name -Confirm:$false It 'Should be gone after being removed by parameter' { { $label | Get-GitHubLabel } | Should -Throw } } Context 'Removing a label with the name on the pipeline' { $label = $repo | New-GitHubLabel -Label 'test' -Color 'CCCCCC' $label.name | Remove-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Force It 'Should be gone after being removed by parameter' { { $label | Get-GitHubLabel } | Should -Throw } } Context 'Removing a label with the label object on the pipeline' { $label = $repo | New-GitHubLabel -Label 'test' -Color 'CCCCCC' $label | Remove-GitHubLabel -Force It 'Should be gone after being removed by parameter' { { $label | Get-GitHubLabel } | Should -Throw } } } Describe 'Updating a label' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'Updating label color with parameters' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' $newColor = 'AAAAAA' $result = Set-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $label.name -Color $newColor -PassThru It 'Label should have different color' { $result.name | Should -Be $label.name $result.color | Should -Be $newColor $result.description | Should -Be $label.description } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } Context 'Updating label color (with #) with parameters' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' $newColor = '#AAAAAA' $result = Set-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $label.name -Color $newColor -PassThru It 'Label should have different color' { $result.name | Should -Be $label.name $result.color | Should -Be $newColor.Substring(1) $result.description | Should -Be $label.description } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } Context 'Updating label name with parameters' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' $newName = [Guid]::NewGuid().Guid $result = Set-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $label.name -NewName $newName -PassThru It 'Label should have different name' { $result.name | Should -Be $newName $result.color | Should -Be $label.color $result.description | Should -Be $label.description } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } Context 'Updating label description with parameters' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' -Description 'test description' $newDescription = [Guid]::NewGuid().Guid $result = Set-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $label.name -Description $newDescription -PassThru It 'Label should have different name' { $result.name | Should -Be $label.name $result.color | Should -Be $label.color $result.description | Should -Be $newDescription } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } Context 'Updating label name, color and description with parameters' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' -Description 'test description' $newName = [Guid]::NewGuid().Guid $newColor = 'AAAAAA' $newDescription = [Guid]::NewGuid().Guid $result = Set-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $label.name -NewName $newName -Color $newColor -Description $newDescription -PassThru It 'Label should have different everything' { $result.name | Should -Be $newName $result.color | Should -Be $newColor $result.description | Should -Be $newDescription } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } Context 'Updating label color with repo on the pipeline' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' $newColor = 'AAAAAA' $result = $repo | Set-GitHubLabel -Label $label.name -Color $newColor -PassThru It 'Label should have different color' { $result.name | Should -Be $label.name $result.color | Should -Be $newColor $result.description | Should -Be $label.description } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } Context 'Updating label name with the label on the pipeline' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' $newName = [Guid]::NewGuid().Guid $result = $label | Set-GitHubLabel -NewName $newName -PassThru It 'Label should have different name' { $result.name | Should -Be $newName $result.color | Should -Be $label.color $result.description | Should -Be $label.description } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } Context 'Updating label name, color and description with the label on the pipeline' { $label = $repo | New-GitHubLabel -Label ([Guid]::NewGuid().Guid) -Color 'BBBBBB' -Description 'test description' $newName = [Guid]::NewGuid().Guid $newColor = 'AAAAAA' $newDescription = [Guid]::NewGuid().Guid $result = $label | Set-GitHubLabel -NewName $newName -Color $newColor -Description $newDescription -PassThru It 'Label should have different everything' { $result.name | Should -Be $newName $result.color | Should -Be $newColor $result.description | Should -Be $newDescription } It 'Should have the expected type and additional properties' { $result.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $result.RepositoryUrl | Should -Be $repo.RepositoryUrl $result.LabelId | Should -Be $result.id $result.LabelName | Should -Be $result.name } } } Describe 'Initializing the labels on a repository' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'Applying a default set of labels' { Initialize-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $defaultLabels $labels = @($repo | Get-GitHubLabel) It 'Should return the expected number of labels' { $labels.Count | Should -Be $defaultLabels.Count } It 'Should have the right set of labels' { foreach ($item in $defaultLabels) { $label = $labels | Where-Object { $_.name -eq $item.name } $item.name | Should -Be $label.name $item.color | Should -Be $label.color } } } Context 'Applying an overlapping set of labels' { $newLabels = @( @{ 'name' = $defaultLabels[0].name; 'color' = 'aaaaaa' }, @{ 'name' = $defaultLabels[1].name; 'color' = 'bbbbbb' } @{ 'name' = $defaultLabels[2].name; 'color' = $defaultLabels[2].color } @{ 'name' = ([Guid]::NewGuid().Guid); 'color' = 'cccccc' } @{ 'name' = ([Guid]::NewGuid().Guid); 'color' = 'dddddd' } ) $originalLabels = @($repo | Get-GitHubLabel) $null = $repo | Initialize-GitHubLabel -Label $newLabels $labels = @($repo | Get-GitHubLabel) It 'Should return the expected number of labels' { $labels.Count | Should -Be $newLabels.Count } It 'Should have the right set of labels' { foreach ($item in $newLabels) { $label = $labels | Where-Object { $_.name -eq $item.name } $item.name | Should -Be $label.name $item.color | Should -Be $label.color } } It 'Should have retained the ID''s of the pre-existing labels' { for ($i = 0; $i -le 2; $i++) { $originalLabel = $originalLabels | Where-Object { $_.name -eq $newLabels[$i].name } $label = $labels | Where-Object { $_.name -eq $newLabels[$i].name } $label.id | Should -Be $originalLabel.id } for ($i = 3; $i -le 4; $i++) { $originalLabel = $originalLabels | Where-Object { $_.name -eq $newLabels[$i].name } $label = $labels | Where-Object { $_.name -eq $newLabels[$i].name } $originalLabel | Should -BeNullOrEmpty $label | Should -Not -BeNullOrEmpty } } } } Describe 'Adding labels to an issue' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName $repo | Initialize-GitHubLabel -Label $defaultLabels } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'Adding labels to an issue' { $expectedLabels = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[3].name) $issue = $repo | New-GitHubIssue -Title 'test issue' $result = @(Add-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Issue $issue.number -LabelName $expectedLabels -PassThru) It 'Should return the number of labels that were just added' { $result.Count | Should -Be $expectedLabels.Count } It 'Should be the right set of labels' { foreach ($label in $expectedLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } $issueLabels = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number It 'Should return the number of labels that were just added from querying the issue again' { $issueLabels.Count | Should -Be $expectedLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $issueLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Adding labels to an issue with the repo on the pipeline' { $expectedLabels = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[3].name) $issue = $repo | New-GitHubIssue -Title 'test issue' $result = @($repo | Add-GitHubIssueLabel -Issue $issue.number -LabelName $expectedLabels -PassThru) It 'Should return the number of labels that were just added' { $result.Count | Should -Be $expectedLabels.Count } It 'Should be the right set of labels' { foreach ($label in $expectedLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } $issueLabels = $repo | Get-GitHubLabel -Issue $issue.number It 'Should return the number of labels that were just added from querying the issue again' { $issueLabels.Count | Should -Be $expectedLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $issueLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Adding labels to an issue with the issue on the pipeline' { $expectedLabels = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[3].name) $issue = $repo | New-GitHubIssue -Title 'test issue' $result = @($issue | Add-GitHubIssueLabel -LabelName $expectedLabels -PassThru) It 'Should return the number of labels that were just added' { $result.Count | Should -Be $expectedLabels.Count } It 'Should be the right set of labels' { foreach ($label in $expectedLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } $issueLabels = $issue | Get-GitHubLabel It 'Should return the number of labels that were just added from querying the issue again' { $issueLabels.Count | Should -Be $expectedLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $issueLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Adding labels to an issue with the label names on the pipeline' { $expectedLabels = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[3].name) $issue = $repo | New-GitHubIssue -Title 'test issue' $result = @($expectedLabels | Add-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Issue $issue.number -PassThru) It 'Should return the number of labels that were just added' { $result.Count | Should -Be $expectedLabels.Count } It 'Should be the right set of labels' { foreach ($label in $expectedLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } $issueLabels = $issue | Get-GitHubLabel It 'Should return the number of labels that were just added from querying the issue again' { $issueLabels.Count | Should -Be $expectedLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $issueLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Adding labels to an issue with the label object on the pipeline' { $expectedLabels = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[3].name) $issue = $repo | New-GitHubIssue -Title 'test issue' $labels = @($expectedLabels | ForEach-Object { Get-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $_ } ) $result = @($labels | Add-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Issue $issue.number -PassThru) It 'Should return the number of labels that were just added' { $result.Count | Should -Be $expectedLabels.Count } It 'Should be the right set of labels' { foreach ($label in $expectedLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } $issueLabels = $issue | Get-GitHubLabel It 'Should return the number of labels that were just added from querying the issue again' { $issueLabels.Count | Should -Be $expectedLabels.Count } It 'Should have the expected type and additional properties' { foreach ($label in $issueLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } } Describe 'Creating a new Issue with labels' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName $repo | Initialize-GitHubLabel -Label $defaultLabels } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'When creating a new issue using parameters' { $issueName = [Guid]::NewGuid().Guid $issueLabels = @($defaultLabels[0].name, $defaultLabels[1].name) $issue = New-GitHubIssue -OwnerName $script:ownerName -RepositoryName $repositoryName -Title $issueName -Label $issueLabels It 'Should return the number of labels that were just added' { $issue.labels.Count | Should -Be $issueLabels.Count } It 'Should be the right set of labels' { foreach ($label in $issueLabels) { $issue.labels.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $issue.labels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'When creating a new issue using the repo on the pipeline' { $issueName = [Guid]::NewGuid().Guid $issueLabels = @($defaultLabels[0].name, $defaultLabels[1].name) $issue = $repo | New-GitHubIssue -Title $issueName -Label $issueLabels It 'Should return the number of labels that were just added' { $issue.labels.Count | Should -Be $issueLabels.Count } It 'Should be the right set of labels' { foreach ($label in $issueLabels) { $issue.labels.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $issue.labels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } } Describe 'Removing labels on an issue' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName $repo | Initialize-GitHubLabel -Label $defaultLabels } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'For removing an individual issue with parameters' { $issueName = [Guid]::NewGuid().Guid $issue = $repo | New-GitHubIssue -Title $issueName $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[2].name) $issue | Add-GitHubIssueLabel -LabelName $labelsToAdd -PassThru $issueLabels = @($issue | Get-GitHubLabel) It 'Should have the expected number of labels' { $issueLabels.Count | Should -Be $labelsToAdd.Count } # Doing this manually instead of in a loop to try out different combinations of -Confirm:$false and -Force Remove-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $labelsToAdd[0] -Issue $issue.number -Confirm:$false Remove-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $labelsToAdd[1] -Issue $issue.number -Force Remove-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Label $labelsToAdd[2] -Issue $issue.number -Confirm:$false -Force $issueLabels = @($issue | Get-GitHubLabel) It 'Should have removed all labels from the issue' { $issueLabels.Count | Should -Be 0 } } Context 'For removing an individual issue using the repo on the pipeline' { $issueName = [Guid]::NewGuid().Guid $issue = $repo | New-GitHubIssue -Title $issueName $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[2].name, $defaultLabels[3].name) $issue | Add-GitHubIssueLabel -LabelName $labelsToAdd -PassThru $issueLabels = @($issue | Get-GitHubLabel) It 'Should have the expected number of labels' { $issueLabels.Count | Should -Be $labelsToAdd.Count } $labelToRemove = $labelsToAdd[0] $repo | Remove-GitHubIssueLabel -Label $labelToRemove -Issue $issue.number -Confirm:$false $issueLabels = @($issue | Get-GitHubLabel) It 'Should have removed the expected label from the issue' { $issueLabels.Count | Should -Be ($labelsToAdd.Count - 1) $issueLabels.name | Should -Not -Contain $labelToRemove } } Context 'For removing an individual issue using the issue on the pipeline' { $issueName = [Guid]::NewGuid().Guid $issue = $repo | New-GitHubIssue -Title $issueName $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[2].name, $defaultLabels[3].name) $issue | Add-GitHubIssueLabel -LabelName $labelsToAdd -PassThru $issueLabels = @($issue | Get-GitHubLabel) It 'Should have the expected number of labels' { $issueLabels.Count | Should -Be $labelsToAdd.Count } $labelToRemove = $labelsToAdd[1] $issue | Remove-GitHubIssueLabel -Label $labelToRemove -Confirm:$false $issueLabels = @($issue | Get-GitHubLabel) It 'Should have removed the expected label from the issue' { $issueLabels.Count | Should -Be ($labelsToAdd.Count - 1) $issueLabels.name | Should -Not -Contain $labelToRemove } } # TODO: This has been disabled for now, as ValueFromPipeline has been disabled until we # sort out some complication issues with the ParameterSets # # Context 'For removing an individual issue using the label name on the pipeline' { # $issueName = [Guid]::NewGuid().Guid # $issue = $repo | New-GitHubIssue -Title $issueName # $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[2].name, $defaultLabels[3].name) # $issue | Add-GitHubIssueLabel -LabelName $labelsToAdd -PassThru # $issueLabels = @($issue | Get-GitHubLabel) # It 'Should have the expected number of labels' { # $issueLabels.Count | Should -Be $labelsToAdd.Count # } # $labelToRemove = $labelsToAdd[2] # $labelToRemove | Remove-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Issue $issue.number -Confirm:$false # $issueLabels = @($issue | Get-GitHubLabel) # It 'Should have removed the expected label from the issue' { # $issueLabels.Count | Should -Be ($labelsToAdd.Count - 1) # $issueLabels.name | Should -Not -Contain $labelToRemove # } # } Context 'For removing an individual issue using the label object on the pipeline' { $issueName = [Guid]::NewGuid().Guid $issue = $repo | New-GitHubIssue -Title $issueName $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[2].name, $defaultLabels[3].name) $issue | Add-GitHubIssueLabel -LabelName $labelsToAdd -PassThru $issueLabels = @($issue | Get-GitHubLabel) It 'Should have the expected number of labels' { $issueLabels.Count | Should -Be $labelsToAdd.Count } $labelToRemove = $labelsToAdd[0] $label = $repo | Get-GitHubLabel -Label $labelToRemove $label | Remove-GitHubIssueLabel -Issue $issue.number -Confirm:$false $issueLabels = @($issue | Get-GitHubLabel) It 'Should have removed the expected label from the issue' { $issueLabels.Count | Should -Be ($labelsToAdd.Count - 1) $issueLabels.name | Should -Not -Contain $labelToRemove } } Context 'For removing all issues' { $issueName = [Guid]::NewGuid().Guid $issue = $repo | New-GitHubIssue -Title $issueName $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[2].name, $defaultLabels[3].name) $issue | Add-GitHubIssueLabel -LabelName $labelsToAdd -PassThru $issueLabels = @($issue | Get-GitHubLabel) It 'Should have the expected number of labels' { $issueLabels.Count | Should -Be $labelsToAdd.Count } $issue | Remove-GitHubIssueLabel -Confirm:$false $issueLabels = @($issue | Get-GitHubLabel) It 'Should have removed all labels from the issue' { $issueLabels.Count | Should -Be 0 } } Context 'For removing all issues using Set-GitHubIssueLabel with the Issue on the pipeline' { $issueName = [Guid]::NewGuid().Guid $issue = $repo | New-GitHubIssue -Title $issueName $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[2].name, $defaultLabels[3].name) $issue | Add-GitHubIssueLabel -LabelName $labelsToAdd -PassThru $issueLabels = @($issue | Get-GitHubLabel) It 'Should have the expected number of labels' { $issueLabels.Count | Should -Be $labelsToAdd.Count } $issue | Set-GitHubIssueLabel -Confirm:$false $issueLabels = @($issue | Get-GitHubLabel) It 'Should have removed all labels from the issue' { $issueLabels.Count | Should -Be 0 } } } Describe 'Replacing labels on an issue' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName $repo | Initialize-GitHubLabel -Label $defaultLabels } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'Change the set of labels with parameters' { $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name) $issue = $repo | New-GitHubIssue -Title ([Guid]::NewGuid().Guid) -Label $labelsToAdd It 'Should have assigned the expected labels' { $issue.labels.Count | Should -Be $labelsToAdd.Count foreach ($label in $labelsToAdd) { $issue.labels.name | Should -Contain $label } } $newIssueLabels = @($defaultLabels[0].name, $defaultLabels[5].name) $result = @(Set-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Issue $issue.number -Label $newIssueLabels -PassThru) It 'Should have the expected labels' { $result.labels.Count | Should -Be $newIssueLabels.Count foreach ($label in $newIssueLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Change the set of labels with the repo on the pipeline' { $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name) $issue = $repo | New-GitHubIssue -Title ([Guid]::NewGuid().Guid) -Label $labelsToAdd It 'Should have assigned the expected labels' { $issue.labels.Count | Should -Be $labelsToAdd.Count foreach ($label in $labelsToAdd) { $issue.labels.name | Should -Contain $label } } $newIssueLabels = @($defaultLabels[0].name, $defaultLabels[5].name) $result = @($repo | Set-GitHubIssueLabel -Issue $issue.number -Label $newIssueLabels -PassThru) It 'Should have the expected labels' { $result.labels.Count | Should -Be $newIssueLabels.Count foreach ($label in $newIssueLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Change the set of labels with the issue on the pipeline' { $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name) $issue = $repo | New-GitHubIssue -Title ([Guid]::NewGuid().Guid) -Label $labelsToAdd It 'Should have assigned the expected labels' { $issue.labels.Count | Should -Be $labelsToAdd.Count foreach ($label in $labelsToAdd) { $issue.labels.name | Should -Contain $label } } $newIssueLabels = @($defaultLabels[0].name, $defaultLabels[5].name) $result = @($issue | Set-GitHubIssueLabel -Label $newIssueLabels -PassThru) It 'Should have the expected labels' { $result.labels.Count | Should -Be $newIssueLabels.Count foreach ($label in $newIssueLabels) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Change the set of labels with parameters with the labels on the pipeline' { $labelsToAdd = @($defaultLabels[0].name, $defaultLabels[1].name) $issue = $repo | New-GitHubIssue -Title ([Guid]::NewGuid().Guid) -Label $labelsToAdd It 'Should have assigned the expected labels' { $issue.labels.Count | Should -Be $labelsToAdd.Count foreach ($label in $labelsToAdd) { $issue.labels.name | Should -Contain $label } } $newIssueLabelNames = @($defaultLabels[0].name, $defaultLabels[5].name) $issueLabels = @($newIssueLabelNames | ForEach-Object { $repo | Get-GitHubLabel -Label $_ }) $result = @($issueLabels | Set-GitHubIssueLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Issue $issue.number -PassThru) It 'Should have the expected labels' { $result.labels.Count | Should -Be $newIssueLabelNames.Count foreach ($label in $newIssueLabelNames) { $result.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $result) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } } Describe 'Labels and Milestones' { BeforeAll { $repositoryName = [Guid]::NewGuid().Guid $repo = New-GitHubRepository -RepositoryName $repositoryName $repo | Initialize-GitHubLabel -Label $defaultLabels $milestone = $repo | New-GitHubMilestone -Title 'test milestone' $issueLabels = @($defaultLabels[0].name, $defaultLabels[1].name, $defaultLabels[3].name) $issue = $milestone | New-GitHubIssue -Title 'test issue' -Label $issueLabels $issueLabels2 = @($defaultLabels[4].name, $defaultLabels[5].name) $issue2 = $milestone | New-GitHubIssue -Title 'test issue' -Label $issueLabels2 } AfterAll { $repo | Remove-GitHubRepository -Force } Context 'Getting labels for issues in a milestone with parameters' { It 'Should return the number of labels that were just added to the issue' { $issue.labels.Count | Should -Be $issueLabels.Count $issue2.labels.Count | Should -Be $issueLabels2.Count } $milestoneLabels = Get-GitHubLabel -OwnerName $script:ownerName -RepositoryName $repositoryName -Milestone $milestone.number It 'Should return the same number of labels in the issue that were assigned to the milestone' { $milestoneLabels.Count | Should -Be ($issue.labels.Count + $issue2.labels.Count) } It 'Should be the right set of labels' { $allLabels = $issue.labels.name + $issue2.labels.name foreach ($label in $allLabels) { $milestoneLabels.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $milestoneLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Getting labels for issues in a milestone with the repo on the pipeline' { It 'Should return the number of labels that were just added to the issue' { $issue.labels.Count | Should -Be $issueLabels.Count $issue2.labels.Count | Should -Be $issueLabels2.Count } $milestoneLabels = $repo | Get-GitHubLabel -Milestone $milestone.number It 'Should return the same number of labels in the issues that were assigned to the milestone' { $milestoneLabels.Count | Should -Be ($issue.labels.Count + $issue2.labels.Count) } It 'Should be the right set of labels' { $allLabels = $issue.labels.name + $issue2.labels.name foreach ($label in $allLabels) { $milestoneLabels.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $milestoneLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } Context 'Getting labels for issues in a milestone on the pipeline' { It 'Should return the number of labels that were just added to the issue' { $issue.labels.Count | Should -Be $issueLabels.Count $issue2.labels.Count | Should -Be $issueLabels2.Count } $milestoneLabels = $milestone | Get-GitHubLabel It 'Should return the same number of labels in the issue that is assigned to the milestone' { $milestoneLabels.Count | Should -Be ($issue.labels.Count + $issue2.labels.Count) } It 'Should be the right set of labels' { $allLabels = $issue.labels.name + $issue2.labels.name foreach ($label in $allLabels) { $milestoneLabels.name | Should -Contain $label } } It 'Should have the expected type and additional properties' { foreach ($label in $milestoneLabels) { $label.PSObject.TypeNames[0] | Should -Be 'GitHub.Label' $label.RepositoryUrl | Should -Be $repo.RepositoryUrl $label.LabelId | Should -Be $label.id $label.LabelName | Should -Be $label.name } } } } } finally { if (Test-Path -Path $script:originalConfigFile -PathType Leaf) { # Restore the user's configuration to its pre-test state Restore-GitHubConfiguration -Path $script:originalConfigFile $script:originalConfigFile = $null } } |