tests/proxy.tests.ps1

Get-Module Qlik-Cli | Remove-Module -Force
Import-Module (Resolve-Path "$PSScriptRoot\..\Qlik-Cli.psm1").Path
. (Resolve-Path "$PSScriptRoot\..\resources\proxy.ps1").Path
. (Resolve-Path "$PSScriptRoot\..\functions\helper.ps1").Path
. (Resolve-Path "$PSScriptRoot\..\resources\tag.ps1").Path
. (Resolve-Path "$PSScriptRoot\..\resources\customproperty.ps1").Path

Describe "New-QlikVirtualProxy" {
  Mock Invoke-QlikPost { return $body } -Verifiable

  Context 'samlAttributeMap' {
    It 'should have an empty array instead of null' {
      $proxy = New-QlikVirtualProxy `
        -Description 'Test' `
        -sessionCookieHeaderName 'X-Qlik-Session'

      $proxy | Should Match '"samlAttributeMap":\[\]'

      Assert-VerifiableMock
    }

    It 'should have an array even if only one value provided' {
      $proxy = New-QlikVirtualProxy `
        -Description 'Test' `
        -sessionCookieHeaderName 'X-Qlik-Session' `
        -samlAttributeMap @{test='test'}

      $proxy | Should Match '"samlAttributeMap":\[{"test":"test"}\]'

      Assert-VerifiableMock
    }
  }
}

Describe "Update-QlikVirtualProxy" {
  Mock Invoke-QlikPut -Verifiable {
    return ConvertFrom-Json $body
  }

  Mock Get-QlikVirtualProxy {
    return @{
      id = '982a578f-d335-4e4f-81be-c031e6acb780'
      tags = @(@{
        id = '1b029edc-9c86-4e01-8c39-a10b1d9c4424'
      })
      customProperties = @(@{
        id = 'a834722d-1306-499e-b028-11454240381b'
      })
    }
  }

  Context 'tags' {
    Mock Get-QlikTag {
      return $null
    }

    It 'should be possible to remove all tags' {
      $vp = Update-QlikVirtualProxy `
        -id '982a578f-d335-4e4f-81be-c031e6acb780' `
        -tags $null

      $vp.tags | Should -BeNullOrEmpty

      Assert-VerifiableMock
    }

    It 'should not remove tags if parameter not provided' {
      $vp = Update-QlikVirtualProxy `
        -id '982a578f-d335-4e4f-81be-c031e6acb780'

      $vp.tags | Should -HaveCount 1

      Assert-VerifiableMock
    }
  }

  Context 'custom property' {
    Mock Get-QlikCustomProperty {
      return $null
    }

    It 'should be possible to remove all custom properties' {
      $vp = Update-QlikVirtualProxy `
        -id '982a578f-d335-4e4f-81be-c031e6acb780' `
        -customProperties $null

      $vp.customProperties | Should -BeNullOrEmpty

      Assert-VerifiableMock
    }

    It 'should not remove custom properties if parameter not provided' {
      $vp = Update-QlikVirtualProxy `
        -id '982a578f-d335-4e4f-81be-c031e6acb780'

      $vp.customProperties | Should -HaveCount 1

      Assert-VerifiableMock
    }
  }
}