Execute-Tests.ps1

# Module: TeamsFunctions
# Function: Test
# Author: David Eberhardt
# Updated: 11-OCT-2020

# Pester

[CmdletBinding(DefaultParameterSetName = "full")]
param (
  [Parameter(ParameterSetName = "full")]
  [switch]$full,

  [Parameter(ParameterSetName = "individual")]
  [switch]$private,

  [Parameter(ParameterSetName = "individual")]
  [switch]$public

)

begin {
  if (($PSBoundParameters.ContainsKey('private') -or $PSBoundParameters.ContainsKey('public')) -and -not $PSBoundParameters.ContainsKey('full')) {
    $all = $false
  }
  elseif ($PSBoundParameters.ContainsKey('full')) {
    $all = $true
  }
  elseif ($PSBoundParameters.Keys.Count -eq 0) {
    $all = $true
  }

  Import-Module Pester

}

process {
  if ($all) {
    # Run the structure tests
    Write-Verbose -Message "$($MyInvocation.MyCommand.Name) - Running Tests against MODULE (Integrity check)" -Verbose
    Invoke-Pester "$PSScriptRoot\TeamsFunctions.Tests.ps1"

  }

  if ($all -or $private) {
    # Run Functional Tests for Private functions
    Write-Verbose -Message "$($MyInvocation.MyCommand.Name) - Running Tests against PRIVATE Functions" -Verbose
    $PrivateTests = Get-ChildItem "$PSScriptRoot\Private\Tests" -Include "*.Tests.ps1" -Recurse #| Select-Object -First 1
    Invoke-Pester $PrivateTests.FullName

  }

  if ($all -or $public) {
    # Run Functional Tests for Public functions
    Write-Verbose -Message "$($MyInvocation.MyCommand.Name) - Running Tests against PUBLIC Functions" -Verbose
    $PublicTests = Get-ChildItem "$PSScriptRoot\Public\Tests" -Include "*.Tests.ps1" -Recurse #| Select-Object -First 1
    Invoke-Pester $PublicTests.FullName

  }

}

end {

}

# SIG # Begin signature block
# MIIECAYJKoZIhvcNAQcCoIID+TCCA/UCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUL8dKCySeIWLPBAt0Pn9Fuf5o
# ksOgggIZMIICFTCCAX6gAwIBAgIQa3i9Sh/NdbhOjG+ewKFPfjANBgkqhkiG9w0B
# AQUFADAlMSMwIQYDVQQDDBpEYXZpZCBFYmVyaGFyZHQgLSBDb2RlU2lnbjAeFw0y
# MDA2MTMxMTA4NTNaFw0yNDA2MTMwMDAwMDBaMCUxIzAhBgNVBAMMGkRhdmlkIEVi
# ZXJoYXJkdCAtIENvZGVTaWduMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3
# m6z32wDOJ/ZnUYR5tJaujtCN2MVrOYs/ZwSVJvralxDUKHSLAGdmKmO1H5hH4Nmv
# NBe1/L95AVDugTaoH9UK/snN9pcYJ7E7UqLH4ySqJuqE10VmpD2sRi3I2RDL1/eh
# weUut8B3G4bwrA3o2Iy4Y6Kd7IMUAZzUVWwl01jsPQIDAQABo0YwRDATBgNVHSUE
# DDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUO8DeqyD0FHkF6JO8JT7syAeXJXAwDgYD
# VR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBBQUAA4GBAFCN2PtWoAvowM+pcxIV/gp2
# RB2rFyPfjLWjfAeKPfXmcfsMAPIoevTrKj3VAzzoF32wZRvdHk7jLssrhT0nmF7L
# 20n7K7RxJ3lccZ0MEdIHsmiklqbV+f9moVtXmgwwJzYkWekjIfrDUSdJeu0BYzR0
# H+8/FVd9YHgogHQN9t3hMYIBWTCCAVUCAQEwOTAlMSMwIQYDVQQDDBpEYXZpZCBF
# YmVyaGFyZHQgLSBDb2RlU2lnbgIQa3i9Sh/NdbhOjG+ewKFPfjAJBgUrDgMCGgUA
# oHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYB
# BAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0B
# CQQxFgQUJjoiVleNxZxyXcm7YGP/OiWl8C0wDQYJKoZIhvcNAQEBBQAEgYB55leO
# 7b9G/pbXTJva+g5dq3jdOCesEN1Vctf1adZGP7EiK8BQzO+tlRcPbG9aNUA28hnv
# D3uz4g/hut/kGuhqzNqkUNQF3oO45tGmQFjQ8/as2F5VGB7cMi6DwXAGp/Cz2w7y
# 6xPX0zvkr1qJHgiJkCJebRqKNYfJoY+C5UjCEw==
# SIG # End signature block