codemie-test-harness 0.1.176__py3-none-any.whl → 0.1.178__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 (25) hide show
  1. codemie_test_harness/tests/assistant/tools/mcp/test_single_assistant_dual_time_plugins.py +8 -2
  2. codemie_test_harness/tests/conftest.py +6 -6
  3. codemie_test_harness/tests/llm/assistants/test_lite_llm.py +5 -4
  4. codemie_test_harness/tests/test_data/google_datasource_test_data.py +4 -1
  5. codemie_test_harness/tests/ui/_test_data/datasource_test_data.py +125 -0
  6. codemie_test_harness/tests/ui/datasource/__init__.py +0 -0
  7. codemie_test_harness/tests/ui/datasource/test_create_datasource.py +188 -0
  8. codemie_test_harness/tests/ui/datasource/test_datasource_page.py +61 -0
  9. codemie_test_harness/tests/ui/datasource/test_edit_datasource.py +180 -0
  10. codemie_test_harness/tests/ui/datasource/test_view_datasource.py +220 -0
  11. codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py +1 -1
  12. codemie_test_harness/tests/ui/pageobject/base_page.py +31 -5
  13. codemie_test_harness/tests/ui/pageobject/components/project_selector.py +116 -0
  14. codemie_test_harness/tests/ui/pageobject/components/workflow_sidebar.py +1 -1
  15. codemie_test_harness/tests/ui/pageobject/datasources/__init__.py +0 -0
  16. codemie_test_harness/tests/ui/pageobject/datasources/create_edit_datasource_page.py +771 -0
  17. codemie_test_harness/tests/ui/pageobject/datasources/datasource_page.py +233 -0
  18. codemie_test_harness/tests/ui/pageobject/datasources/datasource_sidebar.py +303 -0
  19. codemie_test_harness/tests/ui/pageobject/datasources/view_datasource_page.py +335 -0
  20. codemie_test_harness/tests/utils/datasource_utils.py +13 -18
  21. {codemie_test_harness-0.1.176.dist-info → codemie_test_harness-0.1.178.dist-info}/METADATA +2 -2
  22. {codemie_test_harness-0.1.176.dist-info → codemie_test_harness-0.1.178.dist-info}/RECORD +24 -13
  23. codemie_test_harness/tests/ui/pytest.ini +0 -18
  24. {codemie_test_harness-0.1.176.dist-info → codemie_test_harness-0.1.178.dist-info}/WHEEL +0 -0
  25. {codemie_test_harness-0.1.176.dist-info → codemie_test_harness-0.1.178.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,335 @@
1
+ #
2
+ from codemie_test_harness.tests.ui.pageobject.base_page import BasePage
3
+ from hamcrest import greater_than_or_equal_to, assert_that
4
+ from playwright.sync_api import expect
5
+ from reportportal_client import step
6
+ from tests.ui.pageobject.datasources.datasource_sidebar import DataSourceSidebar
7
+
8
+
9
+ class ViewDatasourcePage(BasePage):
10
+ """
11
+ Page object for the 'View DataSource' details page.
12
+ Contains all major section locators and verification methods (with text checks).
13
+ """
14
+
15
+ def __init__(self, page):
16
+ self.sidebar = DataSourceSidebar(page)
17
+ self.page = page
18
+
19
+ # Main Page Elements
20
+ @property
21
+ def back_button(self):
22
+ return self.page.locator("div.h-layout-header button").first
23
+
24
+ @property
25
+ def main_title(self):
26
+ return self.page.locator("h1.text-h3.text-white.font-semibold")
27
+
28
+ # Name/Owner/Shared
29
+ @property
30
+ def datasource_name(self):
31
+ return self.page.locator("h4.text-2xl.font-semibold.font-mono")
32
+
33
+ @property
34
+ def owner_text(self):
35
+ return self.page.locator("div.flex.gap-4.text-xs.text-text-secondary p").first
36
+
37
+ @property
38
+ def shared_status(self):
39
+ return self.page.locator(
40
+ "span.text-xs.text-switch-label, span.flex.items-center.gap-1"
41
+ )
42
+
43
+ # Overview Section
44
+ @property
45
+ def overview_label(self):
46
+ return self.page.locator(
47
+ "p.text-xs.text-text-main.font-semibold", has_text="OVERVIEW"
48
+ )
49
+
50
+ @property
51
+ def project_value(self):
52
+ return self.page.locator("div.gap-x-3 p:text('Project:') + p")
53
+
54
+ @property
55
+ def datasource_type_value(self):
56
+ return self.page.locator("div.gap-x-3 p:text('Data Source Type:') + p")
57
+
58
+ @property
59
+ def datasource_id_field(self):
60
+ return self.page.locator(
61
+ "div.flex.flex-col.gap-2.mt-2.uppercase input[readonly]"
62
+ )
63
+
64
+ # Description
65
+ @property
66
+ def description_label(self):
67
+ return self.page.locator("h5.font-bold.text-xs.mb-2", has_text="Description")
68
+
69
+ @property
70
+ def description_text(self):
71
+ return self.description_label.locator("xpath=../div")
72
+
73
+ # Configuration Section
74
+ @property
75
+ def configuration_label(self):
76
+ return self.page.locator(
77
+ "p.text-xs.text-text-main.font-semibold", has_text="CONFIGURATION"
78
+ )
79
+
80
+ @property
81
+ def embeddings_model_label(self):
82
+ return self.page.locator(
83
+ "p.text-xs.text-text-tertiary", has_text="Embeddings model:"
84
+ )
85
+
86
+ @property
87
+ def embeddings_model_value(self):
88
+ return self.embeddings_model_label.locator("+ div")
89
+
90
+ @property
91
+ def summarization_model_label(self):
92
+ return self.page.locator(
93
+ "p.text-xs.text-text-tertiary", has_text="Summarization model:"
94
+ )
95
+
96
+ @property
97
+ def summarization_model_value(self):
98
+ return self.summarization_model_label.locator("+ div")
99
+
100
+ # Usage Details Section
101
+ @property
102
+ def usage_label(self):
103
+ return self.page.locator(
104
+ "p.text-xs.text-text-main.font-semibold", has_text="USAGE DETAILS"
105
+ )
106
+
107
+ @property
108
+ def input_tokens_label(self):
109
+ return self.page.locator(
110
+ "p.text-xs.text-text-tertiary", has_text="Input tokens used:"
111
+ )
112
+
113
+ @property
114
+ def input_tokens_value(self):
115
+ return self.input_tokens_label.locator("xpath=../div")
116
+
117
+ @property
118
+ def output_tokens_label(self):
119
+ return self.page.locator(
120
+ "p.text-xs.text-text-tertiary", has_text="Output tokens used:"
121
+ )
122
+
123
+ @property
124
+ def output_tokens_value(self):
125
+ return self.output_tokens_label.locator("xpath=../div")
126
+
127
+ @property
128
+ def money_spent_label(self):
129
+ return self.page.locator(
130
+ "p.text-xs.text-text-tertiary", has_text="Money spent:"
131
+ )
132
+
133
+ @property
134
+ def money_spent_value(self):
135
+ return self.money_spent_label.locator("xpath=../div")
136
+
137
+ # Processing Summary
138
+ @property
139
+ def processing_summary_label(self):
140
+ return self.page.locator(
141
+ "h5.font-bold.text-xs.leading-none.font-mono", has_text="Processing Summary"
142
+ )
143
+
144
+ @property
145
+ def total_documents_label(self):
146
+ return self.page.locator(
147
+ "div.font-mono.text-ds-field-title", has_text="Total documents:"
148
+ )
149
+
150
+ @property
151
+ def total_documents_count(self):
152
+ return self.total_documents_label.locator("xpath=../span")
153
+
154
+ @property
155
+ def processed_documents_label(self):
156
+ return self.page.locator(
157
+ "div.font-mono.text-ds-field-title", has_text="Processed Documents Count:"
158
+ )
159
+
160
+ @property
161
+ def processed_documents_count(self):
162
+ return self.processed_documents_label.locator("xpath=../span")
163
+
164
+ @property
165
+ def imported_chunks_label(self):
166
+ return self.page.locator(
167
+ "div.font-mono.text-ds-field-title", has_text="Imported Chunks Count:"
168
+ )
169
+
170
+ @property
171
+ def imported_chunks_count(self):
172
+ return self.imported_chunks_label.locator("xpath=../span")
173
+
174
+ @property
175
+ def skipped_documents_label(self):
176
+ return self.page.locator(
177
+ "div.font-mono.text-ds-field-title", has_text="Skipped Documents:"
178
+ )
179
+
180
+ @property
181
+ def skipped_documents_count(self):
182
+ return self.skipped_documents_label.locator("xpath=../span")
183
+
184
+ @property
185
+ def total_size_kb_label(self):
186
+ return self.page.locator(
187
+ "div.font-mono.text-ds-field-title", has_text="Total Size KB:"
188
+ )
189
+
190
+ @property
191
+ def total_size_kb_count(self):
192
+ return self.total_size_kb_label.locator("xpath=../span")
193
+
194
+ @property
195
+ def average_file_size_b_label(self):
196
+ return self.page.locator(
197
+ "div.font-mono.text-ds-field-title", has_text="Average File Size B:"
198
+ )
199
+
200
+ @property
201
+ def average_file_size_b_count(self):
202
+ return self.average_file_size_b_label.locator("xpath=../span")
203
+
204
+ # Processed Data
205
+ @property
206
+ def processed_data_tab_label(self):
207
+ return self.page.locator("ul li a.p-menuitem-link", has_text="Processed Data")
208
+
209
+ @property
210
+ def processed_data_label(self):
211
+ return self.page.locator("h5.text-xs", has_text="Processed Data")
212
+
213
+ @property
214
+ def processed_data_list(self):
215
+ return self.page.locator("ul.bg-new-panel li")
216
+
217
+ # --- Verification Methods ---
218
+
219
+ @step
220
+ def should_see_title_and_back_button(self):
221
+ expect(self.main_title).to_have_text("Data Source Details")
222
+ expect(self.back_button).to_be_visible()
223
+ return self
224
+
225
+ @step
226
+ def should_see_ds_name_and_owner(
227
+ self, datasource_name: str = None, owner: str = None
228
+ ):
229
+ expect(self.datasource_name).to_be_visible()
230
+ if datasource_name:
231
+ expect(self.datasource_name).to_have_text(datasource_name)
232
+ expect(self.owner_text).to_be_visible()
233
+ if owner:
234
+ expect(self.owner_text).to_have_text(f"by {owner}")
235
+ return self
236
+
237
+ @step
238
+ def should_see_overview(
239
+ self, project: str = None, ds_type: str = None, ds_id: str = None
240
+ ):
241
+ expect(self.overview_label).to_be_visible()
242
+ expect(self.project_value).to_be_visible()
243
+ if project:
244
+ expect(self.project_value).to_have_text(project)
245
+ expect(self.datasource_type_value).to_be_visible()
246
+ if ds_type:
247
+ expect(self.datasource_type_value).to_have_text(ds_type)
248
+ expect(self.datasource_id_field).to_be_visible()
249
+ if ds_id:
250
+ expect(self.datasource_id_field).to_have_value(ds_id)
251
+ return self
252
+
253
+ @step
254
+ def should_see_description(self, description: str = None):
255
+ expect(self.description_label).to_be_visible()
256
+ expect(self.description_text).to_be_visible()
257
+ if description:
258
+ expect(self.description_text).to_have_text(description)
259
+ return self
260
+
261
+ @step
262
+ def should_see_configuration(
263
+ self, embeddings_model: str = None, summarization_model: str = None
264
+ ):
265
+ expect(self.configuration_label).to_be_visible()
266
+ expect(self.embeddings_model_label).to_be_visible()
267
+ expect(self.embeddings_model_value).to_be_visible()
268
+ if embeddings_model:
269
+ expect(self.embeddings_model_value).to_have_text(embeddings_model)
270
+ expect(self.summarization_model_label).to_be_visible()
271
+ expect(self.summarization_model_value).to_be_visible()
272
+ if summarization_model:
273
+ expect(self.summarization_model_value).to_have_text(summarization_model)
274
+ return self
275
+
276
+ @step
277
+ def should_see_usage_details(self):
278
+ expect(self.usage_label).to_be_visible()
279
+ expect(self.input_tokens_label).to_be_visible()
280
+ expect(self.input_tokens_value).to_be_visible()
281
+ expect(self.output_tokens_label).to_be_visible()
282
+ expect(self.output_tokens_value).to_be_visible()
283
+ expect(self.money_spent_label).to_be_visible()
284
+ expect(self.money_spent_value).to_be_visible()
285
+ return self
286
+
287
+ @step
288
+ def should_see_processing_summary(
289
+ self,
290
+ total_documents: str = None,
291
+ processed_documents: str = None,
292
+ imported_chunks: str = None,
293
+ skipped_documents: str = None,
294
+ is_git: bool = False,
295
+ ):
296
+ expect(self.processing_summary_label).to_be_visible()
297
+ expect(self.total_documents_label).to_be_visible()
298
+ expect(self.total_documents_count).to_be_visible()
299
+ if total_documents:
300
+ expect(self.total_documents_count).to_have_text(total_documents)
301
+ expect(self.processed_documents_label).to_be_visible()
302
+ expect(self.processed_documents_count).to_be_visible()
303
+ if processed_documents:
304
+ expect(self.processed_documents_count).to_have_text(processed_documents)
305
+ expect(self.imported_chunks_label).to_be_visible()
306
+ expect(self.imported_chunks_count).to_be_visible()
307
+ if imported_chunks:
308
+ expect(self.imported_chunks_count).to_have_text(imported_chunks)
309
+ expect(self.skipped_documents_label).to_be_visible()
310
+ expect(self.skipped_documents_count).to_be_visible()
311
+ if skipped_documents:
312
+ expect(self.skipped_documents_count).to_have_text(skipped_documents)
313
+ if is_git:
314
+ expect(self.total_size_kb_label).to_be_visible()
315
+ expect(self.total_documents_count).to_be_visible()
316
+ expect(self.average_file_size_b_label).to_be_visible()
317
+ expect(self.average_file_size_b_count).to_be_visible()
318
+ return self
319
+
320
+ @step
321
+ def should_open_and_see_processed_data(self, min_count: int = 1):
322
+ expect(self.processed_data_tab_label).to_be_visible()
323
+ self.processed_data_tab_label.click()
324
+ expect(self.processed_data_list.first).to_be_visible()
325
+ count = self.processed_data_list.count()
326
+ assert_that(count, greater_than_or_equal_to(min_count))
327
+ return self
328
+
329
+ @step
330
+ def should_see_processed_data(self, min_count: int = 1):
331
+ expect(self.processed_data_label).to_be_visible()
332
+ expect(self.processed_data_list.first).to_be_visible()
333
+ count = self.processed_data_list.count()
334
+ assert_that(count, greater_than_or_equal_to(min_count))
335
+ return self
@@ -1,6 +1,5 @@
1
1
  import time
2
2
  from time import sleep
3
- from typing import List, Union, Tuple
4
3
 
5
4
  from codemie_test_harness.tests.utils.credentials_manager import CredentialsManager
6
5
 
@@ -144,32 +143,28 @@ class DataSourceUtils(BaseUtils):
144
143
 
145
144
  return self.wait_for_indexing(datasource_id)
146
145
 
147
- def create_file_datasource(
148
- self,
149
- name: str,
150
- description: str,
151
- files: List[Union[str, Tuple[str, bytes, str]]],
152
- shared_with_project: bool = False,
153
- embeddings_model: str = None,
154
- ) -> DataSource:
146
+ def create_file_datasource(self, **kwargs):
147
+ datasource_name = kwargs.get("name", get_random_name())
148
+
155
149
  create_request_params = {
156
- "name": name,
150
+ "name": datasource_name,
157
151
  "project_name": PROJECT,
158
- "description": description,
159
- "shared_with_project": shared_with_project,
160
- "csv_separator": ";",
161
- "csv_start_row": 1,
162
- "csv_rows_per_document": 1000,
163
- "embeddings_model": embeddings_model,
152
+ "description": kwargs.get("description", get_random_name()),
153
+ "shared_with_project": kwargs.get("shared_with_project", False),
154
+ "embeddings_model": kwargs.get("embeddings_model"),
155
+ "csv_separator": kwargs.get("csv_separator", ";"),
156
+ "csv_start_row": kwargs.get("csv_start_row", 1),
157
+ "csv_rows_per_document": kwargs.get("csv_rows_per_document", 1000),
164
158
  }
159
+ files = kwargs.get("files")
165
160
 
166
161
  create_datasource_request = FileDataSourceRequest(**create_request_params)
167
162
 
168
163
  self.client.datasources.create_file_datasource(create_datasource_request, files)
169
164
 
170
165
  datasource = wait_for_entity(
171
- lambda: self.client.datasources.list(per_page=200, filters={"name": name}),
172
- entity_name=name,
166
+ lambda: self.client.datasources.list(per_page=200),
167
+ entity_name=datasource_name,
173
168
  )
174
169
 
175
170
  return self.wait_for_indexing(datasource.id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: codemie-test-harness
3
- Version: 0.1.176
3
+ Version: 0.1.178
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.176)
16
+ Requires-Dist: codemie-sdk-python (==0.1.178)
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)
@@ -44,7 +44,7 @@ codemie_test_harness/tests/assistant/tools/git/test_assistant_with_git_tools.py,
44
44
  codemie_test_harness/tests/assistant/tools/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  codemie_test_harness/tests/assistant/tools/mcp/test_cli_mcp_server.py,sha256=nf8j8d5L9hXriqzh1o1b1IUclEW5jY-s1YHKovnWMh0,2642
