codemie-test-harness 0.1.124__py3-none-any.whl → 0.1.125__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: codemie-test-harness
3
- Version: 0.1.124
3
+ Version: 0.1.125
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.124)
16
+ Requires-Dist: codemie-sdk-python (==0.1.125)
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)
@@ -101,7 +101,8 @@ tests/test_data/direct_tools/direct_tools_test_data.py,sha256=hEy9frn13kqia4Qy7V
101
101
  tests/test_data/direct_tools/file_management_tools_test_data.py,sha256=uJWn80216agm-_YTIbF5Y72mU7gn6lChM5vFFjH99SI,1359
102
102
  tests/test_data/direct_tools/notification_tools_test_data.py,sha256=DDqnFiCEvhtH9Sc9KQbdXRgTQmSnn7JFslPyuxGKRhc,1491
103
103
  tests/test_data/direct_tools/open_api_tools_test_data.py,sha256=-maO_OZahugoKusuUGQ4kQR373BSupOqrbvnCuPgqRY,476
104
- tests/test_data/direct_tools/project_management_tools_test_data.py,sha256=gy_J33285uHZzhKw3uK0vCH6Pgd0AkQQG1OdKLHjUqs,18289
104
+ tests/test_data/direct_tools/project_management_tools_test_data.py,sha256=YyIE7db8SLadP8pIfy4CWMr-nIcGXT9ih_7CPtsziPY,20888
105
+ tests/test_data/direct_tools/research_tools_test_data.py,sha256=tpukFcY-2dD6ZEHLYFnv_axzj-fEcIvyF2yo-Hu8udY,15220
105
106
  tests/test_data/direct_tools/servicenow_tools_test_data.py,sha256=d-F3d6AUniYQ5qqnYtDVu0ME6_Xub9XjRLf7Ssx-J4o,5464
106
107
  tests/test_data/direct_tools/vcs_tools_test_data.py,sha256=ioMJ-eQfa2S1NPmXHyb9UmpBxiYFAvdkPGst8iVnvn8,7164
107
108
  tests/test_data/file_management_tools_test_data.py,sha256=TP9D2CtrZ_N6BFLcqErW6ggHlN9hUkSKGGGwo4Gt55c,3727
@@ -273,6 +274,8 @@ tests/workflow/direct_tools_calling/test_workflow_with_file_management_tools.py,
273
274
  tests/workflow/direct_tools_calling/test_workflow_with_notification_tools.py,sha256=wl8BMUzOILiQ4u7MnMmKjUXWBuZ4piQrIxZoi-TswHs,2847
274
275
  tests/workflow/direct_tools_calling/test_workflow_with_open_api_tools.py,sha256=B8fXmgaqQtFSFNYAYblhvLNZiEFQTL4yVTif1F4OEoQ,2907
275
276
  tests/workflow/direct_tools_calling/test_workflow_with_plugin_tools.py,sha256=58Q5bsV4AJQypgAVGhWGzjzOTRHNgddGCbhDvvoojqI,3883
277
+ tests/workflow/direct_tools_calling/test_workflow_with_project_management_tools.py,sha256=jwB9wPjWAJmqb1fjyfau1foRQ2S9DYLbq1UtGZ1uCUM,3126
278
+ tests/workflow/direct_tools_calling/test_workflow_with_research_tools.py,sha256=WUTDag0EE8yZ_E2W3Rieb0YohBrlCxMHL1pXrKy8JYc,2342
276
279
  tests/workflow/direct_tools_calling/test_workflow_with_servicenow_tools.py,sha256=23oLSXygKWFDUhqBXE8mfz7E4ADbm-Ky83BPErcCgao,2122
277
280
  tests/workflow/direct_tools_calling/test_workflow_with_vcs_tools.py,sha256=xiklXap9uL52SZ8jkWKf--PqUj8NLSYRyvREo_jrtB4,2942
278
281
  tests/workflow/test_workflows.py,sha256=frL8hxSxFZKUTrc6oNZLs2Pj585gt4QZCWfJw1LaHsE,1078
@@ -312,7 +315,7 @@ tests/workflow/virtual_assistant_tools/servicenow/__init__.py,sha256=47DEQpj8HBS
312
315
  tests/workflow/virtual_assistant_tools/servicenow/test_workflow_with_servicenow_tools.py,sha256=ecTfkwxPMbyyEKS-dArAQkluZURO1nThwDdD66mgC3E,814
313
316
  tests/workflow/virtual_assistant_tools/vcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
314
317
  tests/workflow/virtual_assistant_tools/vcs/test_workflow_with_vcs_tools.py,sha256=G0iI3X7SGEEy1Z2Hc7j917saY3lpzgfil_GtALCFilE,1043
