My question does focus on running tests in Appveyor so hopefully this forum is alright for this.
I’ve built a module that interacts with the rest api of Last.fm. The way I handle the api and session keys is by storing them in the password vault of the local computer. The
Get-LFMConfigurationfunction then gets those keys and store them in a script variable that’s available to all functions so it’s not necessary to type them out on every function making an api call. See below:
function Get-LFMConfiguration {
# .ExternalHelp PowerLFM.psm1-help.xml
[CmdletBinding()]
param ()
$module = (Get-Command -Name $MyInvocation.MyCommand.Name).ModuleName
try {
[Void][Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]
$vault = New-Object -TypeName Windows.Security.Credentials.PasswordVault -ErrorAction Stop
$ak = $vault.Retrieve($module, 'APIKey').Password
$sk = $vault.Retrieve($module, 'SessionKey').Password
$ss = $vault.Retrieve($module, 'SharedSecret').Password
$script:LFMConfig = [pscustomobject] @{
'APIKey' = $ak
'SessionKey' = $sk
'SharedSecret' = $ss
}
Write-Verbose 'LFMConfig is loaded in to the session'
} catch {
Write-Error $_.Exception.Message
}
}
I’ve built an integration test that seeks to make calls to the rest api. It works fine running locally as the $LFMConfig variable is available but running this in Appveyor obviously fails as that variable doesn’t contain anything and returns null. What is the best way to make those variables available in Appveyor to have a passing test? Below is my current attempt that fails:
Describe 'Add-LFMArtistTag: Integration' -Tag Integration {
BeforeAll {
if ($env:APPVEYOR) {
$script:LFMConfig = [pscustomobject] @{
'APIKey' = $env:LFMApiKey
'SessionKey' = $env:LFMSessionKey
}
Write-Output [$LFMConfig.ApiKey]
}
else {
Get-LFMConfiguration
}
$atParams = @{
Artist = 'Deftones'
Tag = 'randomValue'
Confirm = $false
}
Remove-LFMArtistTag @atParams
}
It "Should not contain the random value tag before adding it" {
$tag = Get-LFMArtistTag -Artist Deftones
$tag.Tag | Should -Not -Be 'randomValue'
}
It "Should add the new random value tag to the artist" {
Add-LFMArtistTag @atParams
$tag = Get-LFMArtistTag -Artist Deftones
$tag.Where({$_.Tag -eq 'randomValue'}).Tag | Should -Not -BeNullOrEmpty
$tag.Where({$_.Tag -eq 'randomValue'}).Tag | Should -Be 'randomValue'
}
AfterAll {
Remove-LFMArtistTag @atParams
}
}
And the environment variables I added to the appveyor.yml
environment:
LFMApiKey:
secure: 3hqS76v5ydp1RAfqHveKisX1Cs/xFFOISouteoSO69wUuHVrSrqmi3IPpP/NFQmh
LFMSessionKey:
secure: gMAfmqAx9wTyeT5qEDB4zW5N6+GexurGriIaWoupOww1aFZGaDJNxUfbznCpA6PD