46
46
  codemie_test_harness/tests/assistant/tools/mcp/test_mcp_servers.py,sha256=6G07SddfjZ0ilnJVSeS3yK-OSge9224I-6BQhbQxvZo,1386
47
- codemie_test_harness/tests/assistant/tools/mcp/test_single_assistant_dual_time_plugins.py,sha256=_rBXI-45DZyFAlaTfv_3LkIc7mS8RAsfE2En3aWIpwY,4897
47
+ codemie_test_harness/tests/assistant/tools/mcp/test_single_assistant_dual_time_plugins.py,sha256=IWQVvRSIDFbNahnmwVdrGxSjgbNfpj-jLV6uqrDj-Yo,5107
48
48
  codemie_test_harness/tests/assistant/tools/notification/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  codemie_test_harness/tests/assistant/tools/notification/test_assistant_notification_tools.py,sha256=0HrrCwwwU0U_2qrJPeURmqetOGt2FuBLoCxLEHzXV1k,2651
50
50
  codemie_test_harness/tests/assistant/tools/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -62,7 +62,7 @@ codemie_test_harness/tests/assistant/tools/servicenow/__init__.py,sha256=47DEQpj
62
62
  codemie_test_harness/tests/assistant/tools/servicenow/test_servicenow_tools.py,sha256=Io-E5m8f1sA2EP6xQ1l4oJ4-4e9uKPqXHkmxwH0ApFM,691
