Tests/GitHubLabels.tests.ps1
# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. <# .Synopsis Tests for GitHubLabels.ps1 module #> # 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' } ) if ($accessTokenConfigured) { Describe 'Getting labels from repository' { $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName Set-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Label $defaultLabels Context 'When querying for all labels' { $labels = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName It 'Should return expected number of labels' { $($labels).Count | Should be $:defaultLabels.Count } } Context 'When querying for specific label' { $label = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name bug It 'Should return expected label' { $label.name | Should be "bug" } } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Creating new label' { $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName $labelName = [Guid]::NewGuid().Guid New-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName -Color BBBBBB $label = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName It 'New label should be created' { $label.name | Should be $labelName } AfterEach { Remove-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Removing label' { $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName Set-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Label $defaultLabels $labelName = [Guid]::NewGuid().Guid New-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName -Color BBBBBB $labels = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName It 'Should return increased number of labels' { $($labels).Count | Should be ($defaultLabels.Count + 1) } Remove-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName $labels = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName It 'Should return expected number of labels' { $($labels).Count | Should be $defaultLabels.Count } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Updating label' { $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName $labelName = [Guid]::NewGuid().Guid Context 'Updating label color' { New-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName -Color BBBBBB Update-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName -NewName $labelName -Color AAAAAA $label = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName AfterEach { Remove-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName } It 'Label should have different color' { $label.color | Should be AAAAAA } } Context 'Updating label name' { $newLabelName = $labelName + "2" New-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName -Color BBBBBB Update-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName -NewName $newLabelName -Color BBBBBB $label = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $newLabelName AfterEach { Remove-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $newLabelName } It 'Label should have different color' { $label | Should not be $null $label.color | Should be BBBBBB } } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Applying set of labels on repository' { $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName $labelName = [Guid]::NewGuid().Guid Set-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Label $defaultLabels # Add new label New-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name $labelName -Color BBBBBB $labels = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName # Change color of existing label Update-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name "bug" -NewName "bug" -Color BBBBBB # Remove one of approved labels" Remove-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name "discussion" It 'Should return increased number of labels' { $($labels).Count | Should be ($defaultLabels.Count + 1) } Set-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Label $defaultLabels $labels = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName It 'Should return expected number of labels' { $($labels).Count | Should be $defaultLabels.Count $bugLabel = $labels | Where-Object {$_.name -eq "bug"} $bugLabel.color | Should be "fc2929" } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Adding labels to an issue'{ $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName Set-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Label $defaultLabels $issueName = [Guid]::NewGuid().Guid $issue = New-GitHubIssue -OwnerName $ownerName -RepositoryName $repositoryName -Title $issueName Context 'Adding labels to an issue' { $labelsToAdd = @('pri:lowest', 'pri:low', 'pri:medium', 'pri:high', 'pri:highest', 'bug', 'duplicate', 'enhancement', 'up for grabs', 'question', 'discussion', 'wontfix', 'in progress', 'ready') $addedLabels = @(Add-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number -LabelName $labelsToAdd) It 'Should return the number of labels that were just added' { $addedLabels.Count | Should be $defaultLabels.Count } $labelIssues = 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' { $labelIssues.Count | Should be $defaultLabels.Count } } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Creating a new Issue with labels' { $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName Set-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Label $defaultLabels $issueName = [Guid]::NewGuid().Guid $issueLabels = @($defaultLabels[0].name, $defaultLabels[1].name) $issue = New-GitHubIssue -OwnerName $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 } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Removing labels on an issue'{ $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName $issueName = [Guid]::NewGuid().Guid $issue = New-GitHubIssue -OwnerName $ownerName -RepositoryName $repositoryName -Title $issueName $labelsToAdd = @('pri:lowest', 'pri:low', 'pri:medium', 'pri:high', 'pri:highest', 'bug', 'duplicate', 'enhancement', 'up for grabs', 'question', 'discussion', 'wontfix', 'in progress', 'ready') Add-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number -LabelName $labelsToAdd Context 'For removing individual issues'{ Remove-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name "discussion" -Issue $issue.number Remove-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name "question" -Issue $issue.number Remove-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Name "bug" -Issue $issue.number $labelIssues = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number It 'Should have removed three labels from the issue' { $labelIssues.Count | Should be ($defaultLabels.Count - 3) } } Context 'For removing all issues'{ Remove-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number $labelIssues = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number It 'Should have removed all labels from the issue' { $labelIssues.Count | Should be 0 } } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } Describe 'Replacing labels on an issue'{ $repositoryName = [Guid]::NewGuid().Guid $null = New-GitHubRepository -RepositoryName $repositoryName $issueName = [Guid]::NewGuid().Guid $issue = New-GitHubIssue -OwnerName $ownerName -RepositoryName $repositoryName -Title $issueName $labelsToAdd = @('pri:lowest', 'pri:low', 'pri:medium', 'pri:high', 'pri:highest', 'bug', 'duplicate', 'enhancement', 'up for grabs', 'question', 'discussion', 'wontfix', 'in progress', 'ready') Add-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number -LabelName 'pri:medium' $addedLabels = @(Set-GitHubIssueLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number -LabelName $labelsToAdd) It 'Should return the issue with 14 labels' { $addedLabels.Count | Should be $labelsToAdd.Count } $labelIssues = Get-GitHubLabel -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number It 'Should have 14 labels after querying the issue' { $labelIssues.Count | Should be $defaultLabels.Count } $updatedIssueLabels = @($labelsToAdd[0]) $updatedIssue = Update-GitHubIssue -OwnerName $ownerName -RepositoryName $repositoryName -Issue $issue.number -Label $updatedIssueLabels It 'Should have 1 label after updating the issue' { $updatedIssue.labels.Count | Should be $updatedIssueLabels.Count } $null = Remove-GitHubRepository -OwnerName $ownerName -RepositoryName $repositoryName } } } 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 } } |