diff --git a/Test/public/getRepoAccess.test.ps1 b/Test/public/getRepoAccess.test.ps1 index 29affc1..c4adb74 100644 --- a/Test/public/getRepoAccess.test.ps1 +++ b/Test/public/getRepoAccess.test.ps1 @@ -11,7 +11,7 @@ function Test_GetRepoAccessAll_SUCCESS{ $result = Get-RepoAccess -owner $owner -repo $repo - Assert-AreEqual -Expected $result.raulgeu -Presented 'write' + Assert-AreEqual -Expected $result.raulgeu -Presented 'write (invitation Pending)' Assert-AreEqual -Expected $result.MagnusTim -Presented 'admin' Assert-AreEqual -Expected $result.rulasg -Presented 'admin' Assert-AreEqual -Expected $result.raulgeukk -Presented 'write' @@ -46,7 +46,7 @@ function Test_GetRepoAccess_Success_FromInvites{ $result = Get-RepoAccess -Owner $owner -Repo $repo - Assert-AreEqual -Expected 'write' -Presented $result.$user + Assert-AreEqual -Expected 'write (invitation Pending)' -Presented $result.$user } diff --git a/Test/public/getRepoAccessInvitation.test.ps1 b/Test/public/getRepoAccessInvitation.test.ps1 index 7adf313..ad8c022 100644 --- a/Test/public/getRepoAccessInvitation.test.ps1 +++ b/Test/public/getRepoAccessInvitation.test.ps1 @@ -1,13 +1,13 @@ function Test_GetRepoInvitations_SUCCESS{ - $owner = 'solidifycustomers' ; $repo = 'bit21' ; $user = 'raulgeu' ; $role = 'write' + $owner = 'solidifycustomers' ; $repo = 'bit21' ; $user = 'raulgeu' ; $role = 'write' $GetAccessAllSuccess = $PSScriptRoot | Join-Path -ChildPath 'testData' -AdditionalChildPath 'getAccessInvitationsSuccess.json' Set-InvokeCommandMock -Alias "gh api repos/$owner/$repo/invitations --paginate" -Command "Get-Content -Path $(($GetAccessAllSuccess | Get-Item).FullName)" $result = Get-RepoAccessInvitations -owner $owner -repo $repo - Assert-AreEqual -Expected $result.$user -Presented $role + Assert-AreEqual -Expected $result.$user -Presented "write (invitation Pending)" } function Test_GetRepoInvitations_SUCCESS_Ids{ diff --git a/Test/public/getRepoAccessTeam.Test.ps1 b/Test/public/getRepoAccessTeam.Test.ps1 index 09cf0b7..c4e5423 100644 --- a/Test/public/getRepoAccessTeam.Test.ps1 +++ b/Test/public/getRepoAccessTeam.Test.ps1 @@ -24,16 +24,16 @@ Test_GetRepoAccessTeam_Success{ Assert-Contains -Presented $result -Expected "| Photo | Name | Access | Email | Handle | Company |" Assert-Contains -Presented $result -Expected "|----------------------------|--------|----------|---------|--------|------------|" - Assert-Contains -Presented $result -Expected '| | Magnus Timner | admin | MagnusTim@github.com | [@MagnusTim](https://https://github.com/MagnusTim) | Contoso |' - Assert-Contains -Presented $result -Expected '| | Raul Gonzalez | admin | rulasg@github.com | [@rulasg](https://https://github.com/rulasg) | Contoso |' - Assert-Contains -Presented $result -Expected '| | Raul Dibildos kk | write | raulgeukk@github.com | [@raulgeukk](https://https://github.com/raulgeukk) | Contoso |' - Assert-Contains -Presented $result -Expected '| | Raul Dibildos | write | raulgeu@github.com | [@raulgeu](https://https://github.com/raulgeu) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Magnus Timner | admin | MagnusTim@github.com | [@MagnusTim](https://github.com/MagnusTim) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Raul Gonzalez | admin | rulasg@github.com | [@rulasg](https://github.com/rulasg) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Raul Dibildos kk | write | raulgeukk@github.com | [@raulgeukk](https://github.com/raulgeukk) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Raul Dibildos | write (invitation Pending) | raulgeu@github.com | [@raulgeu](https://github.com/raulgeu) | Contoso |' # Assert Sorted by Access Assert-IsTrue -Condition ($result[2] -like '*| admin |*' ) Assert-IsTrue -Condition ($result[3] -like '*| admin |*' ) Assert-IsTrue -Condition ($result[4] -like '*| write |*' ) - Assert-IsTrue -Condition ($result[5] -like '*| write |*' ) + Assert-IsTrue -Condition ($result[5] -like '*| write (invitation Pending) |*' ) } function Test_GetRepoAccessTeam_Success_NoHead{ @@ -59,8 +59,8 @@ function Test_GetRepoAccessTeam_Success_NoHead{ Assert-Count -Expected 4 -Presented $result - Assert-Contains -Presented $result -Expected '| | Magnus Timner | admin | MagnusTim@github.com | [@MagnusTim](https://https://github.com/MagnusTim) | Contoso |' - Assert-Contains -Presented $result -Expected '| | Raul Gonzalez | admin | rulasg@github.com | [@rulasg](https://https://github.com/rulasg) | Contoso |' - Assert-Contains -Presented $result -Expected '| | Raul Dibildos kk | write | raulgeukk@github.com | [@raulgeukk](https://https://github.com/raulgeukk) | Contoso |' - Assert-Contains -Presented $result -Expected '| | Raul Dibildos | write | raulgeu@github.com | [@raulgeu](https://https://github.com/raulgeu) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Magnus Timner | admin | MagnusTim@github.com | [@MagnusTim](https://github.com/MagnusTim) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Raul Gonzalez | admin | rulasg@github.com | [@rulasg](https://github.com/rulasg) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Raul Dibildos kk | write | raulgeukk@github.com | [@raulgeukk](https://github.com/raulgeukk) | Contoso |' + Assert-Contains -Presented $result -Expected '| | Raul Dibildos | write (invitation Pending) | raulgeu@github.com | [@raulgeu](https://github.com/raulgeu) | Contoso |' } \ No newline at end of file diff --git a/Test/public/syncRepoAccess.test.ps1 b/Test/public/syncRepoAccess.test.ps1 index 44db8a9..2a0876b 100644 --- a/Test/public/syncRepoAccess.test.ps1 +++ b/Test/public/syncRepoAccess.test.ps1 @@ -85,7 +85,7 @@ rulasg Assert-AreEqual -Expected '=' -Presented $result.rulasg - Assert-AreEqual -Expected '+ (write)' -Presented $result.raulgeu + Assert-AreEqual -Expected '+ (write (invitation Pending))' -Presented $result.raulgeu Assert-AreEqual -Expected '-' -Presented $result.MagnusTim @@ -125,7 +125,7 @@ rulasg Assert-AreEqual -Expected '=' -Presented $result.rulasg - Assert-AreEqual -Expected '+ (write)' -Presented $result.raulgeu + Assert-AreEqual -Expected '+ (write (invitation Pending))' -Presented $result.raulgeu Assert-AreEqual -Expected '-' -Presented $result.MagnusTim diff --git a/public/getRepoAccess.ps1 b/public/getRepoAccess.ps1 index 0393087..44fe3fe 100644 --- a/public/getRepoAccess.ps1 +++ b/public/getRepoAccess.ps1 @@ -66,16 +66,17 @@ function Get-RepoAccessUser{ if($permissions.$user -eq $role){ "Found user $user with access role $role" | Write-Verbose - return $permissions.$user + return $role } $invitations = Get-RepoAccessInvitations -Owner $owner -Repo $repo "Found $($invitations.Count) users with invitations" | Write-Verbose - if($invitations.$user -eq $role){ + # Invitation start with Role. Allow Pending tag + if($invitations.$user -Like "$role *"){ "Found user $user with invitation role $role" | Write-Verbose - return $invitations.$user + return $role } "User $user not found with access or invitation" | Write-Verbose diff --git a/public/getRepoAccessInvitation.ps1 b/public/getRepoAccessInvitation.ps1 index c26a06b..383156b 100644 --- a/public/getRepoAccessInvitation.ps1 +++ b/public/getRepoAccessInvitation.ps1 @@ -46,13 +46,36 @@ function Get-RepoAccessInvitations{ foreach ($item in $result) { $ret += @{ - $item.invitee.login = $Ids ? $result.id : $result.permissions + # return the id or the login of the permissions depending on Ids switch + $item.invitee.login = $Ids ? $result.id : $(Get-Permissions $result.permissions) } } return $ret } Export-ModuleMember -Function Get-RepoAccessInvitations +function Get-Permissions{ + [CmdletBinding()] + param( + [Parameter(Mandatory,Position=0)][object]$Permissions + ) + + switch ($Permissions.Count) { + 0 { $ret = $null } + 1 { $ret = $Permissions } + { $_ -gt 1 } { $ret = $Permissions[0] } + + Default { + throw "This should not reach this issue" + } + } + + $ret = $ret + " (invitation Pending)" + + return $ret + +} + function Remove-RepoAccessInvitation{ [CmdletBinding()] param( diff --git a/public/getRepoAccessTeam.ps1 b/public/getRepoAccessTeam.ps1 index f43fc17..1befa88 100644 --- a/public/getRepoAccessTeam.ps1 +++ b/public/getRepoAccessTeam.ps1 @@ -12,7 +12,8 @@ function Get-RepoAccessTeam{ param( [Parameter()] [string]$Owner, [Parameter()] [string]$Repo, - [Parameter()] [switch]$NoHeaders + [Parameter()] [switch]$NoHeaders, + [Parameter()] [string]$Role ) # Resolve repo name from parameters or environment @@ -31,34 +32,75 @@ function Get-RepoAccessTeam{ $ret += "|----------------------------|--------|----------|---------|--------|------------|" } - $templateLine ="| {avatar} | {name} | {access} | {email} | [@{login}](https://https://github.com/{login}) | {company} |" # Get access Control $accessList = Get-RepoAccess -Owner $owner -Repo $repo - + + if($Role){ + "Filtering by role: $Role" | Write-Verbose + $accessList = $accessList.GetEnumerator() | Where-Object { $_.Value -like "$Role*" } + } + # Sort by access $accessList = $accessList.GetEnumerator() | Sort-Object -Property Value # Create lines for each access - Foreach($access in $accessList){ - $login = $access.Name - $value = $access.Value + # Foreach($access in $accessList){ + # $login = $access.Name + # $value = $access.Value + # $templateLine ="| {avatar} | {name} | {access} | {email} | [@{login}](https://https://github.com/{login}) | {company} |" + # $user = Get-RepoUser -Login $login + # $avatar = '' -replace '{login}',$login + + # $userline = $templateLine + # $userline = $userline -replace '{login}', $user.login + # $userline = $userline -replace '{avatar}', $avatar + # $userline = $userline -replace '{name}', $user.name + # $userline = $userline -replace '{access}', $value + # $userline = $userline -replace '{email}', $user.email + # $userline = $userline -replace '{company}', $user.company + + # $ret+= $userline + # } + + $ret+= $accessList | ForEach-Object {New-UserAccessLine -Login $_.Name -Access $_.Value} + + return $ret +} Export-ModuleMember -Function Get-RepoAccessTeam + +function New-UserAccessLine{ + [CmdletBinding()] + param( + [Parameter(Position=0,ValueFromPipeline)][string]$Login, + [Parameter(Position=1,ValueFromPipeline)][string]$Access + ) + + process{ + $user = Get-RepoUser -Login $login + + if($null -eq $user){ + "Error: $login not found" | Write-Error + return + } + + $user | Write-Verbose + + $templateLine ="| {avatar} | {name} | {access} | {email} | [@{login}](https://github.com/{login}) | {company} |" + $avatar = '' -replace '{login}',$login $userline = $templateLine $userline = $userline -replace '{login}', $user.login $userline = $userline -replace '{avatar}', $avatar $userline = $userline -replace '{name}', $user.name - $userline = $userline -replace '{access}', $value + $userline = $userline -replace '{access}', $Access $userline = $userline -replace '{email}', $user.email $userline = $userline -replace '{company}', $user.company - $ret+= $userline + return $userline } - - return $ret -} Export-ModuleMember -Function Get-RepoAccessTeam +} Export-ModuleMember -Function New-UserAccessLine function Get-RepoUser{ [CmdletBinding()] diff --git a/public/syncRepoAccess.ps1 b/public/syncRepoAccess.ps1 index 16debe0..7d9ebe8 100644 --- a/public/syncRepoAccess.ps1 +++ b/public/syncRepoAccess.ps1 @@ -58,7 +58,7 @@ function Sync-RepoAccess{ "Processing $user for role $role" | Write-Verbose # Already invited to this role - if($invitations.$user -eq $role){ + if($invitations.$user -Like "$role *"){ "User $user has an invitation pending" | Write-Verbose $ret.$user = "?" continue