63
63
  codemie_test_harness/tests/assistant/tools/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  codemie_test_harness/tests/assistant/tools/vcs/test_assistant_with_vcs_tools.py,sha256=YjTa1iTU7RpG1y9PpkRkz8RkOqOZXQ8C15X92m2ZRhc,962
65
- codemie_test_harness/tests/conftest.py,sha256=AnxzI-2MYQg9W8f3Zw6FzzDQ1eZakLjT0s4AXfLBm1o,30281
65
+ codemie_test_harness/tests/conftest.py,sha256=gQAP5Yvznf7ruxRLf4mAuk_AhuZjQXP7mMIiw7ue1P8,30275
66
66
  codemie_test_harness/tests/conversations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  codemie_test_harness/tests/conversations/test_conversations_endpoints.py,sha256=rLYMWLcOWuWFXSSfIjYSO4rjh_QZPZwQSfOQ8znhyr4,4163
68
68
  codemie_test_harness/tests/e2e/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -81,7 +81,7 @@ codemie_test_harness/tests/integrations/user/test_default_integrations.py,sha256
81
81
  codemie_test_harness/tests/integrations/user/test_user_integrations.py,sha256=lGOoyGyKby1vOvXbz9de-PfhS0eUEX6vS7tg6vixtEE,8120
