codemie-test-harness 0.1.168__py3-none-any.whl → 0.1.170__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 (22) hide show
  1. codemie_test_harness/cli/cli.py +18 -74
  2. codemie_test_harness/cli/commands/assistant_cmd.py +104 -0
  3. codemie_test_harness/cli/commands/config_cmd.py +610 -20
  4. codemie_test_harness/cli/commands/workflow_cmd.py +64 -0
  5. codemie_test_harness/cli/constants.py +385 -6
  6. codemie_test_harness/cli/utils.py +9 -0
  7. codemie_test_harness/tests/test_data/assistant_test_data.py +197 -0
  8. codemie_test_harness/tests/test_data/project_management_test_data.py +1 -1
  9. codemie_test_harness/tests/ui/assistants/__init__.py +0 -0
  10. codemie_test_harness/tests/ui/assistants/test_create_assistant.py +408 -0
  11. codemie_test_harness/tests/ui/conftest.py +23 -3
  12. codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py +3 -4
  13. codemie_test_harness/tests/ui/pageobject/assistants/create_assistant_page.py +689 -0
  14. codemie_test_harness/tests/ui/pageobject/assistants/generate_with_ai_modal.py +367 -0
  15. codemie_test_harness/tests/ui/pageobject/base_page.py +2 -2
  16. codemie_test_harness/tests/ui/pytest.ini +18 -0
  17. codemie_test_harness/tests/ui/workflows/test_workflows.py +1 -1
  18. codemie_test_harness/tests/utils/credentials_manager.py +0 -15
  19. {codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/METADATA +2 -2
  20. {codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/RECORD +22 -14
  21. {codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/WHEEL +0 -0
  22. {codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,367 @@
1
+ import logging
2
+
3
+ from playwright.sync_api import Page, expect
4
+
5
+ logger = logging.getLogger(__name__)
6
+
7
+
8
+ class AIAssistantGeneratorPage:
9
+ """
10
+ Page Object Model for the Generate Assistant with AI form.
11
+
12
+ This form allows users to create AI assistants by describing their requirements
13
+ and configuring various options including tool integrations.
14
+ """
15
+
16
+ def __init__(self, page: Page):
17
+ """
18
+ Initialize the AI Assistant Generator page object.
19
+
20
+ Args:
21
+ page: Playwright page instance
22
+ """
23
+ self.page = page
24
+ self._setup_locators()
25
+
26
+ def _setup_locators(self) -> None:
27
+ """Define all locators for the AI Assistant Generator form based on actual HTML structure."""
28
+
29
+ # Modal container
30
+ self.modal_container = self.page.locator(".popup").filter(
31
+ has_text="Generate Assistant with AI"
32
+ )
33
+
34
+ # Header elements
35
+ self.modal_header = self.modal_container.locator(".popup-header.withBorder")
36
+ self.modal_title = self.modal_header.locator("h4")
37
+ self.close_button = self.modal_header.locator(
38
+ 'button[aria-label="Close popup"]'
39
+ )
40
+
41
+ # Modal body
42
+ self.modal_body = self.modal_container.locator(".popup-body")
43
+
44
+ # Description elements - Updated based on actual structure
45
+ self.description_text = self.modal_body.locator("p").first
46
+ self.assistant_description_label = self.modal_body.locator("p").nth(1)
47
+
48
+ # Main textarea - Updated with actual name attribute
49
+ self.assistant_description_textarea = (
50
+ self.modal_body.locator('textarea[name="ai_generation_prompt"]')
51
+ .or_(self.modal_body.locator(".textarea-wrapper textarea"))
52
+ .or_(self.modal_body.locator("textarea.textarea"))
53
+ )
54
+
55
+ # Checkbox elements - Updated with actual IDs
56
+ self.do_not_show_checkbox = (
57
+ self.modal_body.locator('input#dont_show[type="checkbox"]')
58
+ .or_(self.modal_body.locator('input[name="dont_show"]'))
59
+ .or_(self.modal_body.locator('.p-checkbox input[type="checkbox"]'))
60
+ )
61
+ self.do_not_show_label = self.modal_body.locator('label[for="dont_show"]')
62
+
63
+ # Include tools toggle - Updated with actual ID
64
+ self.include_tools_toggle = (
65
+ self.modal_body.locator('input#include_tools[type="checkbox"]')
66
+ .or_(self.modal_body.locator('input[name="include_tools"]'))
67
+ .or_(self.modal_body.locator('.switch-wrapper input[type="checkbox"]'))
68
+ )
69
+ self.include_tools_label = self.modal_body.locator(".switch-wrapper .label")
70
+
71
+ # Action buttons - Updated based on actual button classes
72
+ self.create_manually_button = (
73
+ self.modal_body.locator(
74
+ 'button.button.secondary:has-text("Create Manualy")'
75
+ )
76
+ .or_(self.modal_body.locator('button:has-text("Create Manualy")'))
77
+ .or_(self.modal_body.locator(".button.secondary"))
78
+ )
79
+ self.generate_with_ai_button = (
80
+ self.modal_body.locator(
81
+ 'button.button.primary:has-text("Generate with AI")'
82
+ )
83
+ .or_(self.modal_body.locator('button:has-text("Generate with AI")'))
84
+ .or_(self.modal_body.locator(".button.primary"))
85
+ )
86
+
87
+ # Note text - Updated based on actual structure
88
+ self.integration_note = self.modal_body.locator(".text-text-secondary.text-xs")
89
+ self.info_icon = self.modal_body.locator(".flex.w-full.px-2 svg").first
90
+
91
+ # Navigation and state methods
92
+
93
+ def wait_for_modal_to_load(self, timeout: float = 10000) -> None:
94
+ """
95
+ Wait for the AI Assistant Generator modal to be fully loaded and visible.
96
+
97
+ Args:
98
+ timeout: Maximum time to wait in milliseconds
99
+ """
100
+ logger.info("Waiting for AI Assistant Generator modal to load")
101
+ expect(self.modal_container).to_be_visible(timeout=timeout)
102
+ expect(self.modal_title).to_be_visible()
103
+ expect(self.assistant_description_textarea).to_be_visible()
104
+ logger.info("AI Assistant Generator modal loaded successfully")
105
+
106
+ def is_modal_visible(self) -> bool:
107
+ """
108
+ Check if the AI Assistant Generator modal is currently visible.
109
+
110
+ Returns:
111
+ True if modal is visible, False otherwise
112
+ """
113
+ return self.modal_container.is_visible()
114
+
115
+ def close_modal(self) -> None:
116
+ """Close the AI Assistant Generator modal using the close button."""
117
+ logger.info("Closing AI Assistant Generator modal")
118
+ self.close_button.click()
119
+ expect(self.modal_container).not_to_be_visible()
120
+ logger.info("AI Assistant Generator modal closed successfully")
121
+
122
+ # Form interaction methods
123
+
124
+ def enter_assistant_description(self, description: str) -> None:
125
+ """
126
+ Enter description text in the assistant description textarea.
127
+
128
+ Args:
129
+ description: The assistant description text to enter
130
+ """
131
+ logger.info(f"Entering assistant description: {description[:50]}...")
132
+ self.assistant_description_textarea.click()
133
+ self.assistant_description_textarea.clear()
134
+ self.assistant_description_textarea.fill(description)
135
+
136
+ # Verify the text was entered correctly
137
+ expect(self.assistant_description_textarea).to_have_value(description)
138
+ logger.info("Assistant description entered successfully")
139
+
140
+ def get_assistant_description(self) -> str:
141
+ """
142
+ Get the current value of the assistant description textarea.
143
+
144
+ Returns:
145
+ Current text value in the description textarea
146
+ """
147
+ return self.assistant_description_textarea.input_value()
148
+
149
+ def toggle_do_not_show_popup(self, enabled: bool = True) -> None:
150
+ """
151
+ Toggle the "Do not show this popup" checkbox.
152
+
153
+ Args:
154
+ enabled: True to check the checkbox, False to uncheck
155
+ """
156
+ logger.info(f"Setting 'Do not show popup' to: {enabled}")
157
+
158
+ if enabled and not self.do_not_show_checkbox.is_checked():
159
+ self.do_not_show_checkbox.check()
160
+ elif not enabled and self.do_not_show_checkbox.is_checked():
161
+ self.do_not_show_checkbox.uncheck()
162
+
163
+ # Verify the state
164
+ if enabled:
165
+ expect(self.do_not_show_checkbox).to_be_checked()
166
+ else:
167
+ expect(self.do_not_show_checkbox).not_to_be_checked()
168
+
169
+ logger.info(f"'Do not show popup' checkbox set to: {enabled}")
170
+
171
+ def is_do_not_show_popup_checked(self) -> bool:
172
+ """
173
+ Check if the "Do not show this popup" checkbox is checked.
174
+
175
+ Returns:
176
+ True if checkbox is checked, False otherwise
177
+ """
178
+ return self.do_not_show_checkbox.is_checked()
179
+
180
+ def toggle_include_tools(self, enabled: bool = True) -> None:
181
+ """
182
+ Toggle the "Include Tools" option.
183
+
184
+ Args:
185
+ enabled: True to enable tools inclusion, False to disable
186
+ """
187
+ logger.info(f"Setting 'Include Tools' to: {enabled}")
188
+
189
+ if enabled and not self.include_tools_toggle.is_checked():
190
+ self.include_tools_toggle.check()
191
+ elif not enabled and self.include_tools_toggle.is_checked():
192
+ self.include_tools_toggle.uncheck()
193
+
194
+ # Verify the state
195
+ if enabled:
196
+ expect(self.include_tools_toggle).to_be_checked()
197
+ else:
198
+ expect(self.include_tools_toggle).not_to_be_checked()
199
+
200
+ logger.info(f"'Include Tools' toggle set to: {enabled}")
201
+
202
+ def is_include_tools_enabled(self) -> bool:
203
+ """
204
+ Check if the "Include Tools" toggle is enabled.
205
+
206
+ Returns:
207
+ True if toggle is enabled, False otherwise
208
+ """
209
+ return self.include_tools_toggle.is_checked()
210
+
211
+ # Action methods
212
+
213
+ def click_create_manually(self) -> None:
214
+ """Click the 'Create Manually' button."""
215
+ logger.info("Clicking 'Create Manually' button")
216
+ expect(self.create_manually_button).to_be_enabled()
217
+ self.create_manually_button.click()
218
+ logger.info("'Create Manually' button clicked")
219
+
220
+ def click_generate_with_ai(self) -> None:
221
+ """Click the 'Generate with AI' button."""
222
+ logger.info("Clicking 'Generate with AI' button")
223
+ expect(self.generate_with_ai_button).to_be_enabled()
224
+ self.generate_with_ai_button.click()
225
+ logger.info("'Generate with AI' button clicked")
226
+
227
+ # Validation methods
228
+
229
+ def is_generate_button_enabled(self) -> bool:
230
+ """
231
+ Check if the 'Generate with AI' button is enabled.
232
+
233
+ Returns:
234
+ True if button is enabled, False otherwise
235
+ """
236
+ return self.generate_with_ai_button.is_enabled()
237
+
238
+ def is_create_manually_button_enabled(self) -> bool:
239
+ """
240
+ Check if the 'Create Manually' button is enabled.
241
+
242
+ Returns:
243
+ True if button is enabled, False otherwise
244
+ """
245
+ return self.create_manually_button.is_enabled()
246
+
247
+ def validate_form_elements_visible(self) -> None:
248
+ """Validate that all expected form elements are visible and accessible."""
249
+ logger.info("Validating AI Assistant Generator form elements visibility")
250
+
251
+ # Check modal structure
252
+ expect(self.modal_container).to_be_visible()
253
+ expect(self.modal_title).to_be_visible()
254
+ expect(self.close_button).to_be_visible()
255
+
256
+ # Check form elements
257
+ expect(self.assistant_description_label).to_be_visible()
258
+ expect(self.assistant_description_textarea).to_be_visible()
259
+ expect(self.do_not_show_label).to_be_visible()
260
+ expect(self.do_not_show_checkbox).to_be_visible()
261
+ expect(self.include_tools_label).to_be_visible()
262
+ expect(self.include_tools_toggle).to_be_visible()
263
+
264
+ # Check action buttons
265
+ expect(self.create_manually_button).to_be_visible()
266
+ expect(self.generate_with_ai_button).to_be_visible()
267
+
268
+ # Check note text
269
+ expect(self.integration_note).to_be_visible()
270
+
271
+ logger.info("All form elements are visible and accessible")
272
+
273
+ def validate_textarea_placeholder(self) -> None:
274
+ """Validate that the textarea has the expected placeholder text."""
275
+ placeholder_text = self.assistant_description_textarea.get_attribute(
276
+ "placeholder"
277
+ )
278
+ expected_text = "For example: I need a project assistant that helps track deadlines, work with Jira and help with business requirements"
279
+
280
+ assert expected_text in placeholder_text, (
281
+ f"Placeholder text mismatch. Expected: {expected_text}, Got: {placeholder_text}"
282
+ )
283
+ logger.info("Textarea placeholder validation passed")
284
+
285
+ def verify_modal_title(self) -> None:
286
+ """Verify the modal has the correct title."""
287
+ expect(self.modal_title).to_have_text("Generate Assistant with AI")
288
+ logger.info("Modal title verification passed")
289
+
290
+ def verify_description_text(self) -> None:
291
+ """Verify the main description text is present."""
292
+ expect(self.description_text).to_contain_text("Describe your ideal assistant")
293
+ logger.info("Description text verification passed")
294
+
295
+ def verify_prompt_label(self) -> None:
296
+ """Verify the prompt question is displayed."""
297
+ expect(self.assistant_description_label).to_have_text(
298
+ "What should your assistant do?"
299
+ )
300
+ logger.info("Prompt label verification passed")
301
+
302
+ def verify_note_text(self) -> None:
303
+ """Verify the note about tool integrations."""
304
+ expect(self.integration_note).to_contain_text(
305
+ "Note: Please select tool integrations after generation"
306
+ )
307
+ logger.info("Note text verification passed")
308
+
309
+ # Composite action methods
310
+
311
+ def fill_and_generate_assistant(
312
+ self,
313
+ description: str,
314
+ include_tools: bool = True,
315
+ do_not_show_again: bool = False,
316
+ ) -> None:
317
+ """
318
+ Complete workflow to fill the form and generate an AI assistant.
319
+
320
+ Args:
321
+ description: Assistant description text
322
+ include_tools: Whether to include tools in the assistant
323
+ do_not_show_again: Whether to check "do not show popup" option
324
+ """
325
+ logger.info("Starting complete assistant generation workflow")
326
+
327
+ # Wait for modal to be ready
328
+ self.wait_for_modal_to_load()
329
+
330
+ # Fill form fields
331
+ self.enter_assistant_description(description)
332
+ self.toggle_include_tools(include_tools)
333
+ self.toggle_do_not_show_popup(do_not_show_again)
334
+
335
+ # Generate the assistant
336
+ self.click_generate_with_ai()
337
+
338
+ logger.info("Assistant generation workflow completed")
339
+
340
+ def fill_and_create_manually(
341
+ self,
342
+ description: str,
343
+ include_tools: bool = True,
344
+ do_not_show_again: bool = False,
345
+ ) -> None:
346
+ """
347
+ Complete workflow to fill the form and create assistant manually.
348
+
349
+ Args:
350
+ description: Assistant description text
351
+ include_tools: Whether to include tools in the assistant
352
+ do_not_show_again: Whether to check "do not show popup" option
353
+ """
354
+ logger.info("Starting manual assistant creation workflow")
355
+
356
+ # Wait for modal to be ready
357
+ self.wait_for_modal_to_load()
358
+
359
+ # Fill form fields
360
+ self.enter_assistant_description(description)
361
+ self.toggle_include_tools(include_tools)
362
+ self.toggle_do_not_show_popup(do_not_show_again)
363
+
364
+ # Create manually
365
+ self.click_create_manually()
366
+
367
+ logger.info("Manual assistant creation workflow completed")
@@ -3,8 +3,8 @@ import re
3
3
  from playwright.sync_api import expect
4
4
  from reportportal_client import step
5
5
 
6
- from codemie_test_harness.tests.ui.pageobject.components.pop_up import PopUp
7
6
  from codemie_test_harness.tests.ui.pageobject.components.menu import Menu
7
+ from codemie_test_harness.tests.ui.pageobject.components.pop_up import PopUp
8
8
 
9
9
 
10
10
  class BasePage:
@@ -167,7 +167,7 @@ class BasePage:
167
167
  expect(self.pop_up.menu).to_have_text("New CodeMie Release")
168
168
  expect(self.pop_up.body).to_have_text(
169
169
  re.compile(
170
- r"Great news! We've rolled out new CodeMie version 2.\d.\d+ to enhance your experience. Take a moment to "
170
+ r"Great news! We've rolled out new CodeMie version \d.\d.\d+ to enhance your experience. Take a moment to "
171
171
  "explore what's new and discover how these changes can benefit you! Please review Release Notes!"
172
172
  )
173
173
  )
@@ -0,0 +1,18 @@
1
+ [pytest]
2
+ addopts = -v --tb=short
3
+ markers =
4
+ ui: UI test cases
5
+ assistant_ui: Assistant-related UI test cases
6
+ workflow_ui: Workflow-related UI test cases
7
+ slow: Slow-running test cases
8
+ critical: Critical path test cases
9
+ smoke: Smoke test cases
10
+ filterwarnings =
11
+ ignore::pytest.PytestUnknownMarkWarning
12
+ ignore::urllib3.exceptions.InsecureRequestWarning
13
+ ignore::pydantic.warnings.PydanticDeprecatedSince20
14
+ ignore::DeprecationWarning
15
+ testpaths = .
16
+ python_files = test_*.py
17
+ python_classes = Test*
18
+ python_functions = test_*
@@ -3,7 +3,7 @@ from codemie_test_harness.tests.ui.pageobject.workflows.workflows_page import (
3
3
  WorkflowsPage,
4
4
  )
5
5
  from codemie_test_harness.tests.utils.base_utils import get_random_name
6
- from tests import TEST_USER
6
+ from codemie_test_harness.tests import TEST_USER
7
7
 
8
8
 
9
9
  @pytest.mark.workflow_ui
@@ -183,21 +183,6 @@ class CredentialsManager:
183
183
  "aws_path": "subscription_id",
184
184
  },
185
185
  # === GCP CREDENTIALS ===
186
- "GCP_PROJECT_ID": {
187
- "env": "GCP_PROJECT_ID",
188
- "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
189
- "aws_path": "projectId",
190
- },
191
- "GCP_CLIENT_EMAIL": {
192
- "env": "GCP_CLIENT_EMAIL",
193
- "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
194
- "aws_path": "clientEmail",
195
- },
196
- "GCP_PRIVATE_KEY": {
197
- "env": "GCP_PRIVATE_KEY",
198
- "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
199
- "aws_path": "privateKey",
200
- },
201
186
  "GCP_SA_KEY_BASE64": {
202
187
  "env": "GCP_SA_KEY_BASE64",
203
188
  "aws_param": f"{INTEGRATIONS_PARAMETER_PATH}gcp",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: codemie-test-harness
3
- Version: 0.1.168
3
+ Version: 0.1.170
4
4
  Summary: Autotest for CodeMie backend and UI
5
5
  Author: Anton Yeromin
6
6
  Author-email: anton_yeromin@epam.com
@@ -13,7 +13,7 @@ Requires-Dist: aws-assume-role-lib (>=2.10.0,<3.0.0)
13
13
  Requires-Dist: boto3 (>=1.39.8,<2.0.0)
14
14
  Requires-Dist: click (>=8.1.7,<9.0.0)
15
15
  Requires-Dist: codemie-plugins (>=0.1.123,<0.2.0)
16
- Requires-Dist: codemie-sdk-python (==0.1.168)
16
+ Requires-Dist: codemie-sdk-python (==0.1.170)
17
17
  Requires-Dist: pytest (>=8.4.1,<9.0.0)
18
18
  Requires-Dist: pytest-playwright (>=0.7.0,<0.8.0)
19
19
  Requires-Dist: pytest-reportportal (>=5.5.2,<6.0.0)
@@ -1,13 +1,15 @@
1
1
  codemie_test_harness/.env,sha256=qwCZaT0wIqswimUpuny4SfHOG6FsLClAAtjddztA3GQ,177
2
2
  codemie_test_harness/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  codemie_test_harness/cli/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
4
- codemie_test_harness/cli/cli.py,sha256=KayyiNCsfF1dFunqOEwC_DM3c5GWl8E9rx-_Tw5TMwA,5969
4
+ codemie_test_harness/cli/cli.py,sha256=xLYYc8yIZ_6YNccWt5eNNy_-Xcnv3BJP27BTZ63LvxE,4160
5
5
  codemie_test_harness/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- codemie_test_harness/cli/commands/config_cmd.py,sha256=iCV7qJZrESIKZQdg_AmhuPz1EZLN2s-UpbdzzIjrVEU,1353
6
+ codemie_test_harness/cli/commands/assistant_cmd.py,sha256=LuAWMFuZPYdP51dNcqjalur8CHobkSVlt49f97cgJEg,3076
7
+ codemie_test_harness/cli/commands/config_cmd.py,sha256=fmeU3TYmjtbpsbfyEuOmjHDi502xAw4Pc5tWdSfeyVY,22477
7
8
  codemie_test_harness/cli/commands/run_cmd.py,sha256=T5js1hwHKi1QuF-kLwP3c-GMtiO9QO15H3JJc7nzpp4,1052
8
- codemie_test_harness/cli/constants.py,sha256=956_apPJ4MjhnKo1ZtDooXCd2N89J3vyAB-J9-SOr7U,1637
9
+ codemie_test_harness/cli/commands/workflow_cmd.py,sha256=QwT_6DAyjeWBZiamvGuBBi6JKh9Cu-wS756xClWmpzI,1784
10
+ codemie_test_harness/cli/constants.py,sha256=ktce9RjSa3YcsXH4fISbIDhfbek3bVJ5FuWdIcEZsdI,12459
9
11
  codemie_test_harness/cli/runner.py,sha256=5VAL4noqiKrGjo5oYVJKzt4QNmkZFTe1Mw6Mll9uGfc,2349
10
- codemie_test_harness/cli/utils.py,sha256=NlRa8VFbXTbD74jfUaSqbccGNu2R1dUIg8d5SyDTmIM,1136
12
+ codemie_test_harness/cli/utils.py,sha256=CcF3Ww4Aphbh8V3dlUH96-GkL7ccSVCmqra9Yqo5hXE,1304
11
13
  codemie_test_harness/pytest.ini,sha256=Tqi0sGis9Dwhg6Y0OEEx-S8aXRONezUUXsWt6fdjEnA,223
12
14
  codemie_test_harness/tests/__init__.py,sha256=CX5mbH_1RzwetK14moYQ0KCoUBPQMGkI14Fg8tAUJ0A,782
13
15
  codemie_test_harness/tests/assistant/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -101,6 +103,7 @@ codemie_test_harness/tests/test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
101
103
  codemie_test_harness/tests/test_data/ado_test_plan_tools_test_data.py,sha256=Al5u4HNfrcoj-b072uEGsqUqjKqwXLGJXKQ0QeJT3PI,5778
102
104
  codemie_test_harness/tests/test_data/ado_wiki_tools_test_data.py,sha256=xvgEja5vE0l41sP4fE0stdFLQ0M201FWynOCEcRYufE,3188
103
105
  codemie_test_harness/tests/test_data/ado_work_item_tools_test_data.py,sha256=MHou6QGjufyX5t1oexnq2Y4UCjlE17eeyMuIz6Ml62s,5693
106
+ codemie_test_harness/tests/test_data/assistant_test_data.py,sha256=DRfungbLNwbFQf6qTNOVjR3l2v7fBDzgUq1v9fwXw78,6829
104
107
  codemie_test_harness/tests/test_data/cloud_tools_test_data.py,sha256=SWz-VTNcWteCvVupl2xksv4eEFkmtWMdRIqrZxjpFYk,6200
105
108
  codemie_test_harness/tests/test_data/codebase_tools_test_data.py,sha256=xbnIlDbiZTibGekrodmhO7bOg7kilsoKSlfHAhcmyIQ,3312
106
109
  codemie_test_harness/tests/test_data/data_management_tools_test_data.py,sha256=e5Cfqza3GUE3hRElm1bxgQO4PaN-jOiNd38OX9299Kc,2793
@@ -153,7 +156,7 @@ codemie_test_harness/tests/test_data/openapi.json,sha256=X4uqtfjpTUuMifefQRf8mHI
153
156
  codemie_test_harness/tests/test_data/output_schema_test_data.py,sha256=4l7AvXbMl9hIvoFxu1LPPSGz9hb5Uz2_is4zTm77ARY,261
154
157
  codemie_test_harness/tests/test_data/plugin_tools_test_data.py,sha256=bVamztyQ4bAVo1CRSrtu6f5H-gkjhAN2nq5Jbc0erqM,4168
155
158
  codemie_test_harness/tests/test_data/pm_tools_test_data.py,sha256=ctPwLSJYy7xPg4B-uwAAhRwIogdxTgBn-PPY2rN0llc,3248
156
- codemie_test_harness/tests/test_data/project_management_test_data.py,sha256=Sd5MEO0hnUeyF-WIIGW4qEAHR5hvhJcs0DE1ytqdveM,1692
159
+ codemie_test_harness/tests/test_data/project_management_test_data.py,sha256=oBOh18LbXKntdsifoktc-d-3M7Kyl8j0q7qumdHuTYU,1692
157
160
  codemie_test_harness/tests/test_data/report_portal_tools_test_data.py,sha256=P3Z1B1-iNxXAcMIFlb9robhHQSXQtzSRUz59ivvTrG8,13646
158
161
  codemie_test_harness/tests/test_data/research_tools_test_data.py,sha256=FtOhWp7PbRdw36IUIa46OBbE2wy8yKZkpI6uwCfSoXQ,4745
159
162
  codemie_test_harness/tests/test_data/servicenow_tools_test_data.py,sha256=PKw9zEYSNcQM1KApCSjsBiA_3Py0bNQI7clqw8cmT-s,1983
@@ -190,11 +193,15 @@ codemie_test_harness/tests/test_data/workflow/invalid_config/missing_required_to
190
193
  codemie_test_harness/tests/test_data/workflow/invalid_config/missing_required_tools_name.yaml,sha256=Xh6TKSAGZyD2-gCxaW7BRW_9-_7-5EQA75djCc3FwLI,263
191
194
  codemie_test_harness/tests/test_data/workflow_validation_messages.py,sha256=zg5BhMJ_tbzEeLSYJEnspHTuWar1qgoxqTfIXltlSPg,3282
192
195
  codemie_test_harness/tests/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
- codemie_test_harness/tests/ui/conftest.py,sha256=1b8s--q2sAXjqHZKFi075Yqpq-fKLXOMlHHibSHKNrU,2490
196
+ codemie_test_harness/tests/ui/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
197
+ codemie_test_harness/tests/ui/assistants/test_create_assistant.py,sha256=8W7J4y4IVZhnqvoitDhLFCg2ut3NKnErfipULwT-azE,14556
198
+ codemie_test_harness/tests/ui/conftest.py,sha256=7u5eaLozXRzuB_a8NCm92sd5Axefs-UpVEg1mIPQ_r0,3436
194
199
  codemie_test_harness/tests/ui/pageobject/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
200
  codemie_test_harness/tests/ui/pageobject/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
- codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py,sha256=wCg1jLVUl02szz_FGostVaOGe-QFzkE7ClBtD1HOHgg,6038
197
- codemie_test_harness/tests/ui/pageobject/base_page.py,sha256=a4jCnb633jyax2Cws4kJirCO2Y2eqHI_DnPT5XOFK2I,7471
201
+ codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py,sha256=pYUhVRGZhCVX5EILCTkqjvOBPfD9u2qc5Rsa54up5IA,6036
202
+ codemie_test_harness/tests/ui/pageobject/assistants/create_assistant_page.py,sha256=wwn-6vU43NYjbAokZmi6gxBnBApWNapkAkPGjBfjKYI,22502
203
+ codemie_test_harness/tests/ui/pageobject/assistants/generate_with_ai_modal.py,sha256=rsavzWxmawKzI4wHxixp49IN6m_ZUZNFTJTSnE8jBr8,13732
204
+ codemie_test_harness/tests/ui/pageobject/base_page.py,sha256=9sdQe14Oh7p475zswlgXGnM1WXzTB_x6OxlbVtzJ-U0,7472
198
205
  codemie_test_harness/tests/ui/pageobject/components/__init__.py,sha256=6scUFCL2StHbKIoNgGGZdpeDZUwbCrKIH7hwaskAB4E,577
199
206
  codemie_test_harness/tests/ui/pageobject/components/execution_history_row.py,sha256=aGHc5AOpGR0tlfmLQfk8272TN6TWiuiXHUcg6PtB1Iw,6499
200
207
  codemie_test_harness/tests/ui/pageobject/components/menu.py,sha256=llTWAbJHldo1-wY86k_2Dvs8iSEmMWzrw26AhQJ1kis,10501
@@ -214,13 +221,14 @@ codemie_test_harness/tests/ui/pageobject/workflows/workflow_executions_page.py,s
214
221
  codemie_test_harness/tests/ui/pageobject/workflows/workflow_template_details.py,sha256=6Su0yLA8wDybCPVE2WFhV6l6r_38aYaRY0mEYnLHlYg,3556
215
222
  codemie_test_harness/tests/ui/pageobject/workflows/workflow_templates_page.py,sha256=J5jxdZ2aQ9k15ghyRKYACxX2F9NiR6dXYBw0EaYlaN0,2645
216
223
  codemie_test_harness/tests/ui/pageobject/workflows/workflows_page.py,sha256=yqdaSTA4aUeD-8A9Or0OgJZhMr2tDvDWWP_f4uPL5dw,11186
224
+ codemie_test_harness/tests/ui/pytest.ini,sha256=5LM3ib1yTB4jUHrC8Ksas_k8Li6RBuuUTAWCPRx-4MY,554
217
225
  codemie_test_harness/tests/ui/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
218
226
  codemie_test_harness/tests/ui/workflows/test_create_workflow.py,sha256=zX_6-pcYGCLiU6FUAvP-uo3jXy0PEEPBc_eqbP0FLV0,10522
219
227
  codemie_test_harness/tests/ui/workflows/test_edit_workflow.py,sha256=RQIV5fSd3xv3tdGidpF8mMwkoHJ57Xn1HzeXnFq4eB0,12913
220
228
  codemie_test_harness/tests/ui/workflows/test_workflow_details.py,sha256=PCEiclg1o_EfEbWLs7zAtvGmqwceoOJfb3Y-_sTjpqA,15392
221
229
  codemie_test_harness/tests/ui/workflows/test_workflow_executions_page.py,sha256=4E-dPJrXSMiBiE9ZVHW4Ln6H121KbtEUa-vF1KXPGyU,12667
222
230
  codemie_test_harness/tests/ui/workflows/test_workflow_templates.py,sha256=qDHv5z8NrBGsKx0tiK9aft_M9-98k7TY1OSm1FKPV9s,4680
223
- codemie_test_harness/tests/ui/workflows/test_workflows.py,sha256=-tEYwIze1HNztzhx_yJy9xcwHLAnSZj_vU4UzlwUBfg,3820
231
+ codemie_test_harness/tests/ui/workflows/test_workflows.py,sha256=3QBt03AVL5_QoIMrJMPatG1ZblePV2_P3AJwZcBXDX8,3841
224
232
  codemie_test_harness/tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
233
  codemie_test_harness/tests/utils/assistant_utils.py,sha256=jy3dFF4ZiT22Wippl1a5jIEAAyJ71P0ss8AIHPefz6k,6511
226
234
  codemie_test_harness/tests/utils/aws_parameters_store.py,sha256=YAVpvwElkKZJZvzSVxtOue1Gjs-kvSBS2y5QvIlz484,3267
@@ -228,7 +236,7 @@ codemie_test_harness/tests/utils/base_utils.py,sha256=eDUBV7kj4X-aSVOB7YKHfO9fqP
228
236
  codemie_test_harness/tests/utils/client_factory.py,sha256=xGta0ZaVYzWfwJ4cu3f89KkGc_R5Bq-9lqnhr57x_2w,972
229
237
  codemie_test_harness/tests/utils/constants.py,sha256=ZNyM5wERHFN-c8TCvBcxCdFf0As9TOpr22YvLCMHArE,1116
230
238
  codemie_test_harness/tests/utils/conversation_utils.py,sha256=SWj6TBWOQoX5Yh6Wk63yHQFveRXgK1mpLb3PUKAa57A,648
231
- codemie_test_harness/tests/utils/credentials_manager.py,sha256=cRMs68A7x1A-L3X00N_9GFGXK5UnN58aHkWkMfe6IIM,52816
239
+ codemie_test_harness/tests/utils/credentials_manager.py,sha256=oR3HngDhrrsCCbNZ7AAIu-dKq2tcSA0N0eWqZmZPr9E,52282
232
240
  codemie_test_harness/tests/utils/datasource_utils.py,sha256=_jx1IrRR5rmQxXsal5z4nwX9vgupdVdgNL0vH-2nJ8A,12685
233
241
  codemie_test_harness/tests/utils/env_resolver.py,sha256=25776Aq9oIDcDzGtfFs07lj7eldeFgmsocxeS3RUclE,4280
234
242
  codemie_test_harness/tests/utils/env_utils.py,sha256=9tyVgxKfYqdtSoo9dRTScOZWjAUm82_65JjaKggcwCg,3999
@@ -352,7 +360,7 @@ codemie_test_harness/tests/workflow/virtual_assistant_tools/servicenow/__init__.
352
360
  codemie_test_harness/tests/workflow/virtual_assistant_tools/servicenow/test_workflow_with_servicenow_tools.py,sha256=vq6tucNBxiNIQSmIj_pYiiPm0lipU9X3kzeCd6xEbRM,966
353
361
  codemie_test_harness/tests/workflow/virtual_assistant_tools/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
354
362
  codemie_test_harness/tests/workflow/virtual_assistant_tools/vcs/test_workflow_with_vcs_tools.py,sha256=uD2qs361j6Egp4UumfoQ4gC24-NioXfiW0IF53N9hVA,1175
355
- codemie_test_harness-0.1.168.dist-info/METADATA,sha256=1XRD5UokSB8bPu0xnZXqhAmqbe40bCt7chx0L1kcx1g,8998
356
- codemie_test_harness-0.1.168.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
357
- codemie_test_harness-0.1.168.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
358
- codemie_test_harness-0.1.168.dist-info/RECORD,,
363
+ codemie_test_harness-0.1.170.dist-info/METADATA,sha256=q_eS_gM6w7uH0iZYwKZSmZU_uGzK1cG8GMFl7pWVdDI,8998
364
+ codemie_test_harness-0.1.170.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
365
+ codemie_test_harness-0.1.170.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
366
+ codemie_test_harness-0.1.170.dist-info/RECORD,,