codemie-test-harness 0.1.129__py3-none-any.whl → 0.1.131__py3-none-any.whl

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.

Potentially problematic release.


This version of codemie-test-harness might be problematic. Click here for more details.

Files changed (321) hide show
  1. codemie_test_harness/.env +5 -0
  2. codemie_test_harness/cli/runner.py +25 -16
  3. codemie_test_harness/pytest.ini +6 -0
  4. {tests → codemie_test_harness/tests}/__init__.py +1 -1
  5. {tests → codemie_test_harness/tests}/assistant/datasource/test_code_datasource.py +2 -2
  6. {tests → codemie_test_harness/tests}/assistant/datasource/test_confluence_datasource.py +2 -2
  7. {tests → codemie_test_harness/tests}/assistant/datasource/test_file_indexing.py +6 -6
  8. {tests → codemie_test_harness/tests}/assistant/datasource/test_google_datasource.py +2 -2
  9. {tests → codemie_test_harness/tests}/assistant/datasource/test_jira_datasource.py +5 -2
  10. {tests → codemie_test_harness/tests}/assistant/default_integrations/test_default_integrations_for_tool.py +9 -6
  11. {tests → codemie_test_harness/tests}/assistant/default_integrations/test_default_integrations_for_tool_kit.py +8 -6
  12. {tests → codemie_test_harness/tests}/assistant/default_integrations/test_default_integrations_for_tool_with_datasource.py +6 -6
  13. {tests → codemie_test_harness/tests}/assistant/test_assistants.py +6 -6
  14. {tests → codemie_test_harness/tests}/assistant/tools/ado/test_assistant_for_ado_test_plan_tools.py +6 -6
  15. {tests → codemie_test_harness/tests}/assistant/tools/ado/test_assistant_for_ado_wiki_tools.py +4 -4
  16. {tests → codemie_test_harness/tests}/assistant/tools/ado/test_assistant_for_ado_work_item_tools.py +6 -6
  17. {tests → codemie_test_harness/tests}/assistant/tools/cloud/test_cloud_tools.py +2 -2
  18. {tests → codemie_test_harness/tests}/assistant/tools/codebase/test_codebase_tools.py +2 -2
  19. {tests → codemie_test_harness/tests}/assistant/tools/datamanagement/test_assistant_with_data_management_tools.py +3 -3
  20. {tests → codemie_test_harness/tests}/assistant/tools/filemanagement/test_assistant_with_file_management_tools.py +3 -3
  21. {tests → codemie_test_harness/tests}/assistant/tools/git/test_assistant_with_git_tools.py +2 -2
  22. {tests → codemie_test_harness/tests}/assistant/tools/mcp/test_cli_mcp_server.py +4 -4
  23. {tests → codemie_test_harness/tests}/assistant/tools/mcp/test_mcp_servers.py +1 -1
  24. {tests → codemie_test_harness/tests}/assistant/tools/notification/test_assistant_notification_tools.py +3 -3
  25. {tests → codemie_test_harness/tests}/assistant/tools/openapi/test_assistant_with_open_api_tools.py +2 -2
  26. {tests → codemie_test_harness/tests}/assistant/tools/plugin/test_assistant_with_development_plugin.py +4 -4
  27. {tests → codemie_test_harness/tests}/assistant/tools/plugin/test_assistant_with_plugin_and_mcp_servers.py +3 -3
  28. {tests → codemie_test_harness/tests}/assistant/tools/project_management/test_assistant_pm_tools.py +8 -6
  29. {tests → codemie_test_harness/tests}/assistant/tools/research/test_assistant_research_tools.py +3 -3
  30. {tests → codemie_test_harness/tests}/assistant/tools/servicenow/test_servicenow_tools.py +5 -2
  31. {tests → codemie_test_harness/tests}/assistant/tools/vcs/test_assistant_with_vcs_tools.py +3 -3
  32. {tests → codemie_test_harness/tests}/conftest.py +4 -0
  33. {tests → codemie_test_harness/tests}/e2e/test_e2e.py +2 -2
  34. {tests → codemie_test_harness/tests}/integrations/project/test_default_integrations.py +16 -9
  35. {tests → codemie_test_harness/tests}/integrations/project/test_project_integrations.py +6 -3
  36. {tests → codemie_test_harness/tests}/integrations/user/test_default_integrations.py +16 -9
  37. {tests → codemie_test_harness/tests}/integrations/user/test_user_integrations.py +3 -3
  38. {tests → codemie_test_harness/tests}/llm/assistants/test_llm.py +4 -4
  39. codemie_test_harness/tests/providers/test_providers_endpoints.py +239 -0
  40. {tests → codemie_test_harness/tests}/search/test_search_assistant.py +3 -3
  41. {tests → codemie_test_harness/tests}/search/test_search_datasource.py +3 -3
  42. {tests → codemie_test_harness/tests}/search/test_search_integration.py +2 -2
  43. {tests → codemie_test_harness/tests}/search/test_search_workflow.py +3 -3
  44. {tests → codemie_test_harness/tests}/service/test_assistant_service.py +2 -2
  45. {tests → codemie_test_harness/tests}/service/test_datasource_service.py +2 -2
  46. {tests → codemie_test_harness/tests}/service/test_integration_service.py +2 -2
  47. {tests → codemie_test_harness/tests}/service/test_task_service.py +2 -2
  48. {tests → codemie_test_harness/tests}/service/test_workflow_execution_service.py +2 -2
  49. {tests → codemie_test_harness/tests}/service/test_workflow_service.py +2 -2
  50. {tests → codemie_test_harness/tests}/test_data/ado_test_plan_tools_test_data.py +1 -1
  51. {tests → codemie_test_harness/tests}/test_data/ado_wiki_tools_test_data.py +1 -1
  52. {tests → codemie_test_harness/tests}/test_data/ado_work_item_tools_test_data.py +1 -1
  53. {tests → codemie_test_harness/tests}/test_data/cloud_tools_test_data.py +2 -2
  54. {tests → codemie_test_harness/tests}/test_data/codebase_tools_test_data.py +2 -2
  55. {tests → codemie_test_harness/tests}/test_data/data_management_tools_test_data.py +1 -1
  56. {tests → codemie_test_harness/tests}/test_data/direct_tools/ado_test_plan_tools_test_data.py +1 -1
  57. {tests → codemie_test_harness/tests}/test_data/direct_tools/ado_wiki_tools_test_data.py +1 -1
  58. {tests → codemie_test_harness/tests}/test_data/direct_tools/ado_work_item_tools_test_data.py +1 -1
  59. {tests → codemie_test_harness/tests}/test_data/direct_tools/cloud_tools_test_data.py +2 -2
  60. {tests → codemie_test_harness/tests}/test_data/direct_tools/codebase_tools_test_data.py +1 -1
  61. {tests → codemie_test_harness/tests}/test_data/direct_tools/data_management_tools_test_data.py +2 -2
  62. {tests → codemie_test_harness/tests}/test_data/direct_tools/direct_tools_test_data.py +2 -2
  63. {tests → codemie_test_harness/tests}/test_data/direct_tools/file_management_tools_test_data.py +1 -1
  64. {tests → codemie_test_harness/tests}/test_data/direct_tools/notification_tools_test_data.py +2 -2
  65. {tests → codemie_test_harness/tests}/test_data/direct_tools/open_api_tools_test_data.py +1 -1
  66. {tests → codemie_test_harness/tests}/test_data/direct_tools/project_management_tools_test_data.py +2 -2
  67. {tests → codemie_test_harness/tests}/test_data/direct_tools/research_tools_test_data.py +1 -1
  68. {tests → codemie_test_harness/tests}/test_data/direct_tools/vcs_tools_test_data.py +1 -1
  69. {tests → codemie_test_harness/tests}/test_data/file_management_tools_test_data.py +1 -1
  70. codemie_test_harness/tests/test_data/files/provider_payload.json +382 -0
  71. {tests → codemie_test_harness/tests}/test_data/git_tools_test_data.py +1 -1
  72. {tests → codemie_test_harness/tests}/test_data/integrations_test_data.py +2 -2
  73. {tests → codemie_test_harness/tests}/test_data/llm_test_data.py +1 -1
  74. {tests → codemie_test_harness/tests}/test_data/mcp_server_test_data.py +2 -2
  75. {tests → codemie_test_harness/tests}/test_data/notification_tools_test_data.py +1 -1
  76. {tests → codemie_test_harness/tests}/test_data/open_api_tools_test_data.py +1 -1
  77. {tests → codemie_test_harness/tests}/test_data/plugin_tools_test_data.py +2 -2
  78. {tests → codemie_test_harness/tests}/test_data/project_management_test_data.py +3 -3
  79. {tests → codemie_test_harness/tests}/test_data/research_tools_test_data.py +1 -1
  80. {tests → codemie_test_harness/tests}/test_data/vcs_tools_test_data.py +1 -1
  81. {tests → codemie_test_harness/tests}/ui/conftest.py +1 -1
  82. {tests → codemie_test_harness/tests}/ui/pageobject/assistants/assistants_page.py +1 -1
  83. {tests → codemie_test_harness/tests}/ui/pageobject/base_page.py +2 -2
  84. {tests → codemie_test_harness/tests}/ui/pageobject/login_page.py +4 -2
  85. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/base_workflow_form_page.py +2 -2
  86. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/create_workflow_page.py +4 -2
  87. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/edit_workflow_page.py +3 -1
  88. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/workflow_details_page.py +5 -3
  89. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/workflow_executions_page.py +3 -3
  90. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/workflow_template_details.py +1 -1
  91. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/workflow_templates_page.py +4 -2
  92. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/workflows_page.py +8 -3
  93. {tests → codemie_test_harness/tests}/ui/test_create_workflow.py +7 -3
  94. {tests → codemie_test_harness/tests}/ui/test_edit_workflow.py +8 -4
  95. {tests → codemie_test_harness/tests}/ui/test_workflow_details.py +4 -4
  96. {tests → codemie_test_harness/tests}/ui/test_workflow_executions_page.py +3 -3
  97. {tests → codemie_test_harness/tests}/ui/test_workflow_templates.py +12 -6
  98. {tests → codemie_test_harness/tests}/ui/test_workflows.py +3 -1
  99. {tests → codemie_test_harness/tests}/utils/assistant_utils.py +6 -2
  100. {tests → codemie_test_harness/tests}/utils/aws_parameters_store.py +6 -4
  101. {tests → codemie_test_harness/tests}/utils/base_utils.py +2 -2
  102. {tests → codemie_test_harness/tests}/utils/constants.py +1 -1
  103. {tests → codemie_test_harness/tests}/utils/datasource_utils.py +6 -2
  104. codemie_test_harness/tests/utils/http_utils.py +141 -0
  105. {tests → codemie_test_harness/tests}/utils/integration_utils.py +6 -2
  106. {tests → codemie_test_harness/tests}/utils/notification_utils.py +1 -1
  107. codemie_test_harness/tests/utils/provider_utils.py +178 -0
  108. {tests → codemie_test_harness/tests}/utils/search_utils.py +1 -1
  109. {tests → codemie_test_harness/tests}/utils/similarity_check.py +5 -1
  110. {tests → codemie_test_harness/tests}/utils/workflow_utils.py +4 -4
  111. {tests → codemie_test_harness/tests}/workflow/assistant_tools/ado/test_workflow_with_assistant_with_ado_test_plan_tools.py +5 -5
  112. {tests → codemie_test_harness/tests}/workflow/assistant_tools/ado/test_workflow_with_assistant_with_ado_wiki_tools.py +3 -3
  113. {tests → codemie_test_harness/tests}/workflow/assistant_tools/ado/test_workflow_with_assistant_with_ado_work_item_tools.py +5 -5
  114. {tests → codemie_test_harness/tests}/workflow/assistant_tools/cloud/test_workflow_with_assistant_cloud_tools.py +2 -2
  115. {tests → codemie_test_harness/tests}/workflow/assistant_tools/codebase/test_worfklow_with_assistant_codebase_tools.py +2 -2
  116. {tests → codemie_test_harness/tests}/workflow/assistant_tools/data_management/test_workflow_with_assistant_with_data_management_tools.py +3 -3
  117. {tests → codemie_test_harness/tests}/workflow/assistant_tools/default_integrations/test_default_integrations_for_tool.py +9 -6
  118. {tests → codemie_test_harness/tests}/workflow/assistant_tools/default_integrations/test_default_integrations_for_tool_kit.py +8 -6
  119. {tests → codemie_test_harness/tests}/workflow/assistant_tools/default_integrations/test_default_integrations_for_tool_with_datasource.py +6 -6
  120. {tests → codemie_test_harness/tests}/workflow/assistant_tools/file_management/test_workflow_with_assistant_with_file_management_tools.py +3 -3
  121. {tests → codemie_test_harness/tests}/workflow/assistant_tools/git/test_workflow_with_assistant_git_tools.py +2 -2
  122. {tests → codemie_test_harness/tests}/workflow/assistant_tools/mcp/test_workflow_with_assistant_with_mcp_server.py +2 -2
  123. {tests → codemie_test_harness/tests}/workflow/assistant_tools/notification/test_workflow_with_assistant_notification_tools.py +2 -2
  124. {tests → codemie_test_harness/tests}/workflow/assistant_tools/open_api/test_workflow_with_assistant_with_open_api_tools.py +4 -2
  125. {tests → codemie_test_harness/tests}/workflow/assistant_tools/plugin/test_workflow_with_assistant_with_development_plugin.py +4 -4
  126. {tests → codemie_test_harness/tests}/workflow/assistant_tools/plugin/test_workflow_with_assistant_with_plugin_and_mcp_servers.py +3 -3
  127. {tests → codemie_test_harness/tests}/workflow/assistant_tools/project_management/test_workflow_with_assistant_pm_tools.py +5 -3
  128. {tests → codemie_test_harness/tests}/workflow/assistant_tools/research/test_workflow_with_assistant_research_tools.py +3 -3
  129. {tests → codemie_test_harness/tests}/workflow/assistant_tools/servicenow/test_workflow_with_servicenow_tools.py +5 -2
  130. {tests → codemie_test_harness/tests}/workflow/assistant_tools/vcs/workflow_with_assistant_vcs_tools.py +3 -3
  131. {tests → codemie_test_harness/tests}/workflow/config_validation/test_config_validation.py +3 -3
  132. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/default_integrations/test_default_integrations_for_tool.py +7 -7
  133. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/default_integrations/test_default_integrations_for_tool_kit.py +9 -7
  134. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_ado_test_plan_tools.py +2 -2
  135. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_ado_wiki_tools.py +4 -2
  136. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_ado_work_item_tools.py +2 -2
  137. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_cloud_tools.py +5 -3
  138. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_codebase_tools.py +4 -4
  139. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_data_management_tools.py +3 -3
  140. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_file_management_tools.py +2 -2
  141. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_notification_tools.py +4 -4
  142. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_open_api_tools.py +2 -2
  143. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_plugin_tools.py +3 -3
  144. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_project_management_tools.py +3 -3
  145. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_research_tools.py +2 -2
  146. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_servicenow_tools.py +3 -3
  147. {tests → codemie_test_harness/tests}/workflow/direct_tools_calling/test_workflow_with_vcs_tools.py +3 -3
  148. {tests → codemie_test_harness/tests}/workflow/test_workflows.py +3 -3
  149. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/ado/test_workflow_with_ado_test_plan_tools.py +5 -5
  150. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/ado/test_workflow_with_ado_wiki_tools.py +3 -3
  151. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/ado/test_workflow_with_ado_work_item_tools.py +5 -5
  152. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/cloud/test_workflow_with_cloud_tools.py +3 -3
  153. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/codebase/test_workflow_with_codebase_tools.py +4 -4
  154. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/data_management/test_workflow_with_data_management_tools.py +4 -4
  155. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/default_integrations/test_default_integrations_for_tool.py +10 -7
  156. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/default_integrations/test_default_integrations_for_tool_kit.py +9 -7
  157. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/default_integrations/test_default_integrations_for_tool_with_datasource.py +7 -7
  158. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/file_management/test_workflow_with_file_management_tools.py +3 -3
  159. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/git/test_workflow_with_git_tools.py +2 -2
  160. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/mcp/test_workflow_with_mcp_server.py +3 -3
  161. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/notification/test_workflow_with_notification_tools.py +3 -3
  162. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/open_api/test_workflow_with_open_api_tools.py +4 -2
  163. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/plugin/test_workflow_with_development_plugin.py +4 -4
  164. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/plugin/test_workflow_with_plugin_and_mcp_servers.py +4 -4
  165. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/project_management/test_workflow_with_project_management_tools.py +5 -3
  166. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/research/test_workflow_with_research_tools.py +6 -3
  167. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/servicenow/test_workflow_with_servicenow_tools.py +6 -3
  168. codemie_test_harness/tests/workflow/virtual_assistant_tools/vcs/__init__.py +0 -0
  169. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/vcs/test_workflow_with_vcs_tools.py +3 -3
  170. {codemie_test_harness-0.1.129.dist-info → codemie_test_harness-0.1.131.dist-info}/METADATA +2 -2
  171. codemie_test_harness-0.1.131.dist-info/RECORD +326 -0
  172. codemie_test_harness-0.1.129.dist-info/RECORD +0 -320
  173. tests/utils/http_utils.py +0 -53
  174. {tests → codemie_test_harness/tests}/assistant/__init__.py +0 -0
  175. {tests → codemie_test_harness/tests}/assistant/datasource/__init__.py +0 -0
  176. {tests → codemie_test_harness/tests}/assistant/default_integrations/__init__.py +0 -0
  177. {tests → codemie_test_harness/tests}/assistant/tools/__init__.py +0 -0
  178. {tests → codemie_test_harness/tests}/assistant/tools/ado/__init__.py +0 -0
  179. {tests → codemie_test_harness/tests}/assistant/tools/cloud/__init__.py +0 -0
  180. {tests → codemie_test_harness/tests}/assistant/tools/codebase/__init__.py +0 -0
  181. {tests → codemie_test_harness/tests}/assistant/tools/datamanagement/__init__.py +0 -0
  182. {tests → codemie_test_harness/tests}/assistant/tools/filemanagement/__init__.py +0 -0
  183. {tests → codemie_test_harness/tests}/assistant/tools/git/__init__.py +0 -0
  184. {tests → codemie_test_harness/tests}/assistant/tools/mcp/__init__.py +0 -0
  185. {tests → codemie_test_harness/tests}/assistant/tools/notification/__init__.py +0 -0
  186. {tests → codemie_test_harness/tests}/assistant/tools/openapi/__init__.py +0 -0
  187. {tests → codemie_test_harness/tests}/assistant/tools/plugin/__init__.py +0 -0
  188. {tests → codemie_test_harness/tests}/assistant/tools/project_management/__init__.py +0 -0
  189. {tests → codemie_test_harness/tests}/assistant/tools/research/__init__.py +0 -0
  190. {tests → codemie_test_harness/tests}/assistant/tools/servicenow/__init__.py +0 -0
  191. {tests → codemie_test_harness/tests}/assistant/tools/vcs/__init__.py +0 -0
  192. {tests → codemie_test_harness/tests}/e2e/__init__.py +0 -0
  193. {tests → codemie_test_harness/tests}/enums/__init__.py +0 -0
  194. {tests → codemie_test_harness/tests}/enums/integrations.py +0 -0
  195. {tests → codemie_test_harness/tests}/enums/model_types.py +0 -0
  196. {tests → codemie_test_harness/tests}/enums/tools.py +0 -0
  197. {tests → codemie_test_harness/tests}/integrations/__init__.py +0 -0
  198. {tests → codemie_test_harness/tests}/integrations/project/__init__.py +0 -0
  199. {tests → codemie_test_harness/tests}/integrations/user/__init__.py +0 -0
  200. {tests → codemie_test_harness/tests}/llm/__init__.py +0 -0
  201. {tests → codemie_test_harness/tests}/llm/assistants/__init__.py +0 -0
  202. {tests/service → codemie_test_harness/tests/providers}/__init__.py +0 -0
  203. {tests → codemie_test_harness/tests}/search/__init__.py +0 -0
  204. {tests/test_data → codemie_test_harness/tests/service}/__init__.py +0 -0
  205. {tests → codemie_test_harness/tests}/service/test_llm_service.py +0 -0
  206. {tests → codemie_test_harness/tests}/service/test_user_service.py +0 -0
  207. {tests/test_data/direct_tools → codemie_test_harness/tests/test_data}/__init__.py +0 -0
  208. {tests/ui → codemie_test_harness/tests/test_data/direct_tools}/__init__.py +0 -0
  209. {tests → codemie_test_harness/tests}/test_data/direct_tools/servicenow_tools_test_data.py +0 -0
  210. {tests → codemie_test_harness/tests}/test_data/file_test_data.py +0 -0
  211. {tests → codemie_test_harness/tests}/test_data/files/large-files/large_file.txt +0 -0
  212. {tests → codemie_test_harness/tests}/test_data/files/test.csv +0 -0
  213. {tests → codemie_test_harness/tests}/test_data/files/test.docx +0 -0
  214. {tests → codemie_test_harness/tests}/test_data/files/test.gif +0 -0
  215. {tests → codemie_test_harness/tests}/test_data/files/test.ini +0 -0
  216. {tests → codemie_test_harness/tests}/test_data/files/test.jpeg +0 -0
  217. {tests → codemie_test_harness/tests}/test_data/files/test.jpg +0 -0
  218. {tests → codemie_test_harness/tests}/test_data/files/test.json +0 -0
  219. {tests → codemie_test_harness/tests}/test_data/files/test.pdf +0 -0
  220. {tests → codemie_test_harness/tests}/test_data/files/test.png +0 -0
  221. {tests → codemie_test_harness/tests}/test_data/files/test.pptx +0 -0
  222. {tests → codemie_test_harness/tests}/test_data/files/test.txt +0 -0
  223. {tests → codemie_test_harness/tests}/test_data/files/test.vtt +0 -0
  224. {tests → codemie_test_harness/tests}/test_data/files/test.xlsx +0 -0
  225. {tests → codemie_test_harness/tests}/test_data/files/test.xml +0 -0
  226. {tests → codemie_test_harness/tests}/test_data/files/test.yaml +0 -0
  227. {tests → codemie_test_harness/tests}/test_data/google_datasource_test_data.py +0 -0
  228. {tests → codemie_test_harness/tests}/test_data/index_test_data.py +0 -0
  229. {tests → codemie_test_harness/tests}/test_data/openapi.json +0 -0
  230. {tests → codemie_test_harness/tests}/test_data/output_schema_test_data.py +0 -0
  231. {tests → codemie_test_harness/tests}/test_data/pm_tools_test_data.py +0 -0
  232. {tests → codemie_test_harness/tests}/test_data/servicenow_tools_test_data.py +0 -0
  233. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/invalid_assistant_id.yaml +0 -0
  234. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/invalid_assistant_in_state.yaml +0 -0
  235. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/invalid_data_source.yaml +0 -0
  236. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/invalid_state.yaml +0 -0
  237. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/invalid_tool.yaml +0 -0
  238. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/invalid_yaml.yaml +0 -0
  239. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/invalid_yaml_format.yaml +0 -0
  240. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_assistant_id.yaml +0 -0
  241. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_assistant_tools_name.yaml +0 -0
  242. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_retry_backoff_factor.yaml +0 -0
  243. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_retry_initial_interval.yaml +0 -0
  244. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_retry_max_attempts.yaml +0 -0
  245. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_retry_max_interval.yaml +0 -0
  246. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states.yaml +0 -0
  247. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_id.yaml +0 -0
  248. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next.yaml +0 -0
  249. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next_condition_expression.yaml +0 -0
  250. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next_condition_otherwise.yaml +0 -0
  251. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next_condition_then.yaml +0 -0
  252. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next_switch_cases.yaml +0 -0
  253. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next_switch_cases_condition.yaml +0 -0
  254. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next_switch_cases_state_id.yaml +0 -0
  255. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_next_switch_default.yaml +0 -0
  256. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_retry_backoff_factor.yaml +0 -0
  257. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_retry_initial_interval.yaml +0 -0
  258. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_retry_max_attempts.yaml +0 -0
  259. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_states_retry_max_interval.yaml +0 -0
  260. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_system_prompt.yaml +0 -0
  261. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_tools_id.yaml +0 -0
  262. {tests → codemie_test_harness/tests}/test_data/workflow/invalid_config/missing_required_tools_name.yaml +0 -0
  263. {tests → codemie_test_harness/tests}/test_data/workflow_validation_messages.py +0 -0
  264. {tests/ui/pageobject → codemie_test_harness/tests/ui}/__init__.py +0 -0
  265. {tests/ui/pageobject/assistants → codemie_test_harness/tests/ui/pageobject}/__init__.py +0 -0
  266. {tests/workflow → codemie_test_harness/tests/ui/pageobject/assistants}/__init__.py +0 -0
  267. {tests → codemie_test_harness/tests}/ui/pageobject/components/__init__.py +0 -0
  268. {tests → codemie_test_harness/tests}/ui/pageobject/components/execution_history_row.py +0 -0
  269. {tests → codemie_test_harness/tests}/ui/pageobject/components/header.py +0 -0
  270. {tests → codemie_test_harness/tests}/ui/pageobject/components/pop_up.py +0 -0
  271. {tests → codemie_test_harness/tests}/ui/pageobject/components/workflow_card.py +0 -0
  272. {tests → codemie_test_harness/tests}/ui/pageobject/components/workflow_execution_history_item.py +0 -0
  273. {tests → codemie_test_harness/tests}/ui/pageobject/components/workflow_execution_state.py +0 -0
  274. {tests → codemie_test_harness/tests}/ui/pageobject/components/workflow_sidebar.py +0 -0
  275. {tests → codemie_test_harness/tests}/ui/pageobject/components/workflow_state_card.py +0 -0
  276. {tests → codemie_test_harness/tests}/ui/pageobject/workflows/__init__.py +0 -0
  277. {tests → codemie_test_harness/tests}/utils/__init__.py +0 -0
  278. {tests → codemie_test_harness/tests}/utils/client_factory.py +0 -0
  279. {tests → codemie_test_harness/tests}/utils/file_utils.py +0 -0
  280. {tests → codemie_test_harness/tests}/utils/gitbud_utils.py +0 -0
  281. {tests → codemie_test_harness/tests}/utils/json_utils.py +0 -0
  282. {tests → codemie_test_harness/tests}/utils/logger_util.py +0 -0
  283. {tests → codemie_test_harness/tests}/utils/pytest_utils.py +0 -0
  284. {tests → codemie_test_harness/tests}/utils/yaml_utils.py +0 -0
  285. {tests/workflow/assistant_tools → codemie_test_harness/tests/workflow}/__init__.py +0 -0
  286. {tests/workflow/assistant_tools/ado → codemie_test_harness/tests/workflow/assistant_tools}/__init__.py +0 -0
  287. {tests/workflow/assistant_tools/cloud → codemie_test_harness/tests/workflow/assistant_tools/ado}/__init__.py +0 -0
  288. {tests/workflow/assistant_tools/codebase → codemie_test_harness/tests/workflow/assistant_tools/cloud}/__init__.py +0 -0
  289. {tests/workflow/assistant_tools/data_management → codemie_test_harness/tests/workflow/assistant_tools/codebase}/__init__.py +0 -0
  290. {tests/workflow/assistant_tools/default_integrations → codemie_test_harness/tests/workflow/assistant_tools/data_management}/__init__.py +0 -0
  291. {tests/workflow/assistant_tools/git → codemie_test_harness/tests/workflow/assistant_tools/default_integrations}/__init__.py +0 -0
  292. {tests → codemie_test_harness/tests}/workflow/assistant_tools/file_management/__init__.py +0 -0
  293. {tests/workflow/assistant_tools/mcp → codemie_test_harness/tests/workflow/assistant_tools/git}/__init__.py +0 -0
  294. {tests/workflow/assistant_tools/notification → codemie_test_harness/tests/workflow/assistant_tools/mcp}/__init__.py +0 -0
  295. {tests/workflow/assistant_tools/plugin → codemie_test_harness/tests/workflow/assistant_tools/notification}/__init__.py +0 -0
  296. {tests → codemie_test_harness/tests}/workflow/assistant_tools/open_api/__init__.py +0 -0
  297. {tests/workflow/assistant_tools/project_management → codemie_test_harness/tests/workflow/assistant_tools/plugin}/__init__.py +0 -0
  298. {tests/workflow/assistant_tools/research → codemie_test_harness/tests/workflow/assistant_tools/project_management}/__init__.py +0 -0
  299. {tests/workflow/assistant_tools/servicenow → codemie_test_harness/tests/workflow/assistant_tools/research}/__init__.py +0 -0
  300. {tests/workflow/assistant_tools/vcs → codemie_test_harness/tests/workflow/assistant_tools/servicenow}/__init__.py +0 -0
  301. {tests/workflow/config_validation → codemie_test_harness/tests/workflow/assistant_tools/vcs}/__init__.py +0 -0
  302. {tests/workflow/direct_tools_calling → codemie_test_harness/tests/workflow/config_validation}/__init__.py +0 -0
  303. {tests/workflow/direct_tools_calling/default_integrations → codemie_test_harness/tests/workflow/direct_tools_calling}/__init__.py +0 -0
  304. {tests/workflow/virtual_assistant_tools → codemie_test_harness/tests/workflow/direct_tools_calling/default_integrations}/__init__.py +0 -0
  305. {tests/workflow/virtual_assistant_tools/ado → codemie_test_harness/tests/workflow/virtual_assistant_tools}/__init__.py +0 -0
  306. {tests/workflow/virtual_assistant_tools/cloud → codemie_test_harness/tests/workflow/virtual_assistant_tools/ado}/__init__.py +0 -0
  307. {tests/workflow/virtual_assistant_tools/default_integrations → codemie_test_harness/tests/workflow/virtual_assistant_tools/cloud}/__init__.py +0 -0
  308. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/codebase/__init__.py +0 -0
  309. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/data_management/__init__.py +0 -0
  310. {tests/workflow/virtual_assistant_tools/git → codemie_test_harness/tests/workflow/virtual_assistant_tools/default_integrations}/__init__.py +0 -0
  311. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/file_management/__init__.py +0 -0
  312. {tests/workflow/virtual_assistant_tools/mcp → codemie_test_harness/tests/workflow/virtual_assistant_tools/git}/__init__.py +0 -0
  313. {tests/workflow/virtual_assistant_tools/plugin → codemie_test_harness/tests/workflow/virtual_assistant_tools/mcp}/__init__.py +0 -0
  314. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/notification/__init__.py +0 -0
  315. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/open_api/__init__.py +0 -0
  316. {tests/workflow/virtual_assistant_tools/research → codemie_test_harness/tests/workflow/virtual_assistant_tools/plugin}/__init__.py +0 -0
  317. {tests → codemie_test_harness/tests}/workflow/virtual_assistant_tools/project_management/__init__.py +0 -0
  318. {tests/workflow/virtual_assistant_tools/servicenow → codemie_test_harness/tests/workflow/virtual_assistant_tools/research}/__init__.py +0 -0
  319. {tests/workflow/virtual_assistant_tools/vcs → codemie_test_harness/tests/workflow/virtual_assistant_tools/servicenow}/__init__.py +0 -0
  320. {codemie_test_harness-0.1.129.dist-info → codemie_test_harness-0.1.131.dist-info}/WHEEL +0 -0
  321. {codemie_test_harness-0.1.129.dist-info → codemie_test_harness-0.1.131.dist-info}/entry_points.txt +0 -0
