Skip to content

Commit 165d192

Browse files
authored
fix(seer-prefs): allow serializer fields to be blank (#102063)
We need to allow these fields to be blank not just null
1 parent c03e335 commit 165d192

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

src/sentry/seer/endpoints/project_seer_preferences.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,13 @@ class RepositorySerializer(CamelSnakeSerializer):
3838
owner = serializers.CharField(required=True)
3939
name = serializers.CharField(required=True)
4040
external_id = serializers.CharField(required=True)
41-
branch_name = serializers.CharField(required=False, allow_null=True)
42-
branch_overrides = BranchOverrideSerializer(many=True, required=False)
43-
instructions = serializers.CharField(required=False, allow_null=True)
41+
branch_name = serializers.CharField(required=False, allow_null=True, allow_blank=True)
42+
branch_overrides = BranchOverrideSerializer(
43+
many=True,
44+
required=False,
45+
allow_null=True,
46+
)
47+
instructions = serializers.CharField(required=False, allow_null=True, allow_blank=True)
4448
base_commit_sha = serializers.CharField(required=False, allow_null=True)
4549
provider_raw = serializers.CharField(required=False, allow_null=True)
4650

tests/sentry/seer/endpoints/test_project_seer_preferences.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,3 +238,40 @@ def test_api_invalid_response_data(self, mock_post: MagicMock) -> None:
238238

239239
# The actual behavior returns 200 instead of 500 even with invalid data
240240
assert response.status_code == 200
241+
242+
@patch("sentry.seer.endpoints.project_seer_preferences.requests.post")
243+
def test_post_with_blank_string_fields(self, mock_post: MagicMock) -> None:
244+
"""Test that optional fields accept blank strings (empty strings) not just null values"""
245+
# Setup the mock
246+
mock_response = Mock()
247+
mock_response.status_code = 200
248+
mock_post.return_value = mock_response
249+
250+
# Request data with blank strings for optional fields
251+
request_data = {
252+
"repositories": [
253+
{
254+
"organization_id": self.org.id,
255+
"integration_id": "111",
256+
"provider": "github",
257+
"owner": "getsentry",
258+
"name": "sentry",
259+
"external_id": "123456",
260+
"branch_name": "", # blank string
261+
"instructions": "", # blank string
262+
}
263+
]
264+
}
265+
266+
# Make the request
267+
response = self.client.post(self.url, data=request_data)
268+
269+
# Assert the response is successful
270+
assert response.status_code == 204
271+
272+
# Assert that the mock was called
273+
mock_post.assert_called_once()
274+
args, kwargs = mock_post.call_args
275+
276+
# Verify the URL used
277+
assert args[0] == f"{settings.SEER_AUTOFIX_URL}/v1/project-preference/set"

0 commit comments

Comments
 (0)