315
- codemie_test_harness-0.1.124.dist-info/METADATA,sha256=2_bVf6ChNIaYSGNN1Ds9uUlPTXCqj3b3KGPPIxHyVLE,8998
316
- codemie_test_harness-0.1.124.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
317
- codemie_test_harness-0.1.124.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
318
- codemie_test_harness-0.1.124.dist-info/RECORD,,
318
+ codemie_test_harness-0.1.125.dist-info/METADATA,sha256=VBB3EoZy1rdVrrAvR_d83F4dMHOM3vGWar9-KTEITOk,8998
319
+ codemie_test_harness-0.1.125.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
320
+ codemie_test_harness-0.1.125.dist-info/entry_points.txt,sha256=n98t-EOM5M1mnMl_j2X4siyeO9zr0WD9a5LF7JyElIM,73
321
+ codemie_test_harness-0.1.125.dist-info/RECORD,,
@@ -1,9 +1,11 @@
1
1
  from tests.enums.tools import Toolkit, ProjectManagementTool
2
+ from tests.utils.constants import ProjectManagementIntegrationType
2
3
 
3
4
  project_management_tools_data = [
4
5
  (
5
6
  Toolkit.PROJECT_MANAGEMENT,
6
7
  ProjectManagementTool.JIRA,
8
+ ProjectManagementIntegrationType.JIRA,
7
9
  {
8
10
  "method": "GET",
9
11
  "relative_url": "/rest/api/2/issue/EPMCDME-222",
@@ -14,7 +16,7 @@ project_management_tools_data = [
14
16
  changelog,versionedRepresentations","id":"6959493","self":"https://jiraeu.epam.com/rest/api/2/issue/6959493",
15
17
  "key":"EPMCDME-222","fields":{"customfield_38400":null,"customfield_38401":null,"customfield_38402":null,
16
18
  "customfield_34834":null,"customfield_38403":null,"resolution":{"self":"https://jiraeu.epam.com/rest/api/2/
17
- resolution/18","id":"18","description":"Resolution if a task or defect is no longer valid based on changes in
19
+ resolution/18","id":"18","description":"Resolution if a task or defect is no longer valid based on changes in
18
20
  the system or requirements","name":"Obsolete"},"customfield_38404":null,"customfield_17702":null,"customfield_
19
21
  38405":null,"customfield_38406":null,"customfield_32300":null,"customfield_22601":null,"lastViewed":null,"
20
22
  customfield_38410":null,"labels":["CodeMie"],"customfield_17811":null,"customfield_33400":null,"customfield_
@@ -40,7 +42,7 @@ project_management_tools_data = [
40
42
  "customfield_32203":null,"customfield_35720":null,"customfield_11801":null,"customfield_34873":null,"progress":
41
43
  {"progress":0,"total":0},"votes":{"self":"https://jiraeu.epam.com/rest/api/2/issue/EPMCDME-222/votes","votes":0,
42
44
  "hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"archivedby":null,"issuetype":
43
- {"self":"https://jiraeu.epam.com/rest/api/2/issuetype/6","id":"6","description":"Created by Jira Software - do
45
+ {"self":"https://jiraeu.epam.com/rest/api/2/issuetype/6","id":"6","description":"Created by Jira Software - do
44
46
  not edit or delete. Issue type for a big user story that needs to be broken down.","iconUrl":"https://jiraeu.
45
47
  epam.com/secure/viewavatar?size=xsmall&avatarId=44407&avatarType=issuetype","name":"Epic","subtask":false,
46
48
  "avatarId":44407},"project":{"self":"https://jiraeu.epam.com/rest/api/2/project/79608","id":"79608","key":
@@ -93,7 +95,7 @@ project_management_tools_data = [
93
95
  32704":null,"customfield_38138":null,"priority":{"self":"https://jiraeu.epam.com/rest/api/2/priority/3","iconUrl":
94
96
  "https://jiraeu.epam.com/images/icons/priorities/major.svg","name":"Major","id":"3"},"customfield_38139":null,"
95
97
  customfield_30400":"{summaryBean=com.atlassian.jira.plugin.devstatus.rest.SummaryBean@1f97334[summary={pullrequest=
96
- com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@38fa97ec[overall=PullRequestOverallBean{stateCount=0,
98
+ com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@38fa97ec[overall=PullRequestOverallBean{stateCount=0,
97
99
  state='OPEN', details=PullRequestOverallDetails{openCount=0, mergedCount=0, declinedCount=0}},byInstanceType={}],
98
100
  build=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@55e68473[overall=com.atlassian.jira.plugin.
99
101
  devstatus.summary.beans.BuildOverallBean@394f2cd4[failedBuildCount=0,successfulBuildCount=0,unknownBuildCount=0,
@@ -119,7 +121,7 @@ project_management_tools_data = [
119
121
  {\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}}}},\"isStale\":true}}","customfield_35546":null,
120
122
  "customfield_33002":null,"customfield_15109":null,"customfield_35785":null,"timeestimate":null,"versions":[],
121
123
  "customfield_35540":null,"customfield_14817":null,"customfield_21901":null,"customfield_25500":null,"status":
122
- {"self":"https://jiraeu.epam.com/rest/api/2/status/6","description":"The issue is considered finished, the
124
+ {"self":"https://jiraeu.epam.com/rest/api/2/status/6","description":"The issue is considered finished, the
123
125
  resolution is correct. Issues which are closed can be reopened.","iconUrl":"https://jiraeu.epam.com/images/icons
124
126
  /statuses/closed.png","name":"Closed","id":"6","statusCategory":{"self":"https://jiraeu.epam.com/rest/api/2/
125
127
  statuscategory/3","id":3,"key":"done","colorName":"success","name":"Done"}},"customfield_27804":null,"customfield_
@@ -132,7 +134,7 @@ project_management_tools_data = [
132
134
  gurska&avatarId=82512","16x16":"https://jiraeu.epam.com/secure/useravatar?size=xsmall&ownerId=iana_gurska&avatar
133
135
  Id=82512","32x32":"https://jiraeu.epam.com/secure/useravatar?size=medium&ownerId=iana_gurska&avatarId=82512"},"
134
136
  displayName":"Yana Kharchenko","active":true,"timeZone":"Europe/Kiev"},"customfield_26606":null,"customfield_
135
- 38398":null,"customfield_38399":null,"customfield_34902":"(e.g. 16,6%)","customfield_34903":"(e.g. 100 € /
137
+ 38398":null,"customfield_38399":null,"customfield_34902":"(e.g. 16,6%)","customfield_34903":"(e.g. 100 € /
136
138
  hour)","aggregateprogress":{"progress":0,"total":0},"customfield_30300":null,"customfield_34900":{"self":"
137
139
  https://jiraeu.epam.com/rest/api/2/customFieldOption/51127","value":"Emakina Group","id":"51127","disabled":
138
140
  true},"customfield_34901":"https://share.emakina.net/display/PT/Our+supplier","customfield_30301":null,"
@@ -158,4 +160,33 @@ project_management_tools_data = [
158
160
  _17713":null,"customfield_27500":null}}
159
161
  """,
160
162
  ),
163
+ (
164
+ Toolkit.PROJECT_MANAGEMENT,
165
+ ProjectManagementTool.CONFLUENCE,
166
+ ProjectManagementIntegrationType.CONFLUENCE,
167
+ {
168
+ "method": "GET",
169
+ "relative_url": "/rest/api/content/search",
170
+ "params": '{"cql": "title ~ \\"AQA backlog estimation\\"", "limit": 5, "expand": "body.storage"}',
171
+ "is_markdown": False,
172
+ },
173
+ """
174
+ HTTP: GET/rest/api/content/search -> 200OK{"results":[{"id":"2408012834","type":"page","status":"current","title":
175
+ "AQA Backlog Estimation","body":{"storage":{"value":"<p>We've decided to use the following estimation for the test
176
+ cases for AQA:</p><ul style="list-style-type: square;"><li>S - 1h</li><li>M - 3H</li><li>L - 5H</li></ul><p><br /></p><p>
177
+ Approximately estimation for all test cases are:</p><p>71 TCs S size = 110 man/h</p><p>140 TCs M Size = 520 man/h</p><p>
178
+ 7 TCs L Size = 40 man/h</p><p><br /></p><p>Since it is important to start with Critical or Major test cases and skip Minor
179
+ ones the estimation will be:</p><p>110 Major:<br /> - 20 of them S Size = 20h</p><p> - 75 of them M Size = 225h</p><p> -
180
+ 5 of them L Size = 25h</p><p><br /></p><p>Critical already should be covered with automation tests.</p>","representation":
181
+ "storage","_expandable":{"content":"/rest/api/content/2408012834"}},"_expandable":{"editor":"","view":"","export_view":"",
182
+ "styled_view":"","anonymous_export_view":""}},"extensions":{"position":"none"},"_links":{"webui":"/display/EPMCDME/
183
+ AQA+Backlog+Estimation","edit":"/pages/resumedraft.action?draftId=2408012834&draftShareId=64d72453-1668-4cfe-b2cb-2657f2bf2d74"
184
+ ,"tinyui":"/x/IlyHjw","self":"https://kb.epam.com/rest/api/content/2408012834"},"_expandable":{"container":"/rest/api/space/EPMCDME"
185
+ ,"metadata":"","operations":"","children":"/rest/api/content/2408012834/child","restrictions":"/rest/api/content/2408012834/
186
+ restriction/byOperation","history":"/rest/api/content/2408012834/history","ancestors":"","version":"","descendants":"/rest/
187
+ api/content/2408012834/descendant","space":"/rest/api/space/EPMCDME"}}],"start":0,"limit":5,"size":1,"cqlQuery":"title ~ "AQA
188
+ backlog estimation"","searchDuration":1359,"totalSize":1,"_links":{"self":"https://kb.epam.com/rest/api/content/search?
189
+ expand=body.storage&cql=title+~+%22AQA+backlog+estimation%22","base":"https://kb.epam.com","context":""}}
190
+ """,
191
+ ),
161
192
  ]
@@ -0,0 +1,318 @@
1
+ import pytest
2
+
3
+ from tests.enums.tools import ResearchToolName
4
+
5
+ research_tools_test_data = [
6
+ (
7
+ ResearchToolName.GOOGLE_SEARCH,
8
+ {"query": "AI trends 2024"},
9
+ """
10
+ {'title': 'Data and AI Trends 2024', 'link': 'https://data-ai-trends.withgoogle.com/',
11
+ 'snippet': 'Data is the fuel for AI, and what powers its effectiveness. To truly take advantage of generative AI,
12
+ you need to ground AI in your enterprise data.'}, {'title': 'McKinsey technology trends outlook 2025 | McKinsey', 'link':
13
+ 'https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/the-top-trends-in-tech', 'snippet': 'Jul 22, 2025 ...
14
+ An overarching artificial intelligence category replaces these four trends: applied AI ... By 2024, the interest score for
15
+ Artificial intelligence\xa0...'}, {'title': '3 big AI trends to watch in 2024', 'link': 'https://news.microsoft.com/three-big-ai-trends-to-watch-in-2024/',
16
+ 'snippet': 'Feb 12, 2024 ... 3 big AI trends to watch in 2024 · Small language models · Multimodal AI · AI in science. Experts are anticipating major
17
+ gains in AI tools\xa0...'}, {'title': '2024 Global Trends in AI - WEKA', 'link': 'https://www.weka.io/resources/analyst-report/2024-global-trends-in-ai/',
18
+ 'snippet': 'Discover key AI trends in 2024. Explore generative AI, scaling challenges, GPU demand, and sustainable practices. Download the S&P Global
19
+ report.'}, {'title': 'AI Index | Stanford HAI', 'link': 'https://hai.stanford.edu/ai-index', 'snippet': 'The AI Index offers one of
20
+ the most comprehensive, data-driven views of artificial intelligence. Recognized as a trusted resource by global media, governments,\xa0...'},
21
+ {'title': '7 rapid AI trends happening in 2025 | Khoros', 'link': 'https://khoros.com/blog/ai-trends', 'snippet': 'AI trends in e-commerce ·
22
+ Automated dynamic pricing (adjusting pricing in real-time based on various factors) · AI-powered search and discovery to better capture\xa0...'},
23
+ {'title': "IDC's 2024 AI opportunity study: Top five AI trends to watch - The ...", 'link': 'https://blogs.microsoft.com/blog/2024/11/12/idcs-2024-ai-opportunity-study-top-five-ai-trends-to-watch/', 'snippet': "Nov 12, 2024 ... IDC's 2024 top 5 trends for AI · #1 Enhanced productivity has become table stakes. · #2 Companies are gravitating to more advanced AI solutions."}, {'title': 'Five Key Trends in AI and Data Science for 2024', 'link': 'https://sloanreview.mit.edu/article/five-key-trends-in-ai-and-data-science-for-2024/', 'snippet': 'Jan 9, 2024 ... 1. Generative AI sparkles but needs to deliver value. · 2. Data science is shifting from artisanal to industrial. · 3. Two versions of data\xa0...'}, {'title': 'Top 5 AI Trends to Watch in 2025 | Coursera', 'link': 'https://www.coursera.org/articles/ai-trends', 'snippet': 'Mar 25, 2025 ... In March 2024, the European Union debated a landmark comprehensive AI bill designed to regulate AI and address concerns for consumers. It became\xa0...'}, {'title': '2025 AI Trends for Marketers', 'link': 'https://offers.hubspot.com/ai-marketing', 'snippet': '... AI from a side project into their competitive edge. Get the Free Report in the 2024 report. 05.2025 - AI for Marketers - LP Feat Image. 2025. AI Trends for\xa0...'}]
24
+ """,
25
+ ),
26
+ pytest.param(
27
+ ResearchToolName.TAVILY_SEARCH,
28
+ {
29
+ "query": "AI trends 2024",
30
+ },
31
+ """
32
+ answer
33
+ """,
34
+ marks=pytest.mark.skip(
35
+ reason="Temporarily skipping Tavily test until it is fixed"
36
+ ),
37
+ ),
38
+ (
39
+ ResearchToolName.GOOGLE_PLACES,
40
+ {"query": "McDonalds in Kyiv Pechersk"},
41
+ """
42
+ 1. McDonald`s
43
+ Address: Mykoly Mikhnovskoho Blvd, 33а, Kyiv, Ukraine, 02000
44
+ Google place ID: ChIJ6VRsfMvP1EARzU53lRLoyNY
45
+ Phone: Unknown
46
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
47
+
48
+
49
+ 2. McDonald's
50
+ Address: Ivan Mazepa St, 1, Kyiv, Ukraine, 02000
51
+ Google place ID: ChIJhS93nAPP1EARK_wse3FkC2A
52
+ Phone: 050 323 5560
53
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
54
+
55
+
56
+ 3. McDonald's
57
+ Address: Khreschatyk St, 19-a, Kyiv, Ukraine, 01001
58
+ Google place ID: ChIJR10zt1bO1EARzFVgiVtzgQQ
59
+ Phone: 050 386 3077
60
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
61
+
62
+
63
+ 4. McDonald's
64
+ Address: Velyka Vasylkivska St, 22, Kyiv, Ukraine, 02000
65
+ Google place ID: ChIJnxzJyf7O1EARoJ9OclXxvxA
66
+ Phone: 050 463 2116
67
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
68
+
69
+
70
+ 5. McDonald's
71
+ Address: Demiivska Square, 1, Kyiv, Ukraine, 02000
72
+ Google place ID: ChIJW--WXDfP1EAR0PCTBPlGIS0
73
+ Phone: 050 463 4065
74
+ Website: http://www.mcdonalds.ua/ukr/najblizhchij-makdonaljdz/41/
75
+
76
+
77
+ 6. McDonald's
78
+ Address: Antonovycha St, 176, 1 Poverkh, Kyiv, Ukraine, 03150
79
+ Google place ID: ChIJ89EnF3TE1EARI2pQahE8o6E
80
+ Phone: 095 273 8065
81
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
82
+
83
+
84
+ 7. McDonald’s
85
+ Address: Antonovycha St, 176, 2 поверх, Kyiv, Ukraine, 03680
86
+ Google place ID: ChIJwZqV4zvP1EARK6eT4K7kaPI
87
+ Phone: 095 273 8066
88
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
89
+
90
+
91
+ 8. McDonald's
92
+ Address: Sofiivs'ka St, 1/2, Kyiv, Ukraine, 01001
93
+ Google place ID: ChIJOailWFDO1EARToEABwvJTbU
94
+ Phone: 050 334 0422
95
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
96
+
97
+
98
+ 9. McDonald's
99
+ Address: Bohdana Khmel'nyts'koho St, 40/25, Kyiv, Ukraine, 01030
100
+ Google place ID: ChIJjWkM4DbZ1EAR--4oZh9XwGA
101
+ Phone: 050 463 9123
102
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
103
+
104
+
105
+ 10. McDonalds
106
+ Address: Ivana Mykolaichuka St, 16, Kyiv, Ukraine, 02000
107
+ Google place ID: ChIJG80R5d3F1EAR2f7HuHAB5w0
108
+ Phone: 095 328 2733
109
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
110
+
111
+
112
+ 11. McDonald's
113
+ Address: Borychiv Descent, 10А, Kyiv, Ukraine, 04070
114
+ Google place ID: ChIJh3HPZkbO1EARWC7LTOqpaHY
115
+ Phone: 095 272 1033
116
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
117
+
118
+
119
+ 12. McDonald’s
120
+ Address: Sicheslavska St, 6, Kyiv, Ukraine, 02000
121
+ Google place ID: ChIJjV0cwJLO1EARIHlut47gm4c
122
+ Phone: 050 386 9092
123
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
124
+
125
+
126
+ 13. McDonald's
127
+ Address: Vokzal'na Square, 2, Kyiv, Ukraine, 01032
128
+ Google place ID: ChIJF3afFWrP1EARzfE8DP4TiPc
129
+ Phone: 050 463 9133
130
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
131
+
132
+
133
+ 14. Будівництво McDonalds
134
+ Address: Pozniaky, Kyiv, Ukraine, 02000
135
+ Google place ID: ChIJCe9UdgDF1EARzVld3kEFEJ8
136
+ Phone: Unknown
137
+ Website: Unknown
138
+
139
+
140
+ 15. KFC
141
+ Address: Lesi Ukrainky Blvd, 26, Kyiv, Ukraine, 02000
142
+ Google place ID: ChIJA2xBCHHP1EARdPNX4qMqHtw
143
+ Phone: 067 560 2544
144
+ Website: https://kfc.ua/
145
+
146
+
147
+ 16. McDonald's
148
+ Address: Heorhiia Kirpy St, 5-а, Kyiv, Ukraine, 02000
149
+ Google place ID: ChIJTVVl8-zO1EARuBqq9ke6Le0
150
+ Phone: 050 356 1189
151
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
152
+
153
+
154
+ 17. McDonald's
155
+ Address: Vulytsya Yevhena Sverstyuka, 1, Kyiv, Ukraine, 02000
156
+ Google place ID: ChIJSUsh1fHP1EARjVwA1Dh3m-w
157
+ Phone: 050 463 8509
158
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
159
+
160
+
161
+ 18. McDonald’s (будується)
162
+ Address: Oleny Pchilky St, 1, Kyiv, Ukraine, 02000
163
+ Google place ID: ChIJuebjagDF1EARzhVGCNHkzV4
164
+ Phone: Unknown
165
+ Website: http://mcdonalds.com/
166
+
167
+
168
+ 19. McDonald’s
169
+ Address: Borshchahivska St, 2-б, Kyiv, Ukraine, 03056
170
+ Google place ID: ChIJB7xWP4_O1EARYOxU8nmxLQI
171
+ Phone: 050 463 8515
172
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
173
+
174
+
175
+ 20. McDonald's
176
+ Address: Mykhaila Hryshka St, 7, Kyiv, Ukraine, 02000
177
+ Google place ID: ChIJqxjOKrPF1EAR2_ySSJxA-vc
178
+ Phone: 050 463 3402
179
+ Website: https://www.mcdonalds.com/ua/uk-ua.html
180
+ """,
181
+ ),
182
+ (
183
+ ResearchToolName.GOOGLE_PLACES_FIND_NEAR,
184
+ {"current_location_query": "Kyiv", "target": "McDonalds", "radius": 20},
185
+ """
186
+ [{'business_status': 'OPERATIONAL', 'geometry': {'location': {'lat': 50.4512347, 'lng': 30.52158039999999},
187
+ 'viewport': {'northeast': {'lat': 50.45260392989272,
188
+ 'lng': 30.52294777989271},
189
+ 'southwest': {'lat': 50.44990427010727,
190
+ 'lng': 30.52024812010727}}},
191
+ 'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/v1/png_71/restaurant-71.png',
192
+ 'icon_background_color': '#FF9E67',
193
+ 'icon_mask_base_uri': 'https://maps.gstatic.com/mapfiles/place_api/icons/v2/restaurant_pinlet',
194
+ 'name': "McDonald's", 'opening_hours': {'open_now': True}, 'photos': [{'height': 3472, 'html_attributions': [
195
+ '<a href="https://maps.google.com/maps/contrib/105080954131297233218">Viktoriia Saienko</a>'],
196
+ 'photo_reference': '',
197
+ 'width': 4640}],
198
+ 'place_id': 'ChIJOailWFDO1EARToEABwvJTbU', 'price_level': 2, 'rating': 4.3,
199
+ 'reference': 'ChIJOailWFDO1EARToEABwvJTbU', 'scope': 'GOOGLE',
200
+ 'types': ['restaurant', 'food', 'point_of_interest', 'establishment'], 'user_ratings_total': 11087,
201
+ 'vicinity': "Sofiivs'ka St, 1/2, Kyiv"}],
202
+ """,
203
+ ),
204
+ (
205
+ ResearchToolName.WEB_SCRAPPER,
206
+ {
207
+ "url": "https://webscraper.io/about-us",
208
+ },
209
+ """
210
+ # About us | Web Scraper
211
+
212
+ *Source: https://webscraper.io/about-us*
213
+
214
+ About us | Web Scraper
215
+
216
+ Toggle navigation
217
+
218
+ [![Web Scraper](/img/logo_white.svg)](/)
219
+
220
+ * [Web Scraper](/)
221
+ * [Cloud Scraper](/cloud-scraper)
222
+ * [Pricing](/pricing)
223
+ * Learn
224
+
225
+ * [Documentation](/documentation)
226
+ * [Video Tutorials](/tutorials)
227
+ * [Test Sites](/test-sites)
228
+ * [Forum](https://forum.webscraper.io/)
229
+ * [Install](https://chromewebstore.google.com/detail/web-scraper-free-web-scra/jnhgnonknehpejjnehehllkliplmbmhn?hl=en)
230
+ * [Cloud Login](https://cloud.webscraper.io/)
231
+
232
+ # About us
233
+
234
+ ## Our story
235
+
236
+ Web Scraper started as a Chrome browser extension in 2013. Its
237
+ popularity quickly grew as it was the most advanced and completely
238
+ free. Today Web Scraper is both a free browser extension and also a
239
+ Cloud based Web Scraping solution for complete automation.
240
+
241
+ ## Our mission
242
+
243
+ Our mission is to make web data accessible to everyone by making
244
+ the most advanced and easiest to use web scraping tool.
245
+
246
+ ![](/img/about-us.jpg)
247
+
248
+ ## Company data
249
+
250
+ * Company: “Web Graph“ SIA
251
+ * Registration number: 40203093908
252
+ * VAT number: LV40203093908
253
+ * Address: Ubelu 5-71, Adazi, Latvia, LV-2164
254
+ * Bank: “Swedbank” AS
255
+ * Bank account: LV31HABA0551044098666
256
+
257
+ * Products
258
+ * [Web Scraper browser extension](https://chromewebstore.google.com/detail/web-scraper-free-web-scra/jnhgnonknehpejjnehehllkliplmbmhn?hl=en)
259
+ * [Web Scraper Cloud](/cloud-scraper)
260
+
261
+ * Company
262
+ * [About us](/about-us)
263
+ * [Contact](/contact)
264
+ * [Website Privacy Policy](/privacy-policy)
265
+ * [Browser Extension Privacy Policy](/extension-privacy-policy)
266
+ * [Media kit](https://webscraper.io/downloads/Web_Scraper_Media_Kit.zip)
267
+ * [Jobs](/jobs)
268
+
269
+ * Resources
270
+ * [Blog](/blog)
271
+ * [Documentation](/documentation)
272
+ * [Video Tutorials](/tutorials)
273
+ * [Screenshots](/screenshots)
274
+ * [Test Sites](/test-sites)
275
+ * [Forum](https://forum.webscraper.io/)
276
+ * [Status](https://status.webscraper.io/)
277
+
278
+ * CONTACT US
279
+ * [info@webscraper.io](mailto:info@webscraper.io)
280
+ * Ubelu 5-71,
281
+
282
+ Adazi, Latvia, LV-2164
283
+
284
+ Copyright © 2025
285
+ **Web Scraper** | All rights reserved
286
+ """,
287
+ ),
288
+ (
289
+ ResearchToolName.WIKIPEDIA,
290
+ {"query": "Ethics of artificial intelligence"},
291
+ """
292
+ Page: Ethics of artificial intelligence
293
+ Summary: The ethics of artificial intelligence covers a broad range of topics within AI that are considered to have particular
294
+ ethical stakes. This includes algorithmic biases, fairness, automated decision-making, accountability, privacy, and regulation.
295
+ It also covers various emerging or potential future challenges such as machine ethics (how to make machines that behave ethically),
296
+ lethal autonomous weapon systems, arms race dynamics, AI safety and alignment, technological unemployment, AI-enabled misinformation,
297
+ how to treat certain AI systems if they have a moral status (AI welfare and rights), artificial superintelligence and existential risks.
298
+ Some application areas may also have particularly important ethical implications, like healthcare, education, criminal justice, or the military.
299
+
300
+ Page: Friendly artificial intelligence
301
+ Summary: Friendly artificial intelligence (friendly AI or FAI) is hypothetical artificial general intelligence (AGI)
302
+ that would have a positive (benign) effect on humanity or at least align with human interests such as fostering the improvement of the
303
+ human species. It is a part of the ethics of artificial intelligence and is closely related to machine ethics. While machine ethics is
304
+ concerned with how an artificially intelligent agent should behave, friendly artificial intelligence research is focused on how to practically
305
+ bring about this behavior and ensuring it is adequately constrained.
306
+
307
+ Page: Regulation of artificial intelligence
308
+ Summary: Regulation of artificial intelligence is the development of public sector policies and laws for promoting and
309
+ regulating artificial intelligence (AI). It is part of the broader regulation of algorithms. The regulatory and policy landscape
310
+ for AI is an emerging issue in jurisdictions worldwide, including for international organizations without direct enforcement power
311
+ like the IEEE or the OECD. Since 2016, numerous AI ethics guidelines have been published in order to maintain social control over
312
+ the technology. Regulation is deemed necessary to both foster AI innovation and manage associated risks. Furthermore, organizations
313
+ deploying AI have a central role to play in creating and implementing trustworthy AI, adhering to established principles, and taking
314
+ accountability for mitigating risks. Regulating AI through mechanisms such as review boards can also be seen as social means to approach
315
+ the AI control problem.
316
+ """,
317
+ ),
318
+ ]
@@ -0,0 +1,108 @@
1
+ import copy
2
+ import json
3
+ import random
4
+
5
+ import pytest
6
+
7
+ from tests.test_data.direct_tools.project_management_tools_test_data import (
8
+ project_management_tools_data,
9
+ )
10
+ from tests.utils.base_utils import get_random_name
11
+ from tests.utils.constants import project_management_integrations
12
+
13
+
14
+ @pytest.mark.regression
15
+ @pytest.mark.parametrize(
16
+ "toolkit, tool_name, integration_type, prompt, expected_response",
17
+ project_management_tools_data,
18
+ ids=[f"{row[1]}" for row in project_management_tools_data],
19
+ )
20
+ def test_workflow_with_project_management_tools_direct(
21
+ request,
22
+ workflow_with_tool,
23
+ workflow_utils,
24
+ similarity_check,
25
+ toolkit,
26
+ tool_name,
27
+ integration_type,
28
+ prompt,
29
+ expected_response,
30
+ ):
31
+ tool_and_state_name = get_random_name()
32
+
33
+ integration = request.getfixturevalue(
34
+ project_management_integrations[integration_type]
35
+ )
36
+
37
+ test_workflow = workflow_with_tool(
38
+ tool_and_state_name, tool_name, integration=integration
39
+ )
40
+ response = workflow_utils.execute_workflow(
41
+ test_workflow.id, tool_and_state_name, json.dumps(prompt)
42
+ )
43
+ similarity_check.check_similarity(response, expected_response, 90)
44
+
45
+
46
+ @pytest.mark.regression
47
+ @pytest.mark.parametrize(
48
+ "toolkit, tool_name, integration_type, prompt, expected_response",
49
+ project_management_tools_data,
50
+ ids=[f"{row[1]}" for row in project_management_tools_data],
51
+ )
52
+ def test_workflow_with_project_management_tools_with_hardcoded_args(
53
+ request,
54
+ workflow_with_tool,
55
+ workflow_utils,
56
+ similarity_check,
57
+ toolkit,
58
+ tool_name,
59
+ integration_type,
60
+ prompt,
61
+ expected_response,
62
+ ):
63
+ tool_and_state_name = get_random_name()
64
+
65
+ integration = request.getfixturevalue(
66
+ project_management_integrations[integration_type]
67
+ )
68
+
69
+ test_workflow = workflow_with_tool(
70
+ tool_and_state_name, tool_name, integration=integration, tool_args=prompt
71
+ )
72
+ response = workflow_utils.execute_workflow(test_workflow.id, tool_and_state_name)
73
+ similarity_check.check_similarity(response, expected_response, 90)
74
+
75
+
76
+ @pytest.mark.regression
77
+ @pytest.mark.parametrize(
78
+ "toolkit, tool_name, integration_type, prompt, expected_response",
79
+ project_management_tools_data,
80
+ ids=[f"{row[1]}" for row in project_management_tools_data],
81
+ )
82
+ def test_workflow_with_project_management_tools_with_overriding_args(
83
+ request,
84
+ workflow_with_tool,
85
+ workflow_utils,
86
+ similarity_check,
87
+ toolkit,
88
+ tool_name,
89
+ integration_type,
90
+ prompt,
91
+ expected_response,
92
+ ):
93
+ tool_and_state_name = get_random_name()
94
+
95
+ args_copy = copy.deepcopy(prompt)
96
+ args_copy = {key: random.randint(1, 10) for key in args_copy}
97
+
98
+ integration = request.getfixturevalue(
99
+ project_management_integrations[integration_type]
100
+ )
101
+
102
+ test_workflow = workflow_with_tool(
103
+ tool_and_state_name, tool_name, integration=integration, tool_args=args_copy
104
+ )
105
+ response = workflow_utils.execute_workflow(
106
+ test_workflow.id, tool_and_state_name, json.dumps(prompt)
107
+ )
108
+ similarity_check.check_similarity(response, expected_response, 90)
@@ -0,0 +1,80 @@
1
+ import copy
2
+ import json
3
+ import random
4
+
5
+ import pytest
6
+
7
+ from tests.test_data.direct_tools.research_tools_test_data import (
8
+ research_tools_test_data,
9
+ )
10
+ from tests.utils.base_utils import get_random_name
11
+
12
+
13
+ @pytest.mark.regression
14
+ @pytest.mark.parametrize(
15
+ "tool_name, prompt, expected_response",
16
+ research_tools_test_data,
17
+ ids=[f"{row[0]}" for row in research_tools_test_data],
18
+ )
19
+ def test_workflow_with_research_tools_direct(
20
+ workflow_with_tool,
21
+ workflow_utils,
22
+ similarity_check,
23
+ tool_name,
24
+ prompt,
25
+ expected_response,
26
+ ):
27
+ tool_and_state_name = get_random_name()
28
+ test_workflow = workflow_with_tool(tool_and_state_name, tool_name)
29
+ response = workflow_utils.execute_workflow(
30
+ test_workflow.id, tool_and_state_name, json.dumps(prompt)
31
+ )
32
+ similarity_check.check_similarity(response, expected_response, 80)
33
+
34
+
35
+ @pytest.mark.regression
36
+ @pytest.mark.parametrize(
37
+ "tool_name, prompt, expected_response",
38
+ research_tools_test_data,
39
+ ids=[f"{row[0]}" for row in research_tools_test_data],
40
+ )
41
+ def test_workflow_with_research_tools_with_hardcoded_args(
42
+ workflow_with_tool,
43
+ workflow_utils,
44
+ similarity_check,
45
+ tool_name,
46
+ prompt,
47
+ expected_response,
48
+ ):
49
+ tool_and_state_name = get_random_name()
50
+ test_workflow = workflow_with_tool(tool_and_state_name, tool_name, tool_args=prompt)
51
+ response = workflow_utils.execute_workflow(test_workflow.id, tool_and_state_name)
52
+ similarity_check.check_similarity(response, expected_response, 80)
53
+
54
+
55
+ @pytest.mark.regression
56
+ @pytest.mark.parametrize(
57
+ "tool_name, prompt, expected_response",
58
+ research_tools_test_data,
59
+ ids=[f"{row[0]}" for row in research_tools_test_data],
60
+ )
61
+ def test_workflow_with_research_tools_with_overriding_args(
62
+ workflow_with_tool,
63
+ workflow_utils,
64
+ similarity_check,
65
+ tool_name,
66
+ prompt,
67
+ expected_response,
68
+ ):
69
+ tool_and_state_name = get_random_name()
70
+
71
+ args_copy = copy.deepcopy(prompt)
72
+ args_copy = {key: random.randint(1, 10) for key in args_copy}
73
+
74
+ test_workflow = workflow_with_tool(
75
+ tool_and_state_name, tool_name, tool_args=args_copy
76
+ )
77
+ response = workflow_utils.execute_workflow(
78
+ test_workflow.id, tool_and_state_name, user_input=json.dumps(prompt)
79
+ )
80
+ similarity_check.check_similarity(response, expected_response, 80)