82
82
  codemie_test_harness/tests/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  codemie_test_harness/tests/llm/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
- codemie_test_harness/tests/llm/assistants/test_lite_llm.py,sha256=Ya4t3t7JES7BHfSYbojwx_lNaKalZPq0rsZf257v1aM,3646
84
+ codemie_test_harness/tests/llm/assistants/test_lite_llm.py,sha256=v1mdhmXjBDVI5_RPnwDDuCuvSjhns6Vv-opWSekcr3I,3697
85
85
  codemie_test_harness/tests/llm/assistants/test_llm.py,sha256=rpS-rsRqR13HPKPDeT_PvgnlSg1_KtbXTAzQpfShL8E,3531
86
86
  codemie_test_harness/tests/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  codemie_test_harness/tests/providers/test_providers_endpoints.py,sha256=SfZVCaYcsk_mG2b9zVu7w2wOY54loQHdmRS8eK5PNo4,8120
@@ -146,7 +146,7 @@ codemie_test_harness/tests/test_data/files/test.yaml,sha256=3NDQyzwkRM5d6eCYMScN
146
146
  codemie_test_harness/tests/test_data/files/test_extended.docx,sha256=8TqjOxgO6ODY82DAayEqFm8D8yV6haoaKSzP-0Z5gl8,112227