@@ -6,9 +6,14 @@ from hamcrest import assert_that, has_length, greater_than
6
6
  from playwright.sync_api import expect
7
7
  from reportportal_client import step
8
8
 
9
- from tests.ui.pageobject.components import WorkflowCard, WorkflowSidebar
10
- from tests.ui.pageobject.base_page import BasePage
11
- from tests.ui.pageobject.workflows.create_workflow_page import CreateWorkflowPage
9
+ from codemie_test_harness.tests.ui.pageobject.components import (
10
+ WorkflowCard,
11
+ WorkflowSidebar,
12
+ )
13
+ from codemie_test_harness.tests.ui.pageobject.base_page import BasePage
14
+ from codemie_test_harness.tests.ui.pageobject.workflows.create_workflow_page import (
15
+ CreateWorkflowPage,
16
+ )
12
17
 
13
18
 
14
19
  class WorkflowsPage(BasePage):
@@ -2,9 +2,13 @@ import os
2
2
 
3
3
  import pytest
4
4
 
5
- from tests.ui.pageobject.workflows.workflows_page import WorkflowsPage
6
- from tests.ui.pageobject.workflows.create_workflow_page import CreateWorkflowPage
7
- from tests.utils.base_utils import get_random_name
5
+ from codemie_test_harness.tests.ui.pageobject.workflows.workflows_page import (
6
+ WorkflowsPage,
7
+ )
8
+ from codemie_test_harness.tests.ui.pageobject.workflows.create_workflow_page import (
9
+ CreateWorkflowPage,
10
+ )
11
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
8
12
 
