splunk-soar-sdk 1.5.0__tar.gz → 1.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/PKG-INFO +1 -1
  2. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/pyproject.toml +1 -4
  3. splunk_soar_sdk-1.5.1/release_notes.txt +23 -0
  4. splunk_soar_sdk-1.5.1/release_version.txt +1 -0
  5. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/actions_manager.py +2 -4
  6. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_cli_runner.py +3 -8
  7. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/params.py +0 -2
  8. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/action_result.py +3 -0
  9. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/views/template_filters.py +5 -2
  10. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/manifests/test_processors.py +5 -4
  11. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/conftest.py +0 -7
  12. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/stubs.py +1 -1
  13. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_actions_manager.py +42 -25
  14. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_app_action.py +10 -9
  15. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_app_runner.py +79 -99
  16. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_generic_action.py +24 -16
  17. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_logging.py +72 -59
  18. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_on_poll.py +73 -61
  19. splunk_soar_sdk-1.5.1/tests/test_template_filters.py +207 -0
  20. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_test_connectivity.py +18 -12
  21. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/uv.lock +1 -1
  22. splunk_soar_sdk-1.5.0/release_notes.txt +0 -39
  23. splunk_soar_sdk-1.5.0/release_version.txt +0 -1
  24. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  25. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  26. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/pull_request_template.md +0 -0
  27. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/utils/github.js +0 -0
  28. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/utils/update_version.py +0 -0
  29. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/workflows/code_quality.yml +0 -0
  30. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/workflows/commit_hygiene.yml +0 -0
  31. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/workflows/generate_docs.yml +0 -0
  32. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.github/workflows/semantic_release.yml +0 -0
  33. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.gitignore +0 -0
  34. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.pre-commit-config.yaml +0 -0
  35. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/.releaserc +0 -0
  36. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/LICENSE +0 -0
  37. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/README.md +0 -0
  38. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/commitlint.config.js +0 -0
  39. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/api_reference.rst +0 -0
  40. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/app_structure/index.rst +0 -0
  41. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/app_structure/pre-commit-config.yaml.rst +0 -0
  42. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/app_structure/pyproject.toml.rst +0 -0
  43. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/app_structure/src_app.rst +0 -0
  44. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/changelog.rst +0 -0
  45. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/cli_reference.rst +0 -0
  46. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/conf.py +0 -0
  47. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/custom_views/index.rst +0 -0
  48. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/custom_views/reusable_components.md +0 -0
  49. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/custom_views/templates.md +0 -0
  50. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/custom_views/view_handlers.md +0 -0
  51. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/getting_started/defining_asset.rst +0 -0
  52. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/getting_started/first_action.rst +0 -0
  53. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/getting_started/index.rst +0 -0
  54. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/getting_started/init_app.rst +0 -0
  55. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/getting_started/installation.rst +0 -0
  56. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/getting_started/testing_and_building.rst +0 -0
  57. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/docs/index.rst +0 -0
  58. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/__init__.py +0 -0
  59. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/abstract.py +0 -0
  60. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/action_results.py +0 -0
  61. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/apis/__init__.py +0 -0
  62. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/apis/artifact.py +0 -0
  63. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/apis/container.py +0 -0
  64. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/apis/utils.py +0 -0
  65. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/apis/vault.py +0 -0
  66. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app.py +0 -0
  67. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_client.py +0 -0
  68. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_templates/basic_app/.gitignore +0 -0
  69. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_templates/basic_app/.pre-commit-config.yaml +0 -0
  70. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_templates/basic_app/logo.svg +0 -0
  71. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_templates/basic_app/logo_dark.svg +0 -0
  72. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_templates/basic_app/src/__init__.py +0 -0
  73. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/app_templates/basic_app/uv.lock +0 -0
  74. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/asset.py +0 -0
  75. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/async_utils.py +0 -0
  76. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/__init__.py +0 -0
  77. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/cli.py +0 -0
  78. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/init/__init__.py +0 -0
  79. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/init/cli.py +0 -0
  80. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/manifests/__init__.py +0 -0
  81. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/manifests/cli.py +0 -0
  82. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/manifests/deserializers.py +0 -0
  83. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/manifests/processors.py +0 -0
  84. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/manifests/serializers.py +0 -0
  85. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/package/cli.py +0 -0
  86. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/package/utils.py +0 -0
  87. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/path_utils.py +0 -0
  88. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/cli/utils.py +0 -0
  89. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/code_renderers/__init__.py +0 -0
  90. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/code_renderers/action_renderer.py +0 -0
  91. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/code_renderers/app_renderer.py +0 -0
  92. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/code_renderers/asset_renderer.py +0 -0
  93. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/code_renderers/renderer.py +0 -0
  94. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/code_renderers/templates/pyproject.toml.jinja +0 -0
  95. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/code_renderers/toml_renderer.py +0 -0
  96. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/colors.py +0 -0
  97. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/compat.py +0 -0
  98. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/crypto.py +0 -0
  99. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/decorators/__init__.py +0 -0
  100. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/decorators/action.py +0 -0
  101. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/decorators/generic_action.py +0 -0
  102. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/decorators/on_poll.py +0 -0
  103. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/decorators/test_connectivity.py +0 -0
  104. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/decorators/view_handler.py +0 -0
  105. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/decorators/webhook.py +0 -0
  106. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/exceptions.py +0 -0
  107. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/input_spec.py +0 -0
  108. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/logging.py +0 -0
  109. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/meta/__init__.py +0 -0
  110. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/meta/actions.py +0 -0
  111. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/meta/adapters.py +0 -0
  112. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/meta/app.py +0 -0
  113. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/meta/datatypes.py +0 -0
  114. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/meta/dependencies.py +0 -0
  115. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/meta/webhooks.py +0 -0
  116. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/models/__init__.py +0 -0
  117. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/models/artifact.py +0 -0
  118. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/models/container.py +0 -0
  119. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/models/vault_attachment.py +0 -0
  120. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/models/view.py +0 -0
  121. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/paths.py +0 -0
  122. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/py.typed +0 -0
  123. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/app.py +0 -0
  124. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/base_connector.py +0 -0
  125. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/connector_result.py +0 -0
  126. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/consts.py +0 -0
  127. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/encryption_helper.py +0 -0
  128. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/install_info.py +0 -0
  129. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/json_keys.py +0 -0
  130. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/ph_ipc.py +0 -0
  131. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom/vault.py +0 -0
  132. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom_common/app_interface/app_interface.py +0 -0
  133. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/shims/phantom_common/encryption/encryption_manager_factory.py +0 -0
  134. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/templates/base/base_template.html +0 -0
  135. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/templates/base/error.html +0 -0
  136. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/templates/base/header.html +0 -0
  137. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/templates/base/logo_header.html +0 -0
  138. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/templates/components/pie_chart.html +0 -0
  139. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/templates/widgets/widget_resize_snippet.html +0 -0
  140. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/templates/widgets/widget_template.html +0 -0
  141. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/types.py +0 -0
  142. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/views/__init__.py +0 -0
  143. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/views/component_registry.py +0 -0
  144. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/views/components/__init__.py +0 -0
  145. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/views/components/pie_chart.py +0 -0
  146. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/views/template_renderer.py +0 -0
  147. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/views/view_parser.py +0 -0
  148. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/webhooks/__init__.py +0 -0
  149. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/webhooks/models.py +0 -0
  150. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/src/soar_sdk/webhooks/routing.py +0 -0
  151. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/test.png +0 -0
  152. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/test.txt +0 -0
  153. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/__init__.py +0 -0
  154. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/__init__.py +0 -0
  155. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/datapath_parse.py +0 -0
  156. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/manifests/__init__.py +0 -0
  157. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_assets/converted_app/actions.py.txt +0 -0
  158. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_cli.py +0 -0
  159. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_convert_cli.py +0 -0
  160. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_deserializers.py +0 -0
  161. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_init_cli.py +0 -0
  162. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_manifests_cli.py +0 -0
  163. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_package_cli.py +0 -0
  164. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_serializers.py +0 -0
  165. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/cli/test_utils.py +0 -0
  166. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/code_renderers/test_action_renderer.py +0 -0
  167. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/app.json +0 -0
  168. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/example_asset.json +0 -0
  169. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/logo.svg +0 -0
  170. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/logo_dark.svg +0 -0
  171. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/pyproject.toml +0 -0
  172. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/src/__init__.py +0 -0
  173. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/src/actions/__init__.py +0 -0
  174. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/src/actions/async_action.py +0 -0
  175. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/src/actions/generate_category.py +0 -0
  176. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/src/actions/reverse_string.py +0 -0
  177. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/src/app.py +0 -0
  178. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/src/ignoreme.txt +0 -0
  179. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/templates/reverse_string.html +0 -0
  180. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app/uv.lock +0 -0
  181. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app_with_webhook/app.json +0 -0
  182. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app_with_webhook/logo.svg +0 -0
  183. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app_with_webhook/logo_dark.svg +0 -0
  184. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app_with_webhook/pyproject.toml +0 -0
  185. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app_with_webhook/src/__init__.py +0 -0
  186. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app_with_webhook/src/app.py +0 -0
  187. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/example_app_with_webhook/uv.lock +0 -0
  188. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/interfaces/__init__.py +0 -0
  189. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/interfaces/test_artifact_interface.py +0 -0
  190. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/interfaces/test_container_interface.py +0 -0
  191. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/interfaces/test_vault_interface.py +0 -0
  192. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/meta/__init__.py +0 -0
  193. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/meta/test_actions.py +0 -0
  194. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/meta/test_adapters.py +0 -0
  195. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/meta/test_datatypes.py +0 -0
  196. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/meta/test_dependencies.py +0 -0
  197. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/meta/test_webhooks.py +0 -0
  198. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/mocks/__init__.py +0 -0
  199. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/mocks/dynamic_mocks.py +0 -0
  200. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/mocks/importable_action.py +0 -0
  201. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_action_results.py +0 -0
  202. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_app.py +0 -0
  203. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_app_action_params.py +0 -0
  204. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_app_action_results.py +0 -0
  205. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_app_client.py +0 -0
  206. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_asset.py +0 -0
  207. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_assets/splunk-sdk-2.1.0.tar.gz +0 -0
  208. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_async_integration.py +0 -0
  209. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_async_utils.py +0 -0
  210. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_code_renderers.py +0 -0
  211. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_compat.py +0 -0
  212. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_container.py +0 -0
  213. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_custom_views.py +0 -0
  214. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_encryption.py +0 -0
  215. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_params.py +0 -0
  216. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_template_renderer.py +0 -0
  217. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/test_view_parser.py +0 -0
  218. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/webhooks/test_models.py +0 -0
  219. {splunk_soar_sdk-1.5.0 → splunk_soar_sdk-1.5.1}/tests/webhooks/test_routing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splunk-soar-sdk
