InvokeHelperTest/public/Invoke-MyCommand.test.ps1

function InvokeHelperTest_MyCommand_Invoke{

    $command = 'echo "Hello world"'
    $result = Invoke-MyCommand -Command $command

    Assert-AreEqual  -Expected "Hello world" -Presented $result
}

function InvokeHelperTest_MyCommand_Invoke_WhatIF{

    $command = "comand text"
    $result = Invoke-MyCommand -Command $command -WhatIf @InfoParameters

    Assert-IsNull -Object $result
    Assert-Contains -Expected $command -Presented $infoVar
}

function InvokeHelperTest_Invoke_MyCommand_WithMock {
    [CmdletBinding()]
    param()

    # $global:test_json = '{"login": "fakeName","id": 6666666}'
    # $comand = 'echo $global:test_json'
    $comand = '@{login = "FakeName"; id="6666666"} | ConvertTo-Json'

    # Set the mock you want to use based on a Alias the function will use
    Set-InvokeCommandAlias -Alias 'Command to call to Mock' -Command $comand

    # Call the function with the Alias as normal
    $result = Invoke-MyCommandJson -Command 'Command to call to Mock'

    Assert-AreEqual -Expected 'fakeName' -Presented $result.login
    Assert-AreEqual -Expected 6666666 -Presented $result.id

}

function InvokeHelperTest_MyCommandJson_Invoke{
    [CmdletBinding()]
    param()

    $comand = '@{login = "FakeName"; id="6666666"} | ConvertTo-Json'

    $result = Invoke-MyCommandJson -Command $comand

    Assert-AreEqual -Expected "fakeName" -Presented $result.login
    Assert-AreEqual -Expected 6666666 -Presented $result.id
}

function InvokeHelperTest_MyCommand_Invoke_WithParameters{

    $command = 'echo "Hello world {myname}"'
    $param = @{myname = "alfred"}

    $result = Invoke-MyCommand -Command $command -Parameters $param

    Assert-AreEqual  -Expected "Hello world alfred" -Presented $result
}

function InvokeHelperTest_Invoke_MyCommand_WithParameters_WithMock {
    [CmdletBinding()]
    param()

    $param = @{
        name = "FakeName"
        id = 6666666
    }

    $comand = '@{login = "{name}"; id="{id}"} | ConvertTo-Json'

    # Set the mock you want to use based on a Alias the function will use
    Set-InvokeCommandAlias -Alias 'Command to call to Mock' -Command $comand

    # Call the function with the Alias as normal
    $result = Invoke-MyCommandJson -Command 'Command to call to Mock' -Parameters $param

    Assert-AreEqual -Expected 'fakeName' -Presented $result.login
    Assert-AreEqual -Expected 6666666 -Presented $result.id

}