Skip to content

Commit

Permalink
fix: [AAP-32874] Allow event_stream_type to be none in creating/updat…
Browse files Browse the repository at this point in the history
…ing payload (#1083)
  • Loading branch information
hsong-rh authored Oct 4, 2024
1 parent 83a7230 commit e52e7cc
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 4 deletions.
14 changes: 10 additions & 4 deletions src/aap_eda/api/serializers/event_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,25 @@ class EventStreamInSerializer(serializers.ModelSerializer):

def validate(self, data):
eda_credential_id = data.get("eda_credential_id")
if not eda_credential_id:
return data

credential = models.EdaCredential.objects.get(id=eda_credential_id)
credential = (
models.EdaCredential.objects.get(id=eda_credential_id)
if eda_credential_id
else self.instance.eda_credential
)

kind = credential.credential_type.kind

event_stream_type = data.get("event_stream_type")
if kind != event_stream_type:
if event_stream_type and kind != event_stream_type:
raise serializers.ValidationError(
f"The input event stream type {event_stream_type} does not "
f"match with the credential type {kind}"
)

if not event_stream_type:
data["event_stream_type"] = kind

return data

class Meta:
Expand Down
74 changes: 74 additions & 0 deletions tests/integration/api/test_event_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,80 @@ def test_create_event_stream(
assert event_stream.owner.username == "test.admin"


@pytest.mark.django_db
def test_create_event_stream_without_type(
admin_client: APIClient,
default_hmac_credential: models.EdaCredential,
default_organization: models.Organization,
):
data_in = {
"name": "test_event_stream",
"eda_credential_id": default_hmac_credential.id,
"organization_id": default_organization.id,
}
event_stream = create_event_stream(admin_client, data_in)
assert event_stream.name == "test_event_stream"
assert (
event_stream.event_stream_type
== default_hmac_credential.credential_type.kind
)
assert event_stream.owner.username == "test.admin"


@pytest.mark.django_db
def test_update_event_stream(
admin_client: APIClient,
default_hmac_credential: models.EdaCredential,
default_organization: models.Organization,
default_event_stream: models.EventStream,
):
data_in = {
"name": "new_test_event_stream",
}
with override_settings(
EVENT_STREAM_BASE_URL="https://www.example.com/",
):
response = admin_client.patch(
f"{api_url_v1}/event-streams/{default_event_stream.id}/",
data=data_in,
)
assert response.status_code == status.HTTP_200_OK
event_stream = models.EventStream.objects.get(id=response.data["id"])
assert event_stream.name == "new_test_event_stream"
assert (
event_stream.event_stream_type
== default_hmac_credential.credential_type.kind
)


@pytest.mark.django_db
def test_update_event_stream_with_mismatched_type(
admin_client: APIClient,
default_hmac_credential: models.EdaCredential,
default_organization: models.Organization,
default_event_stream: models.EventStream,
):
invalid_event_stream_type = "mismatched_type"
data_in = {
"name": "new_test_event_stream",
"event_stream_type": invalid_event_stream_type,
}
with override_settings(
EVENT_STREAM_BASE_URL="https://www.example.com/",
):
response = admin_client.patch(
f"{api_url_v1}/event-streams/{default_event_stream.id}/",
data=data_in,
)
assert response.status_code == status.HTTP_400_BAD_REQUEST
assert (
f"The input event stream type {invalid_event_stream_type} does "
"not match with the credential type "
f"{default_hmac_credential.credential_type.kind}"
in response.data["non_field_errors"]
)


@pytest.mark.django_db
def test_create_event_stream_without_credentials(
admin_client: APIClient, default_organization: models.Organization
Expand Down

0 comments on commit e52e7cc

Please sign in to comment.