#This suite make the simplest call to each item.
#

main:
  name: Test Sample number one
  version: 0.1
  stop_on_failure: False
  steps:

# This loop contains a failing step and exits.
    - loop:
        doc: This loop contains a failing step and exits.
        name: Infine loop step fails
        key: report-key-2
        stop_on_failure: True
        steps:
          - unittest:
              name: unittest item
              doc: |
                The purpose of this unittest test item is to demonstrate
                its various features.
              test_file: dummy/dummy.py
              test_method: test_01_pass

          - py_func:
              name: function test item
              doc: The purpose of this step is to demonstrate func test item
              file: utils.py
              func_name: funcToBeExecuted
              param:
                  - 123

          - py_func:
              name: function test item
              doc: |
                The purpose of this step is to demonstrate func test item
                and the report key feature.
              key: report-key-1
              file: utils.py
              func_name: funcToBeExecuted
              param:
                  - 123

          - unittest:
              name: Unittest item
              test_file: dummy/dummy.py
              test_method:
                  - test_04_disabled
                  - test_03_fail

        exit_condition:
            file: utils.py
            func_name: dummy_exit

# This loop contains a crashing function and exits.
    - loop:
        doc: This loop contains a crashing function and exits.
        name: Infinite loop func crashes
        stop_on_failure: True
        steps:
          - py_func:
              name: function crash
              file: utils.py
              func_name: funcToBeExecuted2
              param:
                - 123

# This function crashes and does not fail because of expected result.

    - py_func:
        name: function crash but no fail
        file: utils.py
        func_name: funcToBeExecuted2
        expected_result: FAIL
        param:
        - 123

    - report:
        name: Intermediate report
        doc: |
          The purpose of this step is to demonstrate the report test item
          and its various export features.
        export:
          - junit:
              path: $(home)/reports/report-key-1.junit
              pattern:
                - Unittest%
              key: report-key-1
          - text:
              file_name: report-key-1.txt
              path: $(home)/reports
              key:
                - report-key-1

# This loop contains a crashing unittest step and exits.
    - loop:
        doc: This loop contains a crashing unittest step and exits.
        name: Infine loop unittest step crashes
        stop_on_failure: True
        steps:
          - unittest:
              name: Unittest item
              test_file: dummy/dummy.py
              test_method:
                - test_05_crash

# This loop is an example of simple iterator.
    - !include seq_cycle.tum

# This loop is an example of time exit condition.
    - loop:
        doc: This loop is an example of time exit condition.
        name: Elapsed time exit condition
        steps:
          - py_func:
              name: function test item
              file: utils.py
              func_name: funcToBeExecuted
              param:
                - $(loop_param)
          - sleep:
              name: Sleep
              timeout: 0.2
              dialog: false
        exit_condition:
            time: 0.2

# This loop is an example of value exit condition.
    - loop:
        doc: This loop is an example of value exit condition
        name: Loop exits on a condition
        steps:
          - let:
              name: Set a variable to the loop index
              values:
                - variable: $(loop_index)
          - sleep:
              name: Sleep
              timeout: 0.2
              dialog: false
        exit_condition:
            value: <| $(variable) >= 10 |>

# This loop must fail du to an exception in exit condition.
    - loop:
        doc: This loop must fail du to an exception in exit condition.
        name: Loop exit_condition crash
        steps:
          - py_func:
              name: function test item
              file: utils.py
              func_name: funcToBeExecuted
              param:
                - 123

        exit_condition:
            file: utils.py
            func_name: exit_exc

# This loops include complex iterator composed by global variables
    - loop:
        doc: This loop includes a complex iterator composed by global variables
        name: Loop complex iterator
        iterator:
          - $(global_loop_param_txt)
          - $(global_loop_param_num)
          - $(global_loop_param_list)
        steps:
            - loop:
                doc: Loop which print the iterators
                name: Simple loop
                iterator: $(loop_param)
                steps:
                  - py_func:
                      name: function test item
                      file: utils.py
                      func_name: funcToBeExecuted
                      param:
                        - $(loop_param)
                  - sleep:
                      name: Sleep be
                      timeout: 0.5
                      dialog: false

# Loop with function having a number element of a list as expected result
    - loop:
        doc: Loop with function having a number element of a list as expected result
        name: num list loop
        iterator: $(global_loop_param_num)
        steps:
          - py_func:
              name: function test item
              file: utils.py
              func_name: funcToBeExecuted
              param:
                  - $(loop_param)
              expected_result: ($(global_loop_param_num))[$(loop_index)]
          - sleep:
              name: Sleep be
              timeout: 0.5
              dialog: false

# Loop with function having a text element of a list as expected result
    - loop:
        doc: Loop with function having a text element of a list as expected result
        name: text list loop
        iterator: $(global_loop_param_txt)
        steps:
          - py_func:
              name: function test item
              file: utils.py
              func_name: funcToBeExecuted
              param:
                  - $(loop_param)
              expected_result: ($(global_loop_param_txt))[$(loop_index)]
          - sleep:
              name: Sleep be
              timeout: 0.5
              dialog: false

# Loop with function having a list element of a list as expected result
    - loop:
        doc: Loop with function having a list element of a list as expected result
        name: list of list loop
        iterator: $(global_loop_param_list)
        steps:
          - py_func:
              name: function test item
              file: utils.py
              func_name: funcToBeExecuted
              param:
                - $(loop_param)
              expected_result: ($(global_loop_param_list))[$(loop_index)]
          - sleep:
              name: Sleep be
              key: report-key-3
              timeout: 0.5
              dialog: false

# This is an infinite loop to be stopped manually
    - loop:
        doc: This is an infinite loop to be stopped manually
        name: Infinite loop
        skipped: True
        steps:
          - unittest:
              name: Unittest item
              test_file: dummy/dummy.py
              test_method: test_01_pass

          - sleep:
              name: Sleep between one and two
              timeout: 0.5
              dialog: false

report:
  enabled: True
  # log_stored: True
  export:
    - sqlite:
        file_name: $(test_name).sqlite
        path: $(home)/reports

  #   - junit:
  #       file_name: $(test_name)_report-key-1.junit
  #       path: $(home)/reports
  #       pattern:
  #         - function%
  #         - Unittest%
  #       key: report-key-1

  #   - text:
  #       file_name: $(test_name)_report-key-2_3.txt
  #       path: $(home)/reports
  #       pattern: function%
  #       key:
  #         - report-key-2
  #         - report-key-3
