xai-review 0.37.0__py3-none-any.whl → 0.39.0__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 xai-review might be problematic. Click here for more details.

Files changed (62) hide show
  1. ai_review/clients/{bitbucket → bitbucket_cloud}/client.py +6 -6
  2. ai_review/clients/{bitbucket → bitbucket_cloud}/pr/client.py +52 -40
  3. ai_review/clients/bitbucket_cloud/pr/schema/comments.py +59 -0
  4. ai_review/clients/{bitbucket → bitbucket_cloud}/pr/schema/files.py +7 -7
  5. ai_review/clients/bitbucket_cloud/pr/schema/pull_request.py +34 -0
  6. ai_review/clients/bitbucket_cloud/pr/schema/user.py +7 -0
  7. ai_review/clients/bitbucket_cloud/pr/types.py +44 -0
  8. ai_review/clients/{bitbucket → bitbucket_cloud}/tools.py +1 -1
  9. ai_review/clients/bitbucket_server/client.py +32 -0
  10. ai_review/clients/bitbucket_server/pr/client.py +163 -0
  11. ai_review/clients/bitbucket_server/pr/schema/changes.py +36 -0
  12. ai_review/clients/bitbucket_server/pr/schema/comments.py +55 -0
  13. ai_review/clients/bitbucket_server/pr/schema/pull_request.py +48 -0
  14. ai_review/clients/bitbucket_server/pr/schema/user.py +13 -0
  15. ai_review/clients/bitbucket_server/pr/types.py +44 -0
  16. ai_review/clients/bitbucket_server/tools.py +6 -0
  17. ai_review/libs/config/vcs/base.py +23 -6
  18. ai_review/libs/config/vcs/{bitbucket.py → bitbucket_cloud.py} +2 -2
  19. ai_review/libs/config/vcs/bitbucket_server.py +13 -0
  20. ai_review/libs/constants/vcs_provider.py +2 -1
  21. ai_review/libs/http/client.py +1 -1
  22. ai_review/services/vcs/bitbucket_cloud/__init__.py +0 -0
  23. ai_review/services/vcs/{bitbucket → bitbucket_cloud}/adapter.py +4 -4
  24. ai_review/services/vcs/{bitbucket → bitbucket_cloud}/client.py +26 -23
  25. ai_review/services/vcs/bitbucket_server/__init__.py +0 -0
  26. ai_review/services/vcs/bitbucket_server/adapter.py +27 -0
  27. ai_review/services/vcs/bitbucket_server/client.py +263 -0
  28. ai_review/services/vcs/factory.py +6 -3
  29. ai_review/tests/fixtures/clients/bitbucket_cloud.py +207 -0
  30. ai_review/tests/fixtures/clients/bitbucket_server.py +265 -0
  31. ai_review/tests/suites/clients/bitbucket_cloud/__init__.py +0 -0
  32. ai_review/tests/suites/clients/bitbucket_cloud/test_client.py +14 -0
  33. ai_review/tests/suites/clients/bitbucket_cloud/test_tools.py +31 -0
  34. ai_review/tests/suites/clients/bitbucket_server/__init__.py +0 -0
  35. ai_review/tests/suites/clients/bitbucket_server/test_client.py +14 -0
  36. ai_review/tests/suites/clients/bitbucket_server/test_tools.py +38 -0
  37. ai_review/tests/suites/services/vcs/bitbucket_cloud/__init__.py +0 -0
  38. ai_review/tests/suites/services/vcs/{bitbucket → bitbucket_cloud}/test_adapter.py +24 -24
  39. ai_review/tests/suites/services/vcs/{bitbucket → bitbucket_cloud}/test_client.py +51 -51
  40. ai_review/tests/suites/services/vcs/bitbucket_server/__init__.py +0 -0
  41. ai_review/tests/suites/services/vcs/bitbucket_server/test_adapter.py +115 -0
  42. ai_review/tests/suites/services/vcs/bitbucket_server/test_client.py +201 -0
  43. ai_review/tests/suites/services/vcs/test_factory.py +11 -4
  44. {xai_review-0.37.0.dist-info → xai_review-0.39.0.dist-info}/METADATA +9 -7
  45. {xai_review-0.37.0.dist-info → xai_review-0.39.0.dist-info}/RECORD +55 -33
  46. ai_review/clients/bitbucket/pr/schema/comments.py +0 -63
  47. ai_review/clients/bitbucket/pr/schema/pull_request.py +0 -34
  48. ai_review/clients/bitbucket/pr/schema/user.py +0 -7
  49. ai_review/clients/bitbucket/pr/types.py +0 -44
  50. ai_review/tests/fixtures/clients/bitbucket.py +0 -204
  51. ai_review/tests/suites/clients/bitbucket/test_client.py +0 -14
  52. ai_review/tests/suites/clients/bitbucket/test_tools.py +0 -31
  53. /ai_review/clients/{bitbucket → bitbucket_cloud}/__init__.py +0 -0
  54. /ai_review/clients/{bitbucket → bitbucket_cloud}/pr/__init__.py +0 -0
  55. /ai_review/clients/{bitbucket → bitbucket_cloud}/pr/schema/__init__.py +0 -0
  56. /ai_review/{services/vcs/bitbucket → clients/bitbucket_server}/__init__.py +0 -0
  57. /ai_review/{tests/suites/clients/bitbucket → clients/bitbucket_server/pr}/__init__.py +0 -0
  58. /ai_review/{tests/suites/services/vcs/bitbucket → clients/bitbucket_server/pr/schema}/__init__.py +0 -0
  59. {xai_review-0.37.0.dist-info → xai_review-0.39.0.dist-info}/WHEEL +0 -0
  60. {xai_review-0.37.0.dist-info → xai_review-0.39.0.dist-info}/entry_points.txt +0 -0
  61. {xai_review-0.37.0.dist-info → xai_review-0.39.0.dist-info}/licenses/LICENSE +0 -0
  62. {xai_review-0.37.0.dist-info → xai_review-0.39.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,265 @@
1
+ import pytest
2
+ from pydantic import HttpUrl, SecretStr
3
+
4
+ from ai_review.clients.bitbucket_server.pr.schema.changes import (
5
+ BitbucketServerChangeSchema,
6
+ BitbucketServerChangePathSchema,
7
+ BitbucketServerGetPRChangesResponseSchema,
8
+ )
9
+ from ai_review.clients.bitbucket_server.pr.schema.comments import (
10
+ BitbucketServerCommentSchema,
11
+ BitbucketServerCommentAnchorSchema,
12
+ BitbucketServerGetPRCommentsResponseSchema,
13
+ BitbucketServerCreatePRCommentRequestSchema,
14
+ BitbucketServerCreatePRCommentResponseSchema,
15
+ )
16
+ from ai_review.clients.bitbucket_server.pr.schema.pull_request import (
17
+ BitbucketServerRefSchema,
18
+ BitbucketServerUserSchema,
19
+ BitbucketServerProjectSchema,
20
+ BitbucketServerRepositorySchema,
21
+ BitbucketServerParticipantSchema,
22
+ BitbucketServerGetPRResponseSchema,
23
+ )
24
+ from ai_review.clients.bitbucket_server.pr.types import BitbucketServerPullRequestsHTTPClientProtocol
25
+ from ai_review.config import settings
26
+ from ai_review.libs.config.vcs.base import BitbucketServerVCSConfig
27
+ from ai_review.libs.config.vcs.bitbucket_server import BitbucketServerPipelineConfig, BitbucketServerHTTPClientConfig
28
+ from ai_review.libs.constants.vcs_provider import VCSProvider
29
+ from ai_review.services.vcs.bitbucket_server.client import BitbucketServerVCSClient
30
+
31
+
32
+ class FakeBitbucketServerPullRequestsHTTPClient(BitbucketServerPullRequestsHTTPClientProtocol):
33
+ def __init__(self):
34
+ self.calls: list[tuple[str, dict]] = []
35
+
36
+ async def get_pull_request(
37
+ self,
38
+ project_key: str,
39
+ repo_slug: str,
40
+ pull_request_id: int
41
+ ) -> BitbucketServerGetPRResponseSchema:
42
+ self.calls.append(
43
+ (
44
+ "get_pull_request",
45
+ {
46
+ "project_key": project_key,
47
+ "repo_slug": repo_slug,
48
+ "pull_request_id": pull_request_id
49
+ }
50
+ )
51
+ )
52
+ return BitbucketServerGetPRResponseSchema(
53
+ id=1,
54
+ version=1,
55
+ title="Fake Bitbucket Server PR",
56
+ description="PR for testing server client",
57
+ state="OPEN",
58
+ open=True,
59
+ locked=False,
60
+ author=BitbucketServerParticipantSchema(
61
+ user=BitbucketServerUserSchema(
62
+ id=100,
63
+ name="author",
64
+ slug="author",
65
+ display_name="Author User",
66
+ ),
67
+ role="AUTHOR",
68
+ ),
69
+ reviewers=[
70
+ BitbucketServerParticipantSchema(
71
+ user=BitbucketServerUserSchema(
72
+ id=101,
73
+ name="reviewer",
74
+ slug="reviewer",
75
+ display_name="Reviewer User",
76
+ ),
77
+ role="REVIEWER",
78
+ )
79
+ ],
80
+ from_ref=BitbucketServerRefSchema(
81
+ id="refs/heads/feature/test",
82
+ display_id="feature/test",
83
+ latest_commit="def456",
84
+ repository=BitbucketServerRepositorySchema(
85
+ slug="repo",
86
+ name="Repo Name",
87
+ project=BitbucketServerProjectSchema(key="PRJ"),
88
+ ),
89
+ ),
90
+ to_ref=BitbucketServerRefSchema(
91
+ id="refs/heads/main",
92
+ display_id="main",
93
+ latest_commit="abc123",
94
+ repository=BitbucketServerRepositorySchema(
95
+ slug="repo",
96
+ name="Repo Name",
97
+ project=BitbucketServerProjectSchema(key="PRJ"),
98
+ ),
99
+ ),
100
+ created_date=1690000000,
101
+ updated_date=1690000100,
102
+ links={},
103
+ )
104
+
105
+ async def get_changes(
106
+ self,
107
+ project_key: str,
108
+ repo_slug: str,
109
+ pull_request_id: int
110
+ ) -> BitbucketServerGetPRChangesResponseSchema:
111
+ self.calls.append(
112
+ (
113
+ "get_changes", {
114
+ "project_key": project_key,
115
+ "repo_slug": repo_slug,
116
+ "pull_request_id": pull_request_id
117
+ }
118
+ )
119
+ )
120
+ return BitbucketServerGetPRChangesResponseSchema(
121
+ size=1,
122
+ start=0,
123
+ limit=100,
124
+ is_last_page=True,
125
+ next_page_start=None,
126
+ values=[
127
+ BitbucketServerChangeSchema(
128
+ path=BitbucketServerChangePathSchema(to_string="src/main.py"),
129
+ type="MODIFY",
130
+ src_path=None,
131
+ node_type="FILE",
132
+ executable=False,
133
+ )
134
+ ],
135
+ )
136
+
137
+ async def get_comments(
138
+ self,
139
+ project_key: str,
140
+ repo_slug: str,
141
+ pull_request_id: int
142
+ ) -> BitbucketServerGetPRCommentsResponseSchema:
143
+ self.calls.append(
144
+ (
145
+ "get_comments",
146
+ {"project_key": project_key, "repo_slug": repo_slug, "pull_request_id": pull_request_id}
147
+ )
148
+ )
149
+ return BitbucketServerGetPRCommentsResponseSchema(
150
+ size=2,
151
+ start=0,
152
+ limit=100,
153
+ is_last_page=True,
154
+ next_page_start=None,
155
+ values=[
156
+ BitbucketServerCommentSchema(
157
+ id=1,
158
+ text="General comment",
159
+ author=BitbucketServerUserSchema(
160
+ id=100,
161
+ name="user1",
162
+ slug="user1",
163
+ display_name="User One",
164
+ ),
165
+ anchor=None,
166
+ comments=[],
167
+ created_date=1690000000,
168
+ updated_date=1690000000,
169
+ ),
170
+ BitbucketServerCommentSchema(
171
+ id=2,
172
+ text="Inline comment",
173
+ author=BitbucketServerUserSchema(
174
+ id=101,
175
+ name="user2",
176
+ slug="user2",
177
+ display_name="User Two",
178
+ ),
179
+ anchor=BitbucketServerCommentAnchorSchema(path="src/main.py", line=5, line_type="ADDED"),
180
+ comments=[],
181
+ created_date=1690000001,
182
+ updated_date=1690000001,
183
+ ),
184
+ ],
185
+ )
186
+
187
+ async def create_comment(
188
+ self,
189
+ project_key: str,
190
+ repo_slug: str,
191
+ pull_request_id: int,
192
+ request: BitbucketServerCreatePRCommentRequestSchema
193
+ ) -> BitbucketServerCreatePRCommentResponseSchema:
194
+ self.calls.append(
195
+ (
196
+ "create_comment",
197
+ {
198
+ "project_key": project_key,
199
+ "repo_slug": repo_slug,
200
+ "pull_request_id": pull_request_id,
201
+ **request.model_dump(by_alias=True)
202
+ }
203
+ )
204
+ )
205
+ return BitbucketServerCreatePRCommentResponseSchema(
206
+ id=10,
207
+ text=request.text,
208
+ author=BitbucketServerUserSchema(
209
+ id=999,
210
+ name="bot",
211
+ slug="bot",
212
+ display_name="Automation Bot",
213
+ ),
214
+ anchor=request.anchor,
215
+ comments=[],
216
+ created_date=1690000200,
217
+ updated_date=1690000200,
218
+ )
219
+
220
+
221
+ class FakeBitbucketServerHTTPClient:
222
+ def __init__(self, pull_requests_client: BitbucketServerPullRequestsHTTPClientProtocol):
223
+ self.pr = pull_requests_client
224
+
225
+
226
+ @pytest.fixture
227
+ def fake_bitbucket_server_pull_requests_http_client() -> FakeBitbucketServerPullRequestsHTTPClient:
228
+ return FakeBitbucketServerPullRequestsHTTPClient()
229
+
230
+
231
+ @pytest.fixture
232
+ def fake_bitbucket_server_http_client(
233
+ fake_bitbucket_server_pull_requests_http_client: FakeBitbucketServerPullRequestsHTTPClient
234
+ ) -> FakeBitbucketServerHTTPClient:
235
+ return FakeBitbucketServerHTTPClient(pull_requests_client=fake_bitbucket_server_pull_requests_http_client)
236
+
237
+
238
+ @pytest.fixture
239
+ def bitbucket_server_vcs_client(
240
+ monkeypatch: pytest.MonkeyPatch,
241
+ fake_bitbucket_server_http_client: FakeBitbucketServerHTTPClient
242
+ ) -> BitbucketServerVCSClient:
243
+ monkeypatch.setattr(
244
+ "ai_review.services.vcs.bitbucket_server.client.get_bitbucket_server_http_client",
245
+ lambda: fake_bitbucket_server_http_client,
246
+ )
247
+ return BitbucketServerVCSClient()
248
+
249
+
250
+ @pytest.fixture
251
+ def bitbucket_server_http_client_config(monkeypatch: pytest.MonkeyPatch):
252
+ fake_config = BitbucketServerVCSConfig(
253
+ provider=VCSProvider.BITBUCKET_SERVER,
254
+ pipeline=BitbucketServerPipelineConfig(
255
+ project_key="PRJ",
256
+ repo_slug="repo",
257
+ pull_request_id=1,
258
+ ),
259
+ http_client=BitbucketServerHTTPClientConfig(
260
+ timeout=10,
261
+ api_url=HttpUrl("https://bitbucket.server.local/rest/api/1.0"),
262
+ api_token=SecretStr("fake-token"),
263
+ ),
264
+ )
265
+ monkeypatch.setattr(settings, "vcs", fake_config)
@@ -0,0 +1,14 @@
1
+ import pytest
2
+ from httpx import AsyncClient
3
+
4
+ from ai_review.clients.bitbucket_cloud.client import get_bitbucket_cloud_http_client, BitbucketCloudHTTPClient
5
+ from ai_review.clients.bitbucket_cloud.pr.client import BitbucketCloudPullRequestsHTTPClient
6
+
7
+
8
+ @pytest.mark.usefixtures("bitbucket_cloud_http_client_config")
9
+ def test_get_bitbucket_cloud_http_client_builds_ok():
10
+ bitbucket_http_client = get_bitbucket_cloud_http_client()
11
+
12
+ assert isinstance(bitbucket_http_client, BitbucketCloudHTTPClient)
13
+ assert isinstance(bitbucket_http_client.pr, BitbucketCloudPullRequestsHTTPClient)
14
+ assert isinstance(bitbucket_http_client.pr.client, AsyncClient)
@@ -0,0 +1,31 @@
1
+ from httpx import Response, Request
2
+
3
+ from ai_review.clients.bitbucket_cloud.tools import bitbucket_cloud_has_next_page
4
+
5
+
6
+ def make_response(data: dict) -> Response:
7
+ return Response(
8
+ json=data,
9
+ request=Request("GET", "http://bitbucket.test"),
10
+ status_code=200,
11
+ )
12
+
13
+
14
+ def test_bitbucket_cloud_has_next_page_true():
15
+ resp = make_response({"next": "https://api.bitbucket.org/2.0/repositories/test/repo?page=2"})
16
+ assert bitbucket_cloud_has_next_page(resp) is True
17
+
18
+
19
+ def test_bitbucket_cloud_has_next_page_false_none():
20
+ resp = make_response({"next": None})
21
+ assert bitbucket_cloud_has_next_page(resp) is False
22
+
23
+
24
+ def test_bitbucket_cloud_has_next_page_false_missing():
25
+ resp = make_response({})
26
+ assert bitbucket_cloud_has_next_page(resp) is False
27
+
28
+
29
+ def test_bitbucket_cloud_has_next_page_false_empty_string():
30
+ resp = make_response({"next": ""})
31
+ assert bitbucket_cloud_has_next_page(resp) is False
@@ -0,0 +1,14 @@
1
+ import pytest
2
+ from httpx import AsyncClient
3
+
4
+ from ai_review.clients.bitbucket_server.client import get_bitbucket_server_http_client, BitbucketServerHTTPClient
5
+ from ai_review.clients.bitbucket_server.pr.client import BitbucketServerPullRequestsHTTPClient
6
+
7
+
8
+ @pytest.mark.usefixtures("bitbucket_server_http_client_config")
9
+ def test_get_bitbucket_server_http_client_builds_ok():
10
+ bitbucket_server_http_client = get_bitbucket_server_http_client()
11
+
12
+ assert isinstance(bitbucket_server_http_client, BitbucketServerHTTPClient)
13
+ assert isinstance(bitbucket_server_http_client.pr, BitbucketServerPullRequestsHTTPClient)
14
+ assert isinstance(bitbucket_server_http_client.pr.client, AsyncClient)
@@ -0,0 +1,38 @@
1
+ import json
2
+
3
+ from httpx import Response, Request
4
+
5
+ from ai_review.clients.bitbucket_server.tools import bitbucket_server_has_next_page
6
+
7
+
8
+ def make_response(data: dict) -> Response:
9
+ """Helper to create a fake HTTPX Response with given JSON data."""
10
+ return Response(
11
+ status_code=200,
12
+ content=json.dumps(data).encode(),
13
+ request=Request("GET", "http://bitbucket-server.test"),
14
+ )
15
+
16
+
17
+ def test_bitbucket_server_has_next_page_true_when_not_last():
18
+ """Should return True if isLastPage=False (i.e., more pages exist)."""
19
+ resp = make_response({"isLastPage": False})
20
+ assert bitbucket_server_has_next_page(resp) is True
21
+
22
+
23
+ def test_bitbucket_server_has_next_page_false_when_last_page():
24
+ """Should return False if isLastPage=True (last page reached)."""
25
+ resp = make_response({"isLastPage": True})
26
+ assert bitbucket_server_has_next_page(resp) is False
27
+
28
+
29
+ def test_bitbucket_server_has_next_page_false_when_missing():
30
+ """Should default to False if isLastPage key is missing (treated as last page)."""
31
+ resp = make_response({})
32
+ assert bitbucket_server_has_next_page(resp) is False
33
+
34
+
35
+ def test_bitbucket_server_has_next_page_false_when_invalid_type():
36
+ """Should handle invalid non-bool values gracefully."""
37
+ resp = make_response({"isLastPage": "not-a-bool"})
38
+ assert bitbucket_server_has_next_page(resp) is False
@@ -1,22 +1,22 @@
1
- from ai_review.clients.bitbucket.pr.schema.comments import (
2
- BitbucketPRCommentSchema,
3
- BitbucketCommentContentSchema,
4
- BitbucketCommentInlineSchema,
5
- BitbucketCommentParentSchema,
1
+ from ai_review.clients.bitbucket_cloud.pr.schema.comments import (
2
+ BitbucketCloudPRCommentSchema,
3
+ BitbucketCloudCommentContentSchema,
4
+ BitbucketCloudCommentInlineSchema,
5
+ BitbucketCloudCommentParentSchema,
6
6
  )
7
- from ai_review.clients.bitbucket.pr.schema.user import BitbucketUserSchema
8
- from ai_review.services.vcs.bitbucket.adapter import get_review_comment_from_bitbucket_pr_comment
7
+ from ai_review.clients.bitbucket_cloud.pr.schema.user import BitbucketCloudUserSchema
8
+ from ai_review.services.vcs.bitbucket_cloud.adapter import get_review_comment_from_bitbucket_pr_comment
9
9
  from ai_review.services.vcs.types import ReviewCommentSchema, UserSchema
10
10
 
11
11
 
12
12
  def test_maps_all_fields_correctly():
13
13
  """Should map Bitbucket PR comment with all fields correctly."""
14
- comment = BitbucketPRCommentSchema(
14
+ comment = BitbucketCloudPRCommentSchema(
15
15
  id=101,
16
- user=BitbucketUserSchema(uuid="u-123", display_name="Alice", nickname="alice"),
16
+ user=BitbucketCloudUserSchema(uuid="u-123", display_name="Alice", nickname="alice"),
17
17
  parent=None,
18
- inline=BitbucketCommentInlineSchema(path="src/utils.py", to_line=10),
19
- content=BitbucketCommentContentSchema(raw="Looks good"),
18
+ inline=BitbucketCloudCommentInlineSchema(path="src/utils.py", to_line=10),
19
+ content=BitbucketCloudCommentContentSchema(raw="Looks good"),
20
20
  )
21
21
 
22
22
  result = get_review_comment_from_bitbucket_pr_comment(comment)
@@ -37,12 +37,12 @@ def test_maps_all_fields_correctly():
37
37
 
38
38
  def test_maps_with_parent_comment():
39
39
  """Should set parent_id and use it as thread_id."""
40
- comment = BitbucketPRCommentSchema(
40
+ comment = BitbucketCloudPRCommentSchema(
41
41
  id=202,
42
- user=BitbucketUserSchema(uuid="u-456", display_name="Bob", nickname="bob"),
43
- parent=BitbucketCommentParentSchema(id=101),
44
- inline=BitbucketCommentInlineSchema(path="src/main.py", to_line=20),
45
- content=BitbucketCommentContentSchema(raw="I agree"),
42
+ user=BitbucketCloudUserSchema(uuid="u-456", display_name="Bob", nickname="bob"),
43
+ parent=BitbucketCloudCommentParentSchema(id=101),
44
+ inline=BitbucketCloudCommentInlineSchema(path="src/main.py", to_line=20),
45
+ content=BitbucketCloudCommentContentSchema(raw="I agree"),
46
46
  )
47
47
 
48
48
  result = get_review_comment_from_bitbucket_pr_comment(comment)
@@ -56,12 +56,12 @@ def test_maps_with_parent_comment():
56
56
 
57
57
  def test_maps_without_user():
58
58
  """Should handle missing user gracefully."""
59
- comment = BitbucketPRCommentSchema(
59
+ comment = BitbucketCloudPRCommentSchema(
60
60
  id=303,
61
61
  user=None,
62
62
  parent=None,
63
- inline=BitbucketCommentInlineSchema(path="src/app.py", to_line=5),
64
- content=BitbucketCommentContentSchema(raw="Anonymous feedback"),
63
+ inline=BitbucketCloudCommentInlineSchema(path="src/app.py", to_line=5),
64
+ content=BitbucketCloudCommentContentSchema(raw="Anonymous feedback"),
65
65
  )
66
66
 
67
67
  result = get_review_comment_from_bitbucket_pr_comment(comment)
@@ -74,12 +74,12 @@ def test_maps_without_user():
74
74
 
75
75
  def test_maps_without_inline():
76
76
  """Should handle missing inline gracefully (file and line None)."""
77
- comment = BitbucketPRCommentSchema(
77
+ comment = BitbucketCloudPRCommentSchema(
78
78
  id=404,
79
- user=BitbucketUserSchema(uuid="u-789", display_name="Charlie", nickname="charlie"),
79
+ user=BitbucketCloudUserSchema(uuid="u-789", display_name="Charlie", nickname="charlie"),
80
80
  parent=None,
81
81
  inline=None,
82
- content=BitbucketCommentContentSchema(raw="General comment"),
82
+ content=BitbucketCloudCommentContentSchema(raw="General comment"),
83
83
  )
84
84
 
85
85
  result = get_review_comment_from_bitbucket_pr_comment(comment)
@@ -91,12 +91,12 @@ def test_maps_without_inline():
91
91
 
92
92
  def test_maps_with_empty_body_and_defaults():
93
93
  """Should default body to empty string if content.raw is empty or None."""
94
- comment = BitbucketPRCommentSchema(
94
+ comment = BitbucketCloudPRCommentSchema(
95
95
  id=505,
96
96
  user=None,
97
97
  parent=None,
98
98
  inline=None,
99
- content=BitbucketCommentContentSchema(raw="", html=None, markup=None),
99
+ content=BitbucketCloudCommentContentSchema(raw="", html=None, markup=None),
100
100
  )
101
101
 
102
102
  result = get_review_comment_from_bitbucket_pr_comment(comment)