147
147
  codemie_test_harness/tests/test_data/files/test_extended.xlsx,sha256=_ZjBj1E_uEuWHWGO5x0BO0E3-kQWqSyWi9vG9n2JZpQ,10031
148
148
  codemie_test_harness/tests/test_data/git_tools_test_data.py,sha256=7U05vLqkh5uJ0l_KJeHis549id1Of99K0jCsWOb0nXM,8485
149
- codemie_test_harness/tests/test_data/google_datasource_test_data.py,sha256=fhMJVTU0udINKtBQ750c_c279NzibGiZumnIaCPLtBo,511
149
+ codemie_test_harness/tests/test_data/google_datasource_test_data.py,sha256=9hO8KnOcb3to4bxsPj3nwIswjfobn6_aYJ6IDMAmXBc,628
150
150
  codemie_test_harness/tests/test_data/index_test_data.py,sha256=VZJC_Fmko32EHaybUwCy0mWMiwAeUAAmhRa0Xt4oTHQ,1115
151
151
  codemie_test_harness/tests/test_data/integrations_test_data.py,sha256=1YecCRnrBq5NiM9HEnyKFZ17nuFEnZUlNzKcwo09SDM,13050
152
152
  codemie_test_harness/tests/test_data/keycloak_tool_test_data.py,sha256=uF8YqHGgLpQVxKdpKXLe-7F-ipEGQiHHh28nZvvVGM8,1244
