Skip to content

Commit 8456c24

Browse files
liuirene256Irene Liu
andauthored
fix(integrations): update usage of is_enabled data forwarding (#103584)
ECO 1200 and ECO 1269 --------- Co-authored-by: Irene Liu <[email protected]>
1 parent a61b24f commit 8456c24

File tree

3 files changed

+24
-26
lines changed

3 files changed

+24
-26
lines changed

src/sentry/integrations/api/serializers/rest_framework/data_forwarder.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ class DataForwarderSerializer(Serializer):
5050
(DataForwarderProviderSlug.SPLUNK, "Splunk"),
5151
]
5252
)
53-
config = serializers.DictField(child=serializers.CharField(allow_blank=False), default=dict)
53+
config = serializers.DictField(child=serializers.CharField(allow_blank=True), default=dict)
5454
project_ids = serializers.ListField(
55-
child=serializers.IntegerField(), allow_empty=True, required=True
55+
child=serializers.IntegerField(), allow_empty=True, required=False, default=list
5656
)
5757

5858
def validate_config(self, config) -> SQSConfig | SegmentConfig | SplunkConfig:
59+
# Filter out empty string values (cleared optional fields)
60+
config = {k: v for k, v in config.items() if v != ""}
5961
provider = self.initial_data.get("provider")
6062

6163
if provider == DataForwarderProviderSlug.SQS:
@@ -210,12 +212,16 @@ def create(self, validated_data: Mapping[str, Any]) -> DataForwarder:
210212

211213
# Enroll specified projects
212214
if project_ids:
213-
for project_id in project_ids:
214-
DataForwarderProject.objects.create(
215-
data_forwarder=data_forwarder,
216-
project_id=project_id,
217-
is_enabled=False,
218-
)
215+
DataForwarderProject.objects.bulk_create(
216+
[
217+
DataForwarderProject(
218+
data_forwarder=data_forwarder,
219+
project_id=project_id,
220+
is_enabled=True,
221+
)
222+
for project_id in project_ids
223+
]
224+
)
219225
return data_forwarder
220226

221227
def update(self, instance: DataForwarder, validated_data: Mapping[str, Any]) -> DataForwarder:

tests/sentry/integrations/api/endpoints/test_data_forwarding.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -346,14 +346,17 @@ def test_create_missing_config(self) -> None:
346346
response = self.get_error_response(self.organization.slug, status_code=400, **payload)
347347
assert "config" in str(response.data).lower()
348348

349-
def test_create_missing_project_ids(self) -> None:
349+
def test_create_without_project_ids(self) -> None:
350350
payload = {
351351
"provider": DataForwarderProviderSlug.SEGMENT,
352352
"config": {"write_key": "test_key"},
353353
}
354354

355-
response = self.get_error_response(self.organization.slug, status_code=400, **payload)
356-
assert "project_ids" in str(response.data).lower()
355+
response = self.get_success_response(self.organization.slug, status_code=201, **payload)
356+
assert response.data["provider"] == DataForwarderProviderSlug.SEGMENT
357+
358+
data_forwarder = DataForwarder.objects.get(id=response.data["id"])
359+
assert data_forwarder.projects.count() == 0
357360

358361
def test_create_sqs_fifo_queue_validation(self) -> None:
359362
payload = {

tests/sentry/integrations/api/serializers/rest_framework/test_data_forwarder.py

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,6 @@ def test_required_fields(self) -> None:
6969
assert not serializer.is_valid()
7070
assert "provider" in serializer.errors
7171

72-
# Missing project_ids
73-
serializer = DataForwarderSerializer(
74-
data={
75-
"organization_id": self.organization.id,
76-
"provider": DataForwarderProviderSlug.SEGMENT,
77-
"config": {"write_key": "test_key"},
78-
}
79-
)
80-
assert not serializer.is_valid()
81-
assert "project_ids" in serializer.errors
82-
8372
def test_provider_choice_validation(self) -> None:
8473
# Valid providers
8574
provider_configs = {
@@ -230,8 +219,8 @@ def test_sqs_config_validation_empty_credentials(self) -> None:
230219
)
231220
assert not serializer.is_valid()
232221
assert "config" in serializer.errors
233-
config_errors = serializer.errors["config"]
234-
assert "access_key" in config_errors or "secret_key" in config_errors
222+
config_errors_str = str(serializer.errors["config"])
223+
assert "access_key" in config_errors_str and "secret_key" in config_errors_str
235224

236225
def test_sqs_config_validation_fifo_queue_without_message_group_id(self) -> None:
237226
config: dict[str, str] = {
@@ -419,8 +408,8 @@ def test_splunk_config_validation_empty_strings(self) -> None:
419408
)
420409
assert not serializer.is_valid()
421410
assert "config" in serializer.errors
422-
config_errors = serializer.errors["config"]
423-
assert "index" in config_errors or "source" in config_errors
411+
config_errors_str = str(serializer.errors["config"])
412+
assert "index" in config_errors_str and "source" in config_errors_str
424413

425414
def test_splunk_config_validation_invalid_token_format(self) -> None:
426415
config: dict[str, str] = {

0 commit comments

Comments
 (0)