Tests/GitHubReactions.Tests.ps1
# Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. <# .Synopsis Tests for GitHubReactions.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 { # Define Script-scoped, readonly, hidden variables. @{ defaultIssueTitle = "Test Title" defaultCommentBody = "This is a test body." defaultReactionType = "+1" otherReactionType = "eyes" }.GetEnumerator() | ForEach-Object { Set-Variable -Force -Scope Script -Option ReadOnly -Visibility Private -Name $_.Key -Value $_.Value } Describe 'Creating, modifying and deleting reactions' { BeforeAll { $repo = New-GitHubRepository -RepositoryName ([Guid]::NewGuid().Guid) -AutoInit $issue = New-GitHubIssue -Uri $repo.svn_url -Title $defaultIssueTitle $issueComment = $issue | New-GitHubIssueComment -Body "Foo" } Context 'For creating a reaction' { Set-GitHubReaction -Uri $repo.svn_url -Issue $issue.IssueNumber -ReactionType $defaultReactionType $existingReaction = Get-GitHubReaction -Uri $repo.svn_url -Issue $issue.IssueNumber It "Should have the expected reaction type" { $existingReaction.content | Should -Be $defaultReactionType } } Context 'For getting reactions from an issue' { Get-GitHubIssue -Uri $repo.svn_url -Issue $issue.IssueNumber | Set-GitHubReaction -ReactionType $otherReactionType $allReactions = Get-GitHubReaction -Uri $repo.svn_url -Issue $issue.IssueNumber $specificReactions = Get-GitHubReaction -Uri $repo.svn_url -Issue $issue.IssueNumber -ReactionType $otherReactionType It 'Should have the expected number of reactions' { $allReactions.Count | Should -Be 2 $specificReactions | Measure-Object | Select-Object -ExpandProperty Count | Should -Be 1 } It 'Should have the expected reaction content' { $specificReactions.content | Should -Be $otherReactionType $specificReactions.RepositoryUrl | Should -Be $repo.RepositoryUrl $specificReactions.IssueNumber | Should -Be $issue.IssueNumber $specificReactions.ReactionId | Should -Be $specificReactions.id $specificReactions.PSObject.TypeNames[0] | Should -Be 'GitHub.Reaction' } } Context 'For getting reactions from a pull request' { # TODO: there are currently PRs out to add the ability to create new branches and add content to a repo. # When those go in, this test can be refactored to use those so the test is more reliable using a test PR. $url = 'https://github.com/microsoft/PowerShellForGitHub' $pr = Get-GitHubPullRequest -Uri $url -PullRequest 193 $allReactions = $pr | Get-GitHubReaction $specificReactions = $pr | Get-GitHubReaction -ReactionType $otherReactionType It 'Should have the expected number of reactions' { $allReactions.Count | Should -Be 2 $specificReactions | Measure-Object | Select-Object -ExpandProperty Count | Should -Be 1 } It 'Should have the expected reaction content' { $specificReactions.content | Should -Be $otherReactionType $specificReactions.RepositoryUrl | Should -Be $url $specificReactions.PullRequestNumber | Should -Be $pr.PullRequestNumber $specificReactions.ReactionId | Should -Be $specificReactions.id $specificReactions.PSObject.TypeNames[0] | Should -Be 'GitHub.Reaction' } } Context 'For getting reactions from an Issue and deleting them' { $existingReactions = @(Get-GitHubReaction -Uri $repo.svn_url -Issue $issue.number) It 'Should have the expected number of reactions' { $existingReactions.Count | Should -Be 2 } $existingReactions | Remove-GitHubReaction -Force $existingReactions = @(Get-GitHubReaction -Uri $repo.svn_url -Issue $issue.number) It 'Should have no reactions' { $existingReactions $existingReactions.Count | Should -Be 0 } } AfterAll { Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false } } } 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 } } |