@@ -197,28 +197,40 @@ codemie_test_harness/tests/test_data/workflow_validation_messages.py,sha256=zg5B
197
197
  codemie_test_harness/tests/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
198
  codemie_test_harness/tests/ui/_test_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
199
  codemie_test_harness/tests/ui/_test_data/assistant_test_data.py,sha256=DRfungbLNwbFQf6qTNOVjR3l2v7fBDzgUq1v9fwXw78,6829
200
+ codemie_test_harness/tests/ui/_test_data/datasource_test_data.py,sha256=Ubx8o1NPxiJ2adaz6IDpwXDKB9_yE40v5_0az__CX0I,3489
200
201
  codemie_test_harness/tests/ui/_test_data/integration_test_data.py,sha256=6YnDIWhOSTSmzIziBCfpqYikVT0kXw_vMrMJBmhnSnQ,4212
201
202
  codemie_test_harness/tests/ui/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
203
  codemie_test_harness/tests/ui/assistants/test_create_assistant.py,sha256=YWhz5--YgXBi10K8jPuhG9G2cK5GY9_xAnxDdN6-NJ8,14560
203
204
  codemie_test_harness/tests/ui/conftest.py,sha256=KBM3g-lxPQEtbNh6i-1bAYYRlVycbEXg7ztn3x7VobI,4361
205
+ codemie_test_harness/tests/ui/datasource/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
+ codemie_test_harness/tests/ui/datasource/test_create_datasource.py,sha256=bwXgvz2mzR5S-cTBFJNXNv1qW-IfmQaBhoiAjml1Ttc,6358
207
+ codemie_test_harness/tests/ui/datasource/test_datasource_page.py,sha256=Lhl2-zsCxx0QuOt135dbrfqfwMPim5fqnCwynnI2ptQ,2293
208
+ codemie_test_harness/tests/ui/datasource/test_edit_datasource.py,sha256=tahI143j-NVMcwhxLdeImWH9r2Eq3VHaMH1WhbV3FEk,6295
209
+ codemie_test_harness/tests/ui/datasource/test_view_datasource.py,sha256=OJdAKgPAfC685M8mlu1S1KKqo_l2xnNsuX3rfuS01v8,7693
204
210
  codemie_test_harness/tests/ui/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
211
  codemie_test_harness/tests/ui/integrations/test_create_integration.py,sha256=ASe1i7Zv3x7RynVkT5rQz79z4lsah6MEPfew6aoTsy0,11962
206
212
  codemie_test_harness/tests/ui/pageobject/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
213
  codemie_test_harness/tests/ui/pageobject/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py,sha256=pYUhVRGZhCVX5EILCTkqjvOBPfD9u2qc5Rsa54up5IA,6036
214
+ codemie_test_harness/tests/ui/pageobject/assistants/assistants_page.py,sha256=E3aEXpmMhjcmJsO_nE52WdbHXOoK-Hp9vqIw4rEPzrU,6043
209
215
  codemie_test_harness/tests/ui/pageobject/assistants/create_assistant_page.py,sha256=xGl5nZAwJJtZ_ej2ycYgywK9EBGj_-AXCW4Z_eEWgYA,21791
210
216
  codemie_test_harness/tests/ui/pageobject/assistants/generate_with_ai_modal.py,sha256=rsavzWxmawKzI4wHxixp49IN6m_ZUZNFTJTSnE8jBr8,13732
