tests/Organization/EnvironmentVariables.Tests.ps1

<#
    Integration Test: Organization
    Tests environment variable cmdlets.
    Cmdlets: Get-XrmEnvironmentVariableValue, Set-XrmEnvironmentVariableValue
#>

. "$PSScriptRoot\..\_TestConfig.ps1";

# ============================================================
# Setup: Create an environment variable definition + value
# ============================================================
Write-Section "Setup - Create Environment Variable";

$envVarName = "pdo_test_envvar_$(Get-Random -Minimum 10000 -Maximum 99999)";
$envVarInitialValue = "InitialValue_$(Get-Random)";

# Create the environment variable definition
$envVarDef = New-XrmEntity -LogicalName "environmentvariabledefinition" -Attributes @{
    "schemaname"    = $envVarName;
    "displayname"   = "PDO Test Env Var";
    "type"          = (New-XrmOptionSetValue -Value 100000000);
    "defaultvalue"  = $envVarInitialValue;
};
$envVarDef.Id = $Global:XrmClient | Add-XrmRecord -Record $envVarDef;
Assert-Test "Environment variable definition created" {
    $envVarDef.Id -ne [Guid]::Empty;
};

# ============================================================
# Get-XrmEnvironmentVariableValue (default value, no override)
# ============================================================
Write-Section "Get-XrmEnvironmentVariableValue";

$retrievedValue = $Global:XrmClient | Get-XrmEnvironmentVariableValue -Name $envVarName;
Assert-Test "Get-XrmEnvironmentVariableValue - returns default value" {
    $retrievedValue -eq $envVarInitialValue;
};

# ============================================================
# Set-XrmEnvironmentVariableValue
# ============================================================
Write-Section "Set-XrmEnvironmentVariableValue";

$newValue = "UpdatedValue_$(Get-Random)";
$setResponse = $Global:XrmClient | Set-XrmEnvironmentVariableValue -Name $envVarName -Value $newValue;
Assert-Test "Set-XrmEnvironmentVariableValue - value set" {
    $setResponse -ne $null;
};

# Verify updated value
$retrievedUpdated = $Global:XrmClient | Get-XrmEnvironmentVariableValue -Name $envVarName;
Assert-Test "Get-XrmEnvironmentVariableValue - returns updated value" {
    $retrievedUpdated -eq $newValue;
};

# Set to empty string
$setEmptyResponse = $Global:XrmClient | Set-XrmEnvironmentVariableValue -Name $envVarName -Value "";
Assert-Test "Set-XrmEnvironmentVariableValue - set to empty" {
    $setEmptyResponse -ne $null;
};

# ============================================================
# CLEANUP
# ============================================================
Write-Section "Cleanup";

# Delete the environment variable value records
$valueQuery = New-XrmQueryExpression -LogicalName "environmentvariablevalue" -Columns "environmentvariablevalueid";
$valueQuery = $valueQuery | Add-XrmQueryCondition -Field "environmentvariabledefinitionid" -Condition Equal -Values @($envVarDef.Id);
$valueRecords = $Global:XrmClient | Get-XrmMultipleRecords -Query $valueQuery;
foreach ($val in $valueRecords) {
    $Global:XrmClient | Remove-XrmRecord -LogicalName "environmentvariablevalue" -Id $val.Id;
}

# Delete the definition
$Global:XrmClient | Remove-XrmRecord -LogicalName "environmentvariabledefinition" -Id $envVarDef.Id;
Assert-Test "Environment variable cleaned up" { $true };

Write-TestSummary;