9
13
 
10
14
  @pytest.mark.ui
@@ -3,10 +3,14 @@ import os
3
3
  import pytest
4
4
 
5
5
  from codemie_sdk.models.workflow import WorkflowMode
6
- from tests.ui.pageobject.workflows.workflows_page import WorkflowsPage
7
- from tests.ui.pageobject.workflows.edit_workflow_page import EditWorkflowPage
8
- from tests.utils.base_utils import get_random_name
9
- from tests.utils.yaml_utils import (
6
+ from codemie_test_harness.tests.ui.pageobject.workflows.workflows_page import (
7
+ WorkflowsPage,
8
+ )
9
+ from codemie_test_harness.tests.ui.pageobject.workflows.edit_workflow_page import (
10
+ EditWorkflowPage,
11
+ )
12
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
13
+ from codemie_test_harness.tests.utils.yaml_utils import (
10
14
  AssistantModel,
11
15
  StateModel,
12
16
  WorkflowYamlModel,
@@ -10,10 +10,10 @@ import os
10
10
  import pytest
11
11
 
12
12
  from codemie_sdk.models.workflow import WorkflowMode
13
- from tests import TEST_USER, PROJECT
14
- from tests.ui.pageobject.workflows import WorkflowDetailsPage
15
- from tests.utils.base_utils import get_random_name
16
- from tests.utils.yaml_utils import (
13
+ from codemie_test_harness.tests import TEST_USER, PROJECT
14
+ from codemie_test_harness.tests.ui.pageobject.workflows import WorkflowDetailsPage
15
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
16
+ from codemie_test_harness.tests.utils.yaml_utils import (
17
17
  AssistantModel,
18
18
  StateModel,
19
19
  WorkflowYamlModel,
@@ -17,9 +17,9 @@ import pytz
17
17
  from tzlocal import get_localzone
18
18
 
19
19
  from codemie_sdk.models.workflow import WorkflowMode
20
- from tests.ui.pageobject.workflows import WorkflowExecutionsPage
21
- from tests.utils.base_utils import get_random_name
22
- from tests.utils.yaml_utils import (
20
+ from codemie_test_harness.tests.ui.pageobject.workflows import WorkflowExecutionsPage
21
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
22
+ from codemie_test_harness.tests.utils.yaml_utils import (
23
23
  AssistantModel,
24
24
  StateModel,
25
25
  WorkflowYamlModel,
@@ -1,13 +1,19 @@
1
1
  import pytest
2
2
 
3
- from tests import TEST_USER
4
- from tests.ui.pageobject.workflows.create_workflow_page import CreateWorkflowPage
5
- from tests.ui.pageobject.workflows.workflow_template_details import (
3
+ from codemie_test_harness.tests import TEST_USER
4
+ from codemie_test_harness.tests.ui.pageobject.workflows.create_workflow_page import (
5
+ CreateWorkflowPage,
6
+ )
7
+ from codemie_test_harness.tests.ui.pageobject.workflows.workflow_template_details import (
6
8
  WorkflowTemplateDetailsPage,
7
9
  )
8
- from tests.ui.pageobject.workflows.workflow_templates_page import WorkflowTemplatesPage
9
- from tests.ui.pageobject.workflows.workflows_page import WorkflowsPage
10
- from tests.utils.base_utils import get_random_name
10
+ from codemie_test_harness.tests.ui.pageobject.workflows.workflow_templates_page import (
11
+ WorkflowTemplatesPage,
12
+ )
13
+ from codemie_test_harness.tests.ui.pageobject.workflows.workflows_page import (
14
+ WorkflowsPage,
15
+ )
16
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
11
17
 
12
18
 
13
19
  @pytest.fixture(scope="function")
@@ -1,5 +1,7 @@
1
1
  import pytest
2
- from tests.ui.pageobject.workflows.workflows_page import WorkflowsPage
2
+ from codemie_test_harness.tests.ui.pageobject.workflows.workflows_page import (
3
+ WorkflowsPage,
4
+ )
3
5
 
4
6
 
5
7
  @pytest.mark.ui
@@ -7,8 +7,12 @@ from codemie_sdk.models.assistant import (
7
7
  EnvVars,
8
8
  ExportAssistantPayload,
9
9
  )
10
- from tests import PROJECT, LANGFUSE_TRACES_ENABLED
11
- from tests.utils.base_utils import BaseUtils, get_random_name, wait_for_entity
10
+ from codemie_test_harness.tests import PROJECT, LANGFUSE_TRACES_ENABLED
11
+ from codemie_test_harness.tests.utils.base_utils import (
12
+ BaseUtils,
13
+ get_random_name,
14
+ wait_for_entity,
15
+ )
12
16
 
13
17
 
14
18
  class AssistantUtils(BaseUtils):
@@ -10,7 +10,7 @@ import boto3
10
10
  from botocore.exceptions import ClientError
11
11
 
12
12
  from codemie_sdk.models.integration import CredentialValues
13
- from tests.enums.integrations import DataBaseDialect
13
+ from codemie_test_harness.tests.enums.integrations import DataBaseDialect
14
14
 
15
15
 
16
16
  class AwsParameterStore:
@@ -543,9 +543,11 @@ class CredentialsUtil:
543
543
 
544
544
  @staticmethod
545
545
  def kubernetes_credentials() -> List[CredentialValues]:
546
- kubernetes_creds = AwsParameterStore.get_cloud_provider_credentials(
547
- "kubernetes"
548
- )["sandbox"]["kubernetes"]
546
+ kubernetes_creds = (
547
+ AwsParameterStore.get_cloud_provider_credentials("kubernetes")
548
+ .get("sandbox", {})
549
+ .get("kubernetes", {})
550
+ )
549
551
  return [
550
552
  CredentialValues(key="url", value=CredentialsUtil.AUTO_GENERATED),
551
553
  CredentialValues(key="kubernetes_url", value=kubernetes_creds.get("url")),
@@ -18,7 +18,7 @@ from codemie_sdk.models.workflow_state import (
18
18
  from codemie_sdk.services.workflow_execution_state import (
19
19
  WorkflowExecutionStateService,
20
20
  )
21
- from tests import autotest_entity_prefix
21
+ from codemie_test_harness.tests import autotest_entity_prefix
22
22
 
23
23
 
24
24
  class BaseUtils:
@@ -50,7 +50,7 @@ def to_camel_case(input_string):
50
50
  def wait_for_completion(
51
51
  execution_state_service: WorkflowExecutionStateService,
52
52
  state_id: str,
53
- timeout: int = int(os.getenv("DEFAULT_TIMEOUT")),
53
+ timeout: int = int(os.getenv("DEFAULT_TIMEOUT", "120")),
54
54
  pool_interval: int = 3,
55
55
  ) -> WorkflowExecutionState:
56
56
  start_time = time.time()
@@ -1,7 +1,7 @@
1
1
  from enum import Enum
2
2
  from pathlib import Path
3
3
 
4
- from tests.enums.tools import VcsTool, NotificationTool
4
+ from codemie_test_harness.tests.enums.tools import VcsTool, NotificationTool
5
5
 
6
6
 
7
7
  class ProjectManagementIntegrationType(Enum):
@@ -19,8 +19,12 @@ from codemie_sdk.models.datasource import (
19
19
  UpdateJiraDataSourceRequest,
20
20
  )
21
21
  from codemie_sdk.models.datasource import DataSourceStatus
22
- from tests import PROJECT
23
- from tests.utils.base_utils import BaseUtils, get_random_name, wait_for_entity
22
+ from codemie_test_harness.tests import PROJECT
23
+ from codemie_test_harness.tests.utils.base_utils import (
24
+ BaseUtils,
25
+ get_random_name,
26
+ wait_for_entity,
27
+ )
24
28
 
25
29
 
26
30
  class DataSourceUtils(BaseUtils):
@@ -0,0 +1,141 @@
1
+ import logging
2
+ from typing import TypeVar, Type, Optional, Any, Union, Dict, List
3
+
4
+ import requests
5
+ from codemie_sdk.utils.http import ApiRequestHandler
6
+ from codemie_sdk.utils.http import log_request
7
+ from pydantic import BaseModel
8
+
9
+ T = TypeVar("T", bound=Union[BaseModel, List[BaseModel], dict])
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class RequestHandler(ApiRequestHandler):
15
+ """Handles HTTP requests with consistent error handling and response parsing."""
16
+
17
+ @log_request
18
+ def post(
19
+ self,
20
+ endpoint: str,
21
+ response_model: Type[T] = None,
22
+ json_data: Optional[Dict[str, Any]] = None,
23
+ stream: bool = False,
24
+ wrap_response: bool = True,
25
+ ) -> Union[T, requests.Response]:
26
+ """Makes a POST request and parses the response.
27
+
28
+ Args:
29
+ endpoint: API endpoint path
30
+ response_model: Pydantic model class or List[Model] for response
31
+ json_data: JSON request body
32
+ stream: Whether to return streaming response
33
+ wrap_response: Whether response is wrapped in 'data' field
34
+
35
+ Returns:
36
+ Parsed response object/list or streaming response
37
+ """
38
+ if json_data:
39
+ logger.debug(f"Request body: {json_data}")
40
+
41
+ response = requests.post(
42
+ url=f"{self._base_url}{endpoint}",
43
+ headers=self._get_headers(),
44
+ json=json_data,
45
+ verify=self._verify_ssl,
46
+ stream=stream,
47
+ )
48
+
49
+ if stream:
50
+ return response
51
+
52
+ return self._parse_response(response, response_model, wrap_response)
53
+
54
+ @log_request
55
+ def get(
56
+ self,
57
+ endpoint: str,
58
+ response_model: Type[T] = None,
59
+ params: Optional[Dict[str, Any]] = None,
60
+ wrap_response: bool = True,
61
+ ) -> Union[T, requests.Response]:
62
+ """Makes a GET request and parses the response.
63
+
64
+ Args:
65
+ endpoint: API endpoint path
66
+ response_model: Pydantic model class or List[Model] for response
67
+ params: Query parameters
68
+ wrap_response: Whether response is wrapped in 'data' field
69
+
70
+ Returns:
71
+ Parsed response object or list of objects
72
+ """
73
+ if params:
74
+ logger.debug(f"Request params: {params}")
75
+ response = requests.get(
76
+ url=f"{self._base_url}{endpoint}",
77
+ headers=self._get_headers(),
78
+ params=params,
79
+ verify=self._verify_ssl,
80
+ )
81
+
82
+ if response_model:
83
+ return self._parse_response(response, response_model, wrap_response)
84
+
85
+ return response
86
+
87
+ @log_request
88
+ def put(
89
+ self,
90
+ endpoint: str,
91
+ json_data: Dict[str, Any],
92
+ response_model: Type[T] = None,
93
+ params: Optional[Dict[str, Any]] = None,
94
+ wrap_response: bool = True,
95
+ ) -> Union[T, requests.Response]:
96
+ """Makes a PUT request and parses the response.
97
+
98
+ Args:
99
+ endpoint: API endpoint path
100
+ response_model: Pydantic model class or List[Model] for response
101
+ json_data: JSON request body
102
+ params: Query parameters
103
+ wrap_response: Whether response is wrapped in 'data' field
104
+
105
+ Returns:
106
+ Parsed response object or list of objects
107
+ """
108
+ logger.debug(f"Request body: {json_data}")
109
+ response = requests.put(
110
+ url=f"{self._base_url}{endpoint}",
111
+ headers=self._get_headers(),
112
+ json=json_data,
113
+ params=params,
114
+ verify=self._verify_ssl,
115
+ )
116
+
117
+ if response_model:
118
+ return self._parse_response(response, response_model, wrap_response)
119
+
120
+ return response
121
+
122
+ @log_request
123
+ def delete(
124
+ self,
125
+ endpoint: str,
126
+ ) -> requests.Response:
127
+ """Makes a DELETE request and parses the response.
128
+
129
+ Args:
130
+ endpoint: API endpoint path
131
+
132
+ Returns:
133
+ response object
134
+ """
135
+ response = requests.delete(
136
+ url=f"{self._base_url}{endpoint}",
137
+ headers=self._get_headers(),
138
+ verify=self._verify_ssl,
139
+ )
140
+
141
+ return response
@@ -7,8 +7,12 @@ from codemie_sdk.models.integration import (
7
7
  IntegrationType,
8
8
  IntegrationTestRequest,
9
9
  )
10
- from tests import PROJECT
11
- from tests.utils.base_utils import BaseUtils, wait_for_entity, get_random_name
10
+ from codemie_test_harness.tests import PROJECT
11
+ from codemie_test_harness.tests.utils.base_utils import (
12
+ BaseUtils,
13
+ wait_for_entity,
14
+ get_random_name,
15
+ )
12
16
 
13
17
 
14
18
  class IntegrationUtils(BaseUtils):
@@ -3,7 +3,7 @@ from typing import Optional
3
3
 
4
4
  import requests
5
5
 
6
- from tests import AwsParameterStore
6
+ from codemie_test_harness.tests import AwsParameterStore
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
9
 
@@ -0,0 +1,178 @@
1
+ import json
2
+ import logging
3
+ import os
4
+ from typing import Optional, Dict, Any
5
+
6
+ import requests
7
+ from codemie_sdk import CodeMieClient
8
+
9
+ from tests import autotest_entity_prefix
10
+ from tests.utils import api_domain, verify_ssl
11
+ from tests.utils.base_utils import (
12
+ BaseUtils,
13
+ get_random_name,
14
+ )
15
+ from tests.utils.http_utils import RequestHandler
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+ providers_endpoint = "/v1/providers"
20
+
21
+
22
+ class ProviderUtils(BaseUtils):
23
+ def __init__(self, client: CodeMieClient):
24
+ """Initialize the provides service."""
25
+
26
+ super().__init__(client)
27
+ self._api = RequestHandler(api_domain, self.client.token, verify_ssl)
28
+
29
+ @staticmethod
30
+ def provider_request_json():
31
+ """Load provider request JSON from file."""
32
+ payload_path = os.path.join(
33
+ os.path.dirname(__file__), "../test_data/files/provider_payload.json"
34
+ )
35
+ with open(payload_path, "r") as pyload_file:
36
+ request_json = json.load(pyload_file)
37
+
38
+ return request_json
39
+
40
+ def send_post_request_to_providers_endpoint(
41
+ self, request: Dict[str, Any]
42
+ ) -> requests.Response:
43
+ """
44
+ Send request to provider creation endpoint without raising error for response status codes.
45
+
46
+ Args:
47
+ request: The provider creation request
48
+
49
+ Returns:
50
+ Raw response from '/v1/providers' endpoint
51
+ """
52
+ return self._api.post(providers_endpoint, json_data=request, stream=True)
53
+
54
+ def send_get_request_to_providers_endpoint(
55
+ self,
56
+ ) -> requests.Response:
57
+ """
58
+ Send request to get providers endpoint.
59
+
60
+ Returns:
61
+ Raw response from '/v1/providers' endpoint
62
+ """
63
+ return self._api.get(providers_endpoint)
64
+
65
+ def send_get_request_datasource_schemas_endpoint(
66
+ self,
67
+ ) -> requests.Response:
68
+ """
69
+ Send request to get datasource_schemas endpoint.
70
+
71
+ Returns:
72
+ Raw response from '/v1/providers/datasource_schemas' endpoint
73
+ """
74
+ return self._api.get(f"{providers_endpoint}/datasource_schemas")
75
+
76
+ def create_provider(
77
+ self,
78
+ ) -> str:
79
+ """
80
+ Creates a provider for test.
81
+
82
+ Returns:
83
+ Created provider id
84
+ """
85
+ request_json = self.provider_request_json()
86
+ # Ensure unique provider name to avoid conflicts
87
+ request_json["name"] = get_random_name()
88
+
89
+ response = self.send_post_request_to_providers_endpoint(request_json)
90
+
91
+ return response.json()["id"]
92
+
93
+ def list_providers(
94
+ self,
95
+ ) -> requests.Response:
96
+ """
97
+ List all providers.
98
+
99
+ Returns:
100
+ List of provider objects
101
+ """
102
+ response = self.send_get_request_to_providers_endpoint()
103
+
104
+ return response
105
+
106
+ def get_provider_by_id(self, provider_id: str) -> requests.Response:
107
+ """
108
+ Get a specific provider by ID.
109
+
110
+ Args:
111
+ provider_id: The provider ID
112
+
113
+ Returns:
114
+ Provider object
115
+ """
116
+ response = self._api.get(f"{providers_endpoint}/{provider_id}")
117
+
118
+ return response
119
+
120
+ def update_provider(
121
+ self,
122
+ provider_id: str,
123
+ provider_update_payload: dict,
124
+ ) -> requests.Response:
125
+ """
126
+ Update an existing provider.
127
+
128
+ Args:
129
+ provider_id: The provider ID to update
130
+ provider_update_payload: request body
131
+
132
+ Returns:
133
+ Updated provider object
134
+ """
135
+ endpoint = f"{providers_endpoint}/{provider_id}"
136
+
137
+ return self._api.put(endpoint, json_data=provider_update_payload)
138
+
139
+ def send_delete_provider_request(self, provider_id: str) -> requests.Response:
140
+ """
141
+ Delete a provider by ID.
142
+
143
+ Args:
144
+ provider_id: The provider ID to delete
145
+
146
+ Returns:
147
+ Response from delete operation
148
+ """
149
+ return self._api.delete(f"{providers_endpoint}/{provider_id}")
150
+
151
+ def cleanup_test_providers(self, name_prefix: Optional[str] = None):
152
+ """
153
+ Clean up test providers (those with autotest prefix or specified prefix).
154
+
155
+ Args:
156
+ name_prefix: Prefix to match for cleanup (uses autotest prefix if None)
157
+ """
158
+
159
+ prefix = name_prefix if name_prefix else autotest_entity_prefix
160
+
161
+ try:
162
+ providers = self.list_providers()
163
+ test_providers = [
164
+ provider
165
+ for provider in providers.json()
166
+ if provider["name"].startswith(prefix)
167
+ ]
168
+
169
+ for provider in test_providers:
170
+ try:
171
+ self.send_delete_provider_request(provider["id"])
172
+ except Exception as e:
173
+ # Log but don't fail cleanup for individual provider
174
+ logger.error(f"Failed to delete provider {provider['name']}: {e}")
175
+
176
+ except Exception as e:
177
+ # Log but don't fail if cleanup encounters issues
178
+ logger.error(f"Provider cleanup encountered an error: {e}")
@@ -1,5 +1,5 @@
1
1
  from codemie_sdk.models.integration import IntegrationType
2
- from tests.utils.base_utils import BaseUtils
2
+ from codemie_test_harness.tests.utils.base_utils import BaseUtils
3
3
 
4
4
 
5
5
  class SearchUtils(BaseUtils):
@@ -1,7 +1,11 @@
1
1
  from codemie_sdk import CodeMieClient
2
2
  from hamcrest import assert_that, greater_than_or_equal_to
3
3
 
4
- from tests.utils.base_utils import wait_for_entity, wait_for_completion, clean_json
4
+ from codemie_test_harness.tests.utils.base_utils import (
5
+ wait_for_entity,
6
+ wait_for_completion,
7
+ clean_json,
8
+ )
5
9
 
6
10
 
7
11
  class SimilarityCheck:
@@ -5,15 +5,15 @@ from codemie_sdk.models.workflow import (
5
5
  WorkflowUpdateRequest,
6
6
  WorkflowMode,
7
7
  )
8
- from tests import PROJECT
9
- from tests.utils import api_domain, verify_ssl
10
- from tests.utils.base_utils import (
8
+ from codemie_test_harness.tests import PROJECT
9
+ from codemie_test_harness.tests.utils import api_domain, verify_ssl
10
+ from codemie_test_harness.tests.utils.base_utils import (
11
11
  BaseUtils,
12
12
  get_random_name,
13
13
  wait_for_entity,
14
14
  wait_for_completion,
15
15
  )
16
- from tests.utils.http_utils import RequestHandler
16
+ from codemie_test_harness.tests.utils.http_utils import RequestHandler
17
17
 
18
18
  workflow_endpoint = "/v1/workflows"
19
19
 
@@ -1,7 +1,7 @@
1
1
  import pytest
2
2
 
3
- from tests.enums.tools import AzureDevOpsTestPlanTool, Toolkit
4
- from tests.test_data.ado_test_plan_tools_test_data import (
3
+ from codemie_test_harness.tests.enums.tools import AzureDevOpsTestPlanTool, Toolkit
4
+ from codemie_test_harness.tests.test_data.ado_test_plan_tools_test_data import (
5
5
  ado_test_plan_get_test_data,
6
6
  ADO_TEST_PLAN_CREATE_TEST_PLAN,
7
7
  ADO_TEST_PLAN_CREATE_SUITE,
@@ -9,9 +9,9 @@ from tests.test_data.ado_test_plan_tools_test_data import (
9
9
  ADO_TEST_PLAN_DELETE_SUITE,
10
10
  ADO_TEST_PLAN_DELETE_PLAN,
11
11
  )
12
- from tests.utils.base_utils import get_random_name
13
- from tests.utils.constants import ID_PATTERN
14
- from tests.utils.json_utils import extract_id_from_ado_response
12
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
13
+ from codemie_test_harness.tests.utils.constants import ID_PATTERN
14
+ from codemie_test_harness.tests.utils.json_utils import extract_id_from_ado_response
15
15
 
16
16
 
17
17
  @pytest.mark.regression
@@ -1,14 +1,14 @@
1
1
  import pytest
2
2
 
3
- from tests.enums.tools import AzureDevOpsWikiTool, Toolkit
4
- from tests.test_data.ado_wiki_tools_test_data import (
3
+ from codemie_test_harness.tests.enums.tools import AzureDevOpsWikiTool, Toolkit
4
+ from codemie_test_harness.tests.test_data.ado_wiki_tools_test_data import (
5
5
  ado_wiki_get_test_data,
6
6
  ADO_WIKI_CREATE_PAGE,
7
7
  ADO_WIKI_RENAME_PAGE,
8
8
  ADO_WIKI_MODIFY_PAGE,
9
9
  ADO_WIKI_DELETE_PAGE,
10
10
  )
11
- from tests.utils.base_utils import get_random_name
11
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
12
12
 
13
13
 
14
14
  @pytest.mark.regression
@@ -1,15 +1,15 @@
1
1
  import pytest
2
2
 
3
- from tests.enums.tools import AzureDevOpsWorkItemTool, Toolkit
4
- from tests.test_data.ado_work_item_tools_test_data import (
3
+ from codemie_test_harness.tests.enums.tools import AzureDevOpsWorkItemTool, Toolkit
4
+ from codemie_test_harness.tests.test_data.ado_work_item_tools_test_data import (
5
5
  ado_work_item_get_test_data,
6
6
  ADO_WORK_ITEM_CREATE,
7
7
  ADO_WORK_ITEM_UPDATE,
8
8
  ADO_WORK_ITEM_LINK,
9
9
  )
10
- from tests.utils.base_utils import get_random_name
11
- from tests.utils.constants import WORK_ITEM_ID_PATTERN
12
- from tests.utils.json_utils import extract_id_from_ado_response
10
+ from codemie_test_harness.tests.utils.base_utils import get_random_name
11
+ from codemie_test_harness.tests.utils.constants import WORK_ITEM_ID_PATTERN
12
+ from codemie_test_harness.tests.utils.json_utils import extract_id_from_ado_response
13
13
 
14
14
 
15
15
  @pytest.mark.regression
@@ -1,7 +1,7 @@
1
1
  import pytest
2
2
 
3
- from tests.enums.tools import Toolkit, CloudTool
4
- from tests.test_data.cloud_tools_test_data import cloud_test_data
3
+ from codemie_test_harness.tests.enums.tools import Toolkit, CloudTool
4
+ from codemie_test_harness.tests.test_data.cloud_tools_test_data import cloud_test_data
5
5
 
6
6
 
7
7
  @pytest.mark.regression