211
- codemie_test_harness/tests/ui/pageobject/base_page.py,sha256=pKi_Qv81W5XESdX-xFA3de98gyM4iJB1rkXNPyFnFx8,7960
217
+ codemie_test_harness/tests/ui/pageobject/base_page.py,sha256=UJhY9WkCn_GaXvdMXL1oFcmpZkfokz8rnOWYMqdTCF0,8732
212
218
  codemie_test_harness/tests/ui/pageobject/components/__init__.py,sha256=6scUFCL2StHbKIoNgGGZdpeDZUwbCrKIH7hwaskAB4E,577
213
219
  codemie_test_harness/tests/ui/pageobject/components/execution_history_row.py,sha256=aGHc5AOpGR0tlfmLQfk8272TN6TWiuiXHUcg6PtB1Iw,6499
214
220
  codemie_test_harness/tests/ui/pageobject/components/integration_row.py,sha256=TCS6Si1Di6nrU9TTstcc4bxPztIqaWo11JxFzdqPX_c,8492
215
221
  codemie_test_harness/tests/ui/pageobject/components/menu.py,sha256=llTWAbJHldo1-wY86k_2Dvs8iSEmMWzrw26AhQJ1kis,10501
216
222
  codemie_test_harness/tests/ui/pageobject/components/pop_up.py,sha256=DfdQfLZp_We8K9rNyLXtJqy3vk8BxEnp32h9dTThJUM,3466
223
+ codemie_test_harness/tests/ui/pageobject/components/project_selector.py,sha256=lOXjb9mCUIshon_cUAvt63eCZ43MAft7AWtbZXgVJRA,3543
217
224
  codemie_test_harness/tests/ui/pageobject/components/workflow_card.py,sha256=8M4JKYCI46_-0EosFBgWfFuD3-_AH8jVIhSRJCQqamQ,6712
218
225
  codemie_test_harness/tests/ui/pageobject/components/workflow_execution_history_item.py,sha256=wSl4ELoEAmlgrh-NiGNfAfFZtnDvenszir7ZoIcmgt0,7884
219
226
  codemie_test_harness/tests/ui/pageobject/components/workflow_execution_state.py,sha256=IWir8fP-7oc9t17Rjs6mHCNCxfQfmdfbFY2SsNxZaE4,13837
220
- codemie_test_harness/tests/ui/pageobject/components/workflow_sidebar.py,sha256=9rGoopJShDtASejDA1L8yL6TfRvGHD_5yNXtDKcKzoQ,17158
227
+ codemie_test_harness/tests/ui/pageobject/components/workflow_sidebar.py,sha256=vd7IW7PC7cmvib-bnp6XwIUseEwWoX_Y3Qo_UVkYR5A,17167
221
228
  codemie_test_harness/tests/ui/pageobject/components/workflow_state_card.py,sha256=V7V1p3FNPrwVFM0CjZeg0MUkW9bGoF8UP5DuuH-r4gU,11548
229
+ codemie_test_harness/tests/ui/pageobject/datasources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
+ codemie_test_harness/tests/ui/pageobject/datasources/create_edit_datasource_page.py,sha256=4Xqqdtmh6qSjw1bYANU53SHzHY_c8R2maM4Wk21749k,23730
231
+ codemie_test_harness/tests/ui/pageobject/datasources/datasource_page.py,sha256=T9T3mnUw4IzCF39NxBOiWR_Y6Hu3bb9gb7JvuMMHL-g,7787
232
+ codemie_test_harness/tests/ui/pageobject/datasources/datasource_sidebar.py,sha256=bLVaKuHxCzr_PmsMgqEDs6UWczfSSDBfQBDHnMuaJ18,9644
233
+ codemie_test_harness/tests/ui/pageobject/datasources/view_datasource_page.py,sha256=Ch4CpiU5N36WQ9CK2Xtl9_MzDn7764uJjvADOcPqHu0,11272
222
234
  codemie_test_harness/tests/ui/pageobject/integrations/create_integration_page.py,sha256=3-iI3WntzJRxkdjw6HwQkaz3TI3pAWWRkfJvBcb6klk,24911
223
235
  codemie_test_harness/tests/ui/pageobject/integrations/integrations_page.py,sha256=Dsik34qzL8uK2KyIlKU--OFm61WyAWZTPBD__nwsBTM,13658
224
236
  codemie_test_harness/tests/ui/pageobject/login_page.py,sha256=cs0nYtvYykXfli9vYKWPpIWOEQbksUDUGgq03hulfSg,3062
