"""HelloWorld Script for Cortex XSOAR - Unit Tests file

This file contains the Unit Tests for the HelloWorld Script based
on pytest. Cortex XSOAR contribution requirements mandate that every
script should have a proper set of unit tests to automatically
verify that the integration is behaving as expected during CI/CD pipeline.

Test Execution
--------------

Unit tests can be checked in 3 ways:
- Using the command `lint` of demisto-sdk. The command will build a dedicated
  docker instance for your integration locally and use the docker instance to
  execute your tests in a dedicated docker instance.
- From the command line using `pytest -v` or `pytest -vv`
- From PyCharm

Example with demisto-sdk (from the content root directory):
demisto-sdk lint -d Packs/HelloWorld/Scripts/HelloWorldScript

Coverage
--------

There should be at least one unit test per  function. In each unit
test, the target command function is executed with specific parameters and the
output of the command function is checked against an expected output.

NOTE: we do not have to import or build a requests-mock instance explicitly.
requests-mock library uses a pytest specific mechanism to provide a
requests_mock instance to any function with an argument named requests_mock.

More Details
------------

More information about Unit Tests in Cortex XSOAR:
https://xsoar.pan.dev/docs/integrations/unit-testing

Also please check the HelloWorld Integration Unit Tests file.

"""

from HelloWorldScript import say_hello, say_hello_command


def test_say_hello():
    """
    Tests the 'say_hello' function.

        Given:
            - An input string.

        When:
            - Running the 'say_hello' function.

        Then:
            - Verify that the output is as expected (an 'Hello' prefix was added to the input string).
    """
    result = say_hello('Dbot')

    assert result == 'Hello Dbot'


def test_say_hello_command():
    """
    Tests the 'say_hello_command'.

        Given:
            - Demisto args object with a name argument..

        When:
            - Running the 'say_hello_command'.
˚
        Then:
            - Verify that the output is as expected (an 'Hello' prefix was added to the name).
    """
    args = {
        'name': 'Dbot'
    }

    response = say_hello_command(args)

    assert response.outputs == {
        'HelloWorld': {
            'hello': 'Hello Dbot'
        }
    }
