tests/unit/Set-SmaAssetAsArchived.tests.ps1

Describe 'Set-SmaAssetAsArchived Unit Tests' -Tags 'Unit' {
    InModuleScope KaceSMA {
        Context 'Backend Calls' {
            Mock New-ApiGetRequest {} -ModuleName KaceSMA
            Mock New-ApiPostRequest {} -ModuleName KaceSMA
            Mock New-ApiPutRequest {} -ModuleName KaceSMA
            Mock New-ApiDeleteRequest {} -ModuleName KaceSMA

            It 'should call only New-ApiPOSTRequest' {
                $Body = @{
                    archiveReason = "Testing Archival via API"
                }
                
                $ArchiveSplat = @{
                    Id = 1234
                    Body = $Body
                }
                Set-SmaAssetAsArchived @ArchiveSplat

                Assert-MockCalled -CommandName New-ApiPostRequest -ModuleName KaceSMA -Times 1

                $Methods = @('GET', 'DELETE', 'PUT')
                Foreach ($Method in $Methods) {
                    Assert-MockCalled -CommandName ("New-Api$Method" + "Request") -ModuleName KaceSMA -Times 0
                }
            }

            Context 'Parameter input' {

                Mock New-ApiPOSTRequest { } -ModuleName KaceSMA
    
                It "Should take parameter from pipeline" {
                    {1234 | Set-SmaAssetAsArchived -Body @{'foo' = 'foo' }} | Should -Not -Throw
                }
    
                It "Should take parameter from position" {
                    {Set-SmaAssetAsArchived -Body @{'foo' = 'foo' } -Id 1234} | Should -Not -Throw
                }
            }
        }
    }
}