@@ -231,7 +243,6 @@ codemie_test_harness/tests/ui/pageobject/workflows/workflow_executions_page.py,s
231
243
  codemie_test_harness/tests/ui/pageobject/workflows/workflow_template_details.py,sha256=6Su0yLA8wDybCPVE2WFhV6l6r_38aYaRY0mEYnLHlYg,3556
232
244
  codemie_test_harness/tests/ui/pageobject/workflows/workflow_templates_page.py,sha256=J5jxdZ2aQ9k15ghyRKYACxX2F9NiR6dXYBw0EaYlaN0,2645
233
245
  codemie_test_harness/tests/ui/pageobject/workflows/workflows_page.py,sha256=yqdaSTA4aUeD-8A9Or0OgJZhMr2tDvDWWP_f4uPL5dw,11186
234
- codemie_test_harness/tests/ui/pytest.ini,sha256=5LM3ib1yTB4jUHrC8Ksas_k8Li6RBuuUTAWCPRx-4MY,554
235
246
  codemie_test_harness/tests/ui/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
236
247
  codemie_test_harness/tests/ui/workflows/test_create_workflow.py,sha256=zX_6-pcYGCLiU6FUAvP-uo3jXy0PEEPBc_eqbP0FLV0,10522
237
248
  codemie_test_harness/tests/ui/workflows/test_edit_workflow.py,sha256=RQIV5fSd3xv3tdGidpF8mMwkoHJ57Xn1HzeXnFq4eB0,12913
@@ -247,7 +258,7 @@ codemie_test_harness/tests/utils/client_factory.py,sha256=xGta0ZaVYzWfwJ4cu3f89K
247
258
  codemie_test_harness/tests/utils/constants.py,sha256=ZNyM5wERHFN-c8TCvBcxCdFf0As9TOpr22YvLCMHArE,1116
248
259
  codemie_test_harness/tests/utils/conversation_utils.py,sha256=SWj6TBWOQoX5Yh6Wk63yHQFveRXgK1mpLb3PUKAa57A,648
249
260
  codemie_test_harness/tests/utils/credentials_manager.py,sha256=sqzJUekCwo56zvOOm4BdHvyHPPzvY9aI4nWp1GoLwCQ,52866
250
- codemie_test_harness/tests/utils/datasource_utils.py,sha256=_jx1IrRR5rmQxXsal5z4nwX9vgupdVdgNL0vH-2nJ8A,12685
261
+ codemie_test_harness/tests/utils/datasource_utils.py,sha256=7I37BBD-ySvH9u-y9wjposohqXZG8ksx2CGvbsHK3WY,12707
251
262
  codemie_test_harness/tests/utils/env_resolver.py,sha256=25776Aq9oIDcDzGtfFs07lj7eldeFgmsocxeS3RUclE,4280
252
263
  codemie_test_harness/tests/utils/env_utils.py,sha256=9tyVgxKfYqdtSoo9dRTScOZWjAUm82_65JjaKggcwCg,3999
253
264
  codemie_test_harness/tests/utils/file_utils.py,sha256=hY-kwnyzvtd1BQif8r5NhvRTGfpKLmQKyRsq1Tuflhg,585
@@ -370,7 +381,7 @@ codemie_test_harness/tests/workflow/virtual_assistant_tools/servicenow/__init__.
370
381
  codemie_test_harness/tests/workflow/virtual_assistant_tools/servicenow/test_workflow_with_servicenow_tools.py,sha256=vq6tucNBxiNIQSmIj_pYiiPm0lipU9X3kzeCd6xEbRM,966
371
382
  codemie_test_harness/tests/workflow/virtual_assistant_tools/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
372
383
  codemie_test_harness/tests/workflow/virtual_assistant_tools/vcs/test_workflow_with_vcs_tools.py,sha256=uD2qs361j6Egp4UumfoQ4gC24-NioXfiW0IF53N9hVA,1175
373
- codemie_test_harness-0.1.176.dist-info/METADATA,sha256=5rKoYIY06ND3Xbn6HTvtb7JfdorZzCdsTfK7O2DKv6U,18310
374
- codemie_test_harness-0.1.176.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
375
- codemie_test_harness-0.1.176.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
376
- codemie_test_harness-0.1.176.dist-info/RECORD,,
384
+ codemie_test_harness-0.1.178.dist-info/METADATA,sha256=FmHs2W1RcGBATo4rs5B0GT4qXVWmkLSzs9u2OlBo9dk,18310
385
+ codemie_test_harness-0.1.178.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
386
+ codemie_test_harness-0.1.178.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
387
+ codemie_test_harness-0.1.178.dist-info/RECORD,,
@@ -1,18 +0,0 @@
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_*