3
- Version: 1.5.0
3
+ Version: 1.5.1
4
4
  Summary: The official framework for developing and testing Splunk SOAR Apps
5
5
  Project-URL: Homepage, https://github.com/phantomcyber/splunk-soar-sdk
6
6
  Project-URL: Documentation, https://github.com/phantomcyber/splunk-soar-sdk
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "splunk-soar-sdk"
3
- version = "1.5.0"
3
+ version = "1.5.1"
4
4
  description = "The official framework for developing and testing Splunk SOAR Apps"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9, <3.14"
@@ -137,10 +137,7 @@ source = [
137
137
  "src/soar_sdk"
138
138
  ]
139
139
  omit = [
140
- "src/soar_sdk/api_callers.py", # moved 1:1 from App Wizard, not re-designed yet
141
140
  "src/soar_sdk/shims/*", # shims for BaseConnector, should not need testing
142
- "src/soar_sdk/views/components/*", # reusable components, testing deferred till actual usage
143
- "src/soar_sdk/views/template_filters.py", # ported from platform, need to decide what we're keeping
144
141
  "src/soar_sdk/code_renderers/templates/*" # jinja templates, not code
145
142
  ]
146
143
 
@@ -0,0 +1,23 @@
1
+ ## [1.5.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/1.5.0...1.5.1) (2025-09-16)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **cli:** add missing ActionResult.get_message() shim, resolving CLI bug ([e38f06b](https://github.com/phantomcyber/splunk-soar-sdk/commit/e38f06b32093c0157978725ab2bacc414671f8f9)), closes [#116](https://github.com/phantomcyber/splunk-soar-sdk/issues/116)
7
+ * **docs:** remove reference to defunct 'order' arg of 'Param' ([0c112e4](https://github.com/phantomcyber/splunk-soar-sdk/commit/0c112e4ac5c73791647eab0c6eec31dc3943ae64))
8
+
9
+
10
+
11
+
12
+
13
+ ## [1.5.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/1.5.0...1.5.1) (2025-09-16)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * **cli:** add missing ActionResult.get_message() shim, resolving CLI bug ([e38f06b](https://github.com/phantomcyber/splunk-soar-sdk/commit/e38f06b32093c0157978725ab2bacc414671f8f9)), closes [#116](https://github.com/phantomcyber/splunk-soar-sdk/issues/116)
19
+ * **docs:** remove reference to defunct 'order' arg of 'Param' ([0c112e4](https://github.com/phantomcyber/splunk-soar-sdk/commit/0c112e4ac5c73791647eab0c6eec31dc3943ae64))
20
+
21
+
22
+
23
+
@@ -0,0 +1 @@
1
+ 1.5.1
@@ -84,11 +84,9 @@ class ActionsManager(BaseConnector):
84
84
  if handler := self.get_action(action_id):
85
85
  try:
86
86
  params = handler.meta.parameters.parse_obj(param)
87
- except (ValueError, ValidationError):
88
- # FIXME: Consider adding more details to this error, but be aware
89
- # of possible PIIs.
87
+ except (ValueError, ValidationError) as e:
90
88
  self.save_progress(
91
- "Validation Error - the params data for action could not be parsed"
89
+ f"Validation Error - the params data for action could not be parsed: {e!s}"
92
90
  )
93
91
  return
94
92
  handler(params)
@@ -257,20 +257,15 @@ class AppCliRunner:
257
257
  )
258
258
  print(f"Parsed webhook request: {args.webhook_request}")
259
259
 
260
- def run(self) -> None:
260
+ def run(self, argv: Optional[list[str]] = None) -> None:
261
261
  """Run the app CLI."""
262
- args = self.parse_args()
262
+ args = self.parse_args(argv=argv)
263
263
 
264
264
  logger = PhantomLogger()
265
265
 
266
266
  if input_data := getattr(args, "raw_input_data", None):
267
267
  self.app.handle(input_data)
268
- # FIXME: ActionResult mock isn't quite right. Choosing not to unit test this section
269
- # yet, because the test will need to be rewritten. We shouldn't be posting our results
270
- # into ActionResult.param...
271
- for (
272
- result
273
- ) in self.app.actions_manager.get_action_results(): # pragma: no cover
268
+ for result in self.app.actions_manager.get_action_results():
274
269
  params_pretty = json.dumps(result.param, indent=2, ensure_ascii=False)
275
270
  data_pretty = json.dumps(
276
271
  result.get_data(), indent=2, ensure_ascii=False
@@ -28,8 +28,6 @@ def Param(
28
28
  Use this function to define the default value for an action parameter that requires
29
29
  extra metadata for the manifest. This function is a thin wrapper around pydantic.Field.
30
30
 
31
- :param order: The order key, starting at 0, allows the app
32
- author to control the display order of the controls in the UI.
33
31
  :param description: A short description of this parameter.
34
32
  The description is shown in the user interface when running an action manually.
35
33
  :param default: To set the default value of a variable in the UI, use this key.
@@ -52,5 +52,8 @@ if TYPE_CHECKING or not _soar_is_available:
52
52
  def get_summary(self) -> dict:
53
53
  return self.summary
54
54
 
55
+ def get_message(self) -> str:
56
+ return self.message
57
+
55
58
 
56
59
  __all__ = ["ActionResult"]
@@ -10,7 +10,7 @@ import uuid
10
10
  import humanize
11
11
  import bleach # type: ignore[import-untyped]
12
12
  from datetime import datetime, timedelta
13
- from typing import Optional, Union
13
+ from typing import Optional, TypeVar, Union
14
14
  from collections.abc import Iterable
15
15
  from collections.abc import Iterator
16
16
  from jinja2 import Environment
@@ -47,7 +47,10 @@ def sorteditems(dictionary: dict) -> list:
47
47
  return sorted(dictionary.items())
48
48
 
49
49
 
50
- def batch(iterable: Iterable, count: int) -> Iterator[list]:
50
+ T = TypeVar("T")
51
+
52
+
53
+ def batch(iterable: Iterable[T], count: int) -> Iterator[list[T]]:
51
54
  """Batch items into groups of specified count."""
52
55
  result = []
53
56
  for item in iterable:
@@ -4,19 +4,20 @@ from unittest import mock
4
4
  import json
5
5
  from datetime import datetime
6
6
 
7
+ import pytest_mock
8
+
7
9
  from soar_sdk.cli.manifests.processors import ManifestProcessor
8
10
  from soar_sdk.compat import UPDATE_TIME_FORMAT
9
11
 
10
12
 
11
- def test_manifest_processor_creating_json_from_meta():
13
+ def test_manifest_processor_creating_json_from_meta(mocker: pytest_mock.MockerFixture):
12
14
  processor = ManifestProcessor(
13
15
  "example_app.json", project_context="./tests/example_app"
14
16
  )
15
- processor.save_json_manifest = mock.Mock()
16
17
 
18
+ save_json_manifest = mocker.patch.object(processor, "save_json_manifest")
17
19
  processor.create()
18
-
19
- processor.save_json_manifest.assert_called_once()
20
+ save_json_manifest.assert_called_once()
20
21
 
21
22
 
22
23
  @mock.patch("builtins.open", new_callable=mock.mock_open, read_data="data")
@@ -1,4 +1,3 @@
1
- import json
2
1
  from unittest import mock
3
2
 
4
3
  import pytest
@@ -45,12 +44,6 @@ def example_app() -> App:
45
44
  product_name="Example App",
46
45
  publisher="Splunk",
47
46
  )
48
- app.actions_manager._load_app_json = mock.Mock(return_value=True)
49
- app.actions_manager.get_state_dir = mock.Mock(return_value="/tmp/")
50
- app.actions_manager._load_app_json = mock.Mock(return_value=True)
51
-
52
- with open("tests/example_app/app.json") as app_json:
53
- app.actions_manager._BaseConnector__app_json = json.load(app_json)
54
47
 
55
48
  return app
56
49
 
@@ -6,7 +6,7 @@ from soar_sdk.params import Param, Params
6
6
 
7
7
 
8
8
  class SampleActionParams(Params):
9
- field1: int = Param(0, "Some description")
9
+ field1: int = Param(description="Some description", required=False, default=5)
10
10
 
11
11
 
12
12
  class BaseConnectorMock(mock.Mock):
@@ -3,6 +3,7 @@ from unittest import mock
3
3
  from zoneinfo import ZoneInfo
4
4
 
5
5
  import pytest
6
+ import pytest_mock
6
7
 
7
8
  from soar_sdk.asset import AssetField, BaseAsset
8
9
  from soar_sdk.input_spec import AppConfig, InputSpecification
@@ -238,15 +239,17 @@ def test_actions_provider_running_undefined_action(
238
239
 
239
240
 
240
241
  def test_app_connector_handle_action_runs_app_action(
241
- app_actions_manager: ActionsManager,
242
+ app_actions_manager: ActionsManager, mocker: pytest_mock.MockerFixture
242
243
  ):
243
244
  mocked_handler = mock.Mock()
244
245
 
245
- app_actions_manager.get_action_identifier = mock.Mock( # type: ignore[method-assign]
246
- return_value="testing_handler"
246
+ mocker.patch.object(
247
+ app_actions_manager, "get_action_identifier", return_value="testing_handler"
247
248
  )
248
- app_actions_manager.get_actions = mock.Mock(
249
- return_value={"testing_handler": mocked_handler}
249
+ mocker.patch.object(
250
+ app_actions_manager,
251
+ "get_actions",
252
+ return_value={"testing_handler": mocked_handler},
250
253
  )
251
254
 
252
255
  app_actions_manager.handle_action({})
@@ -254,9 +257,13 @@ def test_app_connector_handle_action_runs_app_action(
254
257
  assert mocked_handler.call_count == 1
255
258
 
256
259
 
257
- def test_handle_action_handler_not_existing(app_actions_manager: ActionsManager):
258
- app_actions_manager.get_action_identifier = mock.Mock( # type: ignore[method-assign]
259
- return_value="not_existing_handler"
260
+ def test_handle_action_handler_not_existing(
261
+ app_actions_manager: ActionsManager, mocker: pytest_mock.MockerFixture
262
+ ):
263
+ mocker.patch.object(
264
+ app_actions_manager,
265
+ "get_action_identifier",
266
+ return_value="not_existing_handler",
260
267
  )
261
268
 
262
269
  with pytest.raises(RuntimeError):
@@ -264,17 +271,17 @@ def test_handle_action_handler_not_existing(app_actions_manager: ActionsManager)
264
271
 
265
272
 
266
273
  def test_handle_raises_validation_error(
267
- app_actions_manager: ActionsManager,
274
+ app_actions_manager: ActionsManager, mocker: pytest_mock.MockerFixture
268
275
  ):
269
276
  testing_handler = mock.Mock()
270
277
  testing_handler.meta.parameters = SampleActionParams
271
278
 
272
- app_actions_manager.get_action_identifier = mock.Mock()
273
- app_actions_manager.get_action = mock.Mock(return_value=testing_handler)
274
- app_actions_manager.save_progress = mock.Mock()
279
+ mocker.patch.object(app_actions_manager, "get_action_identifier")
280
+ mocker.patch.object(app_actions_manager, "get_action", return_value=testing_handler)
281
+ save_progress_mock = mocker.patch.object(app_actions_manager, "save_progress")
275
282
 
276
283
  app_actions_manager.handle_action({"field1": "five"})
277
- assert app_actions_manager.save_progress.call_count == 1
284
+ assert save_progress_mock.call_count == 1
278
285
 
279
286
 
280
287
  def test_app_connector_delegates_get_phantom_base_url():
@@ -286,7 +293,9 @@ def test_app_connector_delegates_get_phantom_base_url():
286
293
  assert ActionsManager.get_soar_base_url() == "some_url"
287
294
 
288
295
 
289
- def test_app_connector_initialize_loads_state(app_actions_manager: ActionsManager):
296
+ def test_app_connector_initialize_loads_state(
297
+ app_actions_manager: ActionsManager, mocker: pytest_mock.MockerFixture
298
+ ):
290
299
  """Test that initialize loads the state from load_state method."""
291
300
  # Mock the load_state method to return a specific state
292
301
  test_state_inner = {"test_key": "test_value"}
@@ -296,7 +305,9 @@ def test_app_connector_initialize_loads_state(app_actions_manager: ActionsManage
296
305
  _CACHE_STATE_KEY: test_state_inner,
297
306
  }
298
307
 
299
- app_actions_manager.load_state = mock.Mock(return_value=test_state)
308
+ load_state = mocker.patch.object(
309
+ app_actions_manager, "load_state", return_value=test_state
310
+ )
300
311
 
301
312
  # Call initialize
302
313
  result = app_actions_manager.initialize()
@@ -305,7 +316,7 @@ def test_app_connector_initialize_loads_state(app_actions_manager: ActionsManage
305
316
  assert result is True
306
317
 
307
318
  # Verify load_state was called
308
- app_actions_manager.load_state.assert_called_once()
319
+ load_state.assert_called_once()
309
320
 
310
321
  # Verify the state was stored correctly
311
322
  assert app_actions_manager.ingestion_state == test_state_inner
@@ -314,11 +325,13 @@ def test_app_connector_initialize_loads_state(app_actions_manager: ActionsManage
314
325
 
315
326
 
316
327
  def test_app_connector_initialize_handles_empty_state(
317
- app_actions_manager: ActionsManager,
328
+ app_actions_manager: ActionsManager, mocker: pytest_mock.MockerFixture
318
329
  ):
319
330
  """Test that initialize handles None return from load_state."""
320
331
  # Mock the load_state method to return None
321
- app_actions_manager.load_state = mock.Mock(return_value=None)
332
+ load_state = mocker.patch.object(
333
+ app_actions_manager, "load_state", return_value=None
334
+ )
322
335
 
323
336
  # Call initialize
324
337
  result = app_actions_manager.initialize()
@@ -327,7 +340,7 @@ def test_app_connector_initialize_handles_empty_state(
327
340
  assert result is True
328
341
 
329
342
  # Verify load_state was called
330
- app_actions_manager.load_state.assert_called_once()
343
+ load_state.assert_called_once()
331
344
 
332
345
  # Verify the state was initialized to an empty dict
333
346
  assert app_actions_manager.ingestion_state == {}
@@ -335,7 +348,9 @@ def test_app_connector_initialize_handles_empty_state(
335
348
  assert app_actions_manager.asset_cache == {}
336
349
 
337
350
 
338
- def test_app_connector_finalize_saves_state(app_actions_manager: ActionsManager):
351
+ def test_app_connector_finalize_saves_state(
352
+ app_actions_manager: ActionsManager, mocker: pytest_mock.MockerFixture
353
+ ):
339
354
  """Test that finalize saves the current state using save_state."""
340
355
  # Set up a test state
341
356
  test_state = {"key1": "value1", "key2": "value2"}
@@ -344,7 +359,7 @@ def test_app_connector_finalize_saves_state(app_actions_manager: ActionsManager)
344
359
  app_actions_manager.asset_cache = test_state
345
360
 
346
361
  # Mock the save_state method
347
- app_actions_manager.save_state = mock.Mock()
362
+ save_state = mocker.patch.object(app_actions_manager, "save_state")
348
363
 
349
364
  # Call finalize
350
365
  result = app_actions_manager.finalize()
@@ -353,7 +368,7 @@ def test_app_connector_finalize_saves_state(app_actions_manager: ActionsManager)
353
368
  assert result is True
354
369
 
355
370
  # Verify save_state was called with the correct state
356
- app_actions_manager.save_state.assert_called_once_with(
371
+ save_state.assert_called_once_with(
357
372
  {
358
373
  _INGEST_STATE_KEY: test_state,
359
374
  _AUTH_STATE_KEY: test_state,
@@ -362,9 +377,11 @@ def test_app_connector_finalize_saves_state(app_actions_manager: ActionsManager)
362
377
  )
363
378
 
364
379
 
365
- def test_app_connector_delegates_set_csrf_info(app_actions_manager: ActionsManager):
366
- app_actions_manager._set_csrf_info = mock.Mock() # type: ignore[method-assign]
380
+ def test_app_connector_delegates_set_csrf_info(
381
+ app_actions_manager: ActionsManager, mocker: pytest_mock.MockerFixture
382
+ ):
383
+ set_csrf_info = mocker.patch.object(app_actions_manager, "_set_csrf_info")
367
384
 
368
385
  app_actions_manager.set_csrf_info("", "")
369
386
 
370
- assert app_actions_manager._set_csrf_info.call_count == 1
387
+ assert set_csrf_info.call_count == 1
@@ -6,6 +6,8 @@ import inspect
6
6
  import sys
7
7
  import types
8
8
 
9
+ import pytest_mock
10
+
9
11
  from soar_sdk.abstract import SOARClient
10
12
  from soar_sdk.app import App
11
13
  from soar_sdk.params import Param, Params
@@ -115,7 +117,7 @@ def test_action_call_with_params_dict(simple_app, sample_params):
115
117
  assert params.pass_value == "<PASSWORD>"
116
118
  assert params.bool_value
117
119
 
118
- client_mock = mock.Mock()
120
+ client_mock = mock.Mock(spec=SOARClient)
119
121
 
120
122
  action_function(sample_params, soar=client_mock)
121
123
 
@@ -134,7 +136,7 @@ def test_action_call_with_state(simple_app, sample_params):
134
136
  soar.auth_state = updated_state
135
137
  soar.asset_cache = updated_state
136
138
 
137
- client_mock = mock.Mock()
139
+ client_mock = mock.Mock(spec=SOARClient)
138
140
 
139
141
  client_mock.ingestion_state = initial_state
140
142
  client_mock.auth_state = initial_state
@@ -202,14 +204,13 @@ def test_action_with_mocked_client(simple_app, sample_params):
202
204
  @simple_app.action()
203
205
  def action_function(params: SampleParams, soar: SOARClient) -> ActionOutput:
204
206
  container_id = str(soar.get_executing_container_id())
205
- soar.save_progress(f"Container ID is: {container_id}")
207
+ soar.set_summary(f"Container ID is: {container_id}")
206
208
 
207
- client_mock = mock.Mock()
208
- client_mock.save_progress = mock.Mock()
209
+ client_mock = mock.Mock(spec=SOARClient)
209
210
 
210
211
  action_function(sample_params, soar=client_mock)
211
212
 
212
- assert client_mock.save_progress.call_count == 1
213
+ assert client_mock.set_summary.call_count == 1
213
214
 
214
215
 
215
216
  def test_action_decoration_fails_without_return_type(simple_app):
@@ -269,17 +270,17 @@ def test_action_decoration_passing_output_type_as_argument(simple_app):
269
270
  foo(SampleActionParams())
270
271
 
271
272
 
272
- def test_action_failure_raised(simple_app: App):
273
+ def test_action_failure_raised(simple_app: App, mocker: pytest_mock.MockerFixture):
273
274
  @simple_app.action()
274
275
  def action_function(params: Params, soar: SOARClient) -> ActionOutput:
275
276
  raise ActionFailure("Action failed")
276
277
 
277
278
  # Mock the add_result method
278
- simple_app.actions_manager.add_result = mock.Mock()
279
+ add_result_mock = mocker.patch.object(simple_app.actions_manager, "add_result")
279
280
 
280
281
  result = action_function(Params(), soar=simple_app.soar_client)
281
282
  assert not result
282
- assert simple_app.actions_manager.add_result.call_count == 1
283
+ assert add_result_mock.call_count == 1
283
284
 
284
285
 
285
286
  def test_other_failure_raised(simple_app: App):