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.
- codemie_test_harness/cli/cli.py +18 -74
- codemie_test_harness/cli/commands/assistant_cmd.py +104 -0
- codemie_test_harness/cli/commands/config_cmd.py +610 -20
- codemie_test_harness/cli/commands/workflow_cmd.py +64 -0
- codemie_test_harness/cli/constants.py +385 -6
- codemie_test_harness/cli/utils.py +9 -0
- codemie_test_harness/tests/test_data/assistant_test_data.py +197 -0
- codemie_test_harness/tests/test_data/project_management_test_data.py +1 -1
- codemie_test_harness/tests/ui/assistants/__init__.py +0 -0
- codemie_test_harness/tests/ui/assistants/test_create_assistant.py +408 -0
- codemie_test_harness/tests/ui/conftest.py +23 -3
- codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py +3 -4
- codemie_test_harness/tests/ui/pageobject/assistants/create_assistant_page.py +689 -0
- codemie_test_harness/tests/ui/pageobject/assistants/generate_with_ai_modal.py +367 -0
- codemie_test_harness/tests/ui/pageobject/base_page.py +2 -2
- codemie_test_harness/tests/ui/pytest.ini +18 -0
- codemie_test_harness/tests/ui/workflows/test_workflows.py +1 -1
- codemie_test_harness/tests/utils/credentials_manager.py +0 -15
- {codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/METADATA +2 -2
- {codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/RECORD +22 -14
- {codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/WHEEL +0 -0
- {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
|
|
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.
|
|
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.
|
|
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=
|
|
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/
|
|
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/
|
|
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=
|
|
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=
|
|
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/
|
|
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=
|
|
197
|
-
codemie_test_harness/tests/ui/pageobject/
|
|
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
|
|
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=
|
|
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.
|
|
356
|
-
codemie_test_harness-0.1.
|
|
357
|
-
codemie_test_harness-0.1.
|
|
358
|
-
codemie_test_harness-0.1.
|
|
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,,
|
|
File without changes
|
{codemie_test_harness-0.1.168.dist-info → codemie_test_harness-0.1.170.dist-info}/entry_points.txt
RENAMED
|
File without changes
|