tests/task.tests.ps1

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

Describe "Add-QlikTrigger" {
    Mock Invoke-QlikPost -Verifiable {
        return $body
    }

    Context 'Create a schedule trigger' {
        It 'should post JSON data in correct format' {
            $result = Add-QlikTrigger `
                -taskid fb4068a8-c465-4018-80c2-34bd49b71fc3 `
                -name 'My new task' `
                -startDate "2020/01/16 18:00:00" `
                -timeZone 'Europe/London'

            $result | Should -Match '"startDate":"2020-01-16T18:00:00.000Z"'
        }
    }
}

Describe "New-QlikTask" {
    Mock Invoke-QlikPost -Verifiable {
        return ConvertFrom-Json $body
    }

    Context 'Create task from parameters' {
        Mock Get-QlikTag {
            return @(@{
                    id = '177cf33f-1ace-41e8-8382-1c443a51352d'
                })
        }
        Mock Get-QlikCustomProperty {
            return @(@{
                    id = 'daa5005e-5f3b-45c5-b2fd-1a1c92c5f367'
                })
        }

        It 'should create a stream with all parameters' {
            $task = New-QlikTask `
                -name 'Reload App' `
                -appId '982a578f-d335-4e4f-81be-c031e6acb780' `
                -tags 'testing' `
                -customProperties 'environment=development'

            $task.task.name | Should Be 'Reload App'
            $task.task.tags | Should -HaveCount 1
            $task.task.app.id | Should Be '982a578f-d335-4e4f-81be-c031e6acb780'
            $task.task.customProperties | Should -HaveCount 1

            Assert-VerifiableMock
        }
    }
}

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

    Mock Get-QlikReloadTask {
        return @{
            id = '4f9f0e3f-113a-4976-94fa-6b11ab8dc65b'
            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' {
            $task = Update-QlikReloadTask `
                -id '4f9f0e3f-113a-4976-94fa-6b11ab8dc65b' `
                -tags $null

            $task.tags | Should -BeNullOrEmpty

            Assert-VerifiableMock
        }

        It 'should not remove tags if parameter not provided' {
            $task = Update-QlikReloadTask `
                -id '4f9f0e3f-113a-4976-94fa-6b11ab8dc65b'

            $task.tags | Should -HaveCount 1

            Assert-VerifiableMock
        }
    }

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

        It 'should be possible to remove all custom properties' {
            $task = Update-QlikReloadTask `
                -id '4f9f0e3f-113a-4976-94fa-6b11ab8dc65b' `
                -customProperties $null

            $task.customProperties | Should -BeNullOrEmpty

            Assert-VerifiableMock
        }

        It 'should not remove custom properties if parameter not provided' {
            $task = Update-QlikReloadTask `
                -id '4f9f0e3f-113a-4976-94fa-6b11ab8dc65b'

            $task.customProperties | Should -HaveCount 1

            Assert-VerifiableMock
        }
    }
}