AL/Add-TestAppsToAppJson.ps1

<#
 .Synopsis
  Add Test apps to app.json
 .Description
  Test apps defined in the settings.json are added to the app.json for the test app
 .Parameter SourcePath
  Path to the project including settings.json and app.json
 .Example
  Add-TestAppsToAppJson -SourcePath 'C:\'
#>

function Add-TestAppsToAppJson {
    Param(
        #Path to determine the environment or app .json file location
        [Parameter(Mandatory = $false)]
        [String]
        $SourcePath = (Get-Location)
    )

    #Get test apps property from settings.json
    $EnvironmentJson = ConvertFrom-Json (Get-Content (Join-Path $SourcePath 'settings.json') -Raw)
    $TestappsJsonContent = $EnvironmentJson.PSObject.Properties.Item('testapps').Value

    if ($TestappsJsonContent.Length -gt 0) {
        #app has no current dependencies, add the test test dependencies directly
        $AppJsonContent = Get-Content (Join-Path $SourcePath 'app.json') -Raw
        $AppJson = ConvertFrom-Json $AppJsonContent
        $Dependencies = Get-AppKeyValue -SourcePath $SourcePath -KeyName 'dependencies'
        if ($Dependencies -eq '') {
            $AppJson | Add-Member -Name 'dependencies' -value $TestappsJsonContent -MemberType NoteProperty
        }
        else {
            #Check the test app dependency isnt already in the app.json
            $AppJson.PSObject.Properties.Remove('dependencies')

            if ($null -eq $Dependencies ) {
                $AppJson | Add-Member -Name 'dependencies' -value $TestappsJsonContent -MemberType NoteProperty
            }
            else {
                $compiler = Get-AppKeyValue -SourcePath $TestPath -KeyName 'runtime'
                [System.Array]$Dependencies = $Dependencies
                foreach ($TestDependency in $TestappsJsonContent) {
                    $SkipDependency = $false
                    foreach ($Dependency in $Dependencies) {
                        if (!$SkipDependency) {
                            if ($compiler -ge '4.3') {
                                if ($Dependency.id -eq $TestDependency.appId) {
                                    $SkipDependency = $true
                                }
                            }
                            else {
                                if ($Dependency.appId -eq $TestDependency.appId) {
                                    $SkipDependency = $true
                                }
                            }
                        }
                    }
                    if (!$SkipDependency) {
                        $Dependencies += $TestDependency
                    }
                }
                $AppJson | Add-Member -Name 'dependencies' -value $Dependencies -MemberType NoteProperty
            }
        }
        Set-Content -Path (Join-Path $SourcePath 'app.json') -Value (ConvertTo-Json $AppJson)
    }
}
Export-ModuleMember -Function Add-TestAppsToAppJson