Containers/Import-Testing.ps1

<#
 .Synopsis
  Imports test functions into the container
 .Description
  Imports the standard test functions into the container
 .Parameter ContainerName
  Name of the container. Can be provided in the settings.json
 .Parameter Credential
  Based on the version of BC/NAV, it will contain the credentials or the SQL credentials
 .Parameter includeTestLibrariesOnly
  Add the switch if you want to only include the test libraries and not the standard tests
 .Example
  Import-Testing
#>

function Import-Testing {
    Param(
        [Parameter(Mandatory=$false)]
        [string] $ContainerName,
        [Parameter(Mandatory=$false)]
        [pscredential] $Credential,
        [Parameter(Mandatory=$false)]
        [switch] $includeLibrariesOnly
    )

    if ($null -eq $ContainerName -or $ContainerName -eq "") {
        $ContainerName = (Get-EnvironmentKeyValue -KeyName 'name')
    }

    if ($null -eq $Credential) {
        $NewCredential = Get-CredentialFromEnvironmentJson
        if ($NewCredential -eq $false) {
            $Password = (ConvertTo-SecureString "Password" -AsPlainText -Force)
            $Credential = [PSCredential]::new('admin', $Password)
        }
        else {
            $Credential = $NewCredential
            $Password = (ConvertTo-SecureString (Get-EnvironmentKeyValue -KeyName "password") -AsPlainText -Force)
        }
    } else {
        $Password = $Credential.Password
    }

    [version]$platform = Get-AppKeyValue -KeyName 'platform'

    if ($platform.Major -eq 11) {
        Disable-SymbolLoading -ContainerName $ContainerName
        Start-Sleep -Seconds 5
    }

    $startParameters = @{}
    if ($platform.Major -le 14) {
        $startParameters.Add('sqlCredential', [PSCredential]::new('sa', $Password))
    } else {
        $startParameters.Add('credential', $Credential)
        $startParameters.Add('doNotUseRuntimePackages', $true)
    }
    if ($platform.Major -eq 11) {
        $startParameters.Add('doNotUpdateSymbols', $true)
    }

    if ($includeLibrariesOnly.IsPresent) {
        $startParameters.Add('includeTestLibrariesOnly', $true)
    } else {
        $startParameters.Add('includeTestLibrariesOnly', $false)
    }

    $locale = Get-EnvironmentKeyValue -KeyName "locale"
    if ($locale -ne "") {
        if ($locale -eq 'na') {
            $locale = 'US'
        }
        $startParameters.Add('testToolkitCountry', $locale)
    }

    Import-TestToolkitToNavContainer -containerName $ContainerName -ImportAction Overwrite @startParameters

    if ($platform.Major -le 11) {
        Write-Output "Synchronizing Objects"
        $session = Get-NavContainerSession -containerName $ContainerName
        Invoke-Command -ScriptBlock {
            Sync-NAVTenant -Mode ForceSync -ServerInstance NAV -CommitPerTable -Force
        } -Session $session
        Remove-NavContainerSession -containerName $ContainerName
    }

    if ($platform.Major -eq 11)
    {
        Enable-SymbolLoading -ContainerName $ContainerName
        Write-Output "Waiting for finsql"
        Wait-ForFinSqlToComplete -containerName $ContainerName
        Compile-ObjectsInNavContainer -containerName $ContainerName -filter "version list=*Test*" -sqlCredential ([PSCredential]::new('sa', $Password)) -SynchronizeSchemaChanges Force
        Write-Output "Waiting for finsql"
        Wait-ForFinSqlToComplete -containerName $ContainerName
        Write-Output "Waiting done"
    }
}
Export-ModuleMember Import-Testing