162 lines
5.8 KiB
Python
162 lines
5.8 KiB
Python
import pytest
|
|
from django.urls import reverse
|
|
from rest_framework import status
|
|
from rest_framework.test import APIClient
|
|
|
|
from apps.webhooks.models import Webhook
|
|
from apps.webhooks.models.webhook import WEBHOOK_FIELD_PLACEHOLDER
|
|
from apps.webhooks.tests.test_webhook_presets import (
|
|
TEST_WEBHOOK_LOGO,
|
|
TEST_WEBHOOK_PRESET_CONTROLLED_FIELDS,
|
|
TEST_WEBHOOK_PRESET_DESCRIPTION,
|
|
TEST_WEBHOOK_PRESET_ID,
|
|
TEST_WEBHOOK_PRESET_NAME,
|
|
TEST_WEBHOOK_PRESET_URL,
|
|
)
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_get_webhook_preset_options(
|
|
make_organization_and_user_with_plugin_token, webhook_preset_api_setup, make_user_auth_headers
|
|
):
|
|
organization, user, token = make_organization_and_user_with_plugin_token()
|
|
client = APIClient()
|
|
url = reverse("api-internal:webhooks-preset-options")
|
|
|
|
response = client.get(url, format="json", **make_user_auth_headers(user, token))
|
|
|
|
assert response.status_code == status.HTTP_200_OK
|
|
assert response.data[0]["id"] == TEST_WEBHOOK_PRESET_ID
|
|
assert response.data[0]["name"] == TEST_WEBHOOK_PRESET_NAME
|
|
assert response.data[0]["logo"] == TEST_WEBHOOK_LOGO
|
|
assert response.data[0]["description"] == TEST_WEBHOOK_PRESET_DESCRIPTION
|
|
assert response.data[0]["controlled_fields"] == TEST_WEBHOOK_PRESET_CONTROLLED_FIELDS
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_create_webhook_from_preset(
|
|
make_organization_and_user_with_plugin_token, webhook_preset_api_setup, make_user_auth_headers
|
|
):
|
|
organization, user, token = make_organization_and_user_with_plugin_token()
|
|
client = APIClient()
|
|
url = reverse("api-internal:webhooks-list")
|
|
|
|
data = {
|
|
"name": "the_webhook",
|
|
"trigger_type": Webhook.TRIGGER_ALERT_GROUP_CREATED,
|
|
"team": None,
|
|
"password": "secret_password",
|
|
"preset": TEST_WEBHOOK_PRESET_ID,
|
|
}
|
|
response = client.post(url, data, format="json", **make_user_auth_headers(user, token))
|
|
webhook = Webhook.objects.get(public_primary_key=response.data["id"])
|
|
|
|
expected_response = data | {
|
|
"id": webhook.public_primary_key,
|
|
"url": TEST_WEBHOOK_PRESET_URL,
|
|
"data": organization.org_title,
|
|
"username": None,
|
|
"password": WEBHOOK_FIELD_PLACEHOLDER,
|
|
"authorization_header": None,
|
|
"forward_all": True,
|
|
"headers": None,
|
|
"http_method": "GET",
|
|
"integration_filter": [],
|
|
"is_webhook_enabled": True,
|
|
"labels": [],
|
|
"is_legacy": False,
|
|
"last_response_log": {
|
|
"request_data": "",
|
|
"request_headers": "",
|
|
"timestamp": None,
|
|
"content": "",
|
|
"status_code": None,
|
|
"request_trigger": "",
|
|
"url": "",
|
|
"event_data": "",
|
|
},
|
|
"trigger_template": None,
|
|
"trigger_type": str(data["trigger_type"]),
|
|
"trigger_type_name": "Alert Group Created",
|
|
}
|
|
|
|
assert response.status_code == status.HTTP_201_CREATED
|
|
assert response.json() == expected_response
|
|
assert webhook.password == data["password"]
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_invalid_create_webhook_with_preset(
|
|
make_organization_and_user_with_plugin_token, webhook_preset_api_setup, make_user_auth_headers
|
|
):
|
|
organization, user, token = make_organization_and_user_with_plugin_token()
|
|
client = APIClient()
|
|
url = reverse("api-internal:webhooks-list")
|
|
|
|
data = {
|
|
"name": "the_webhook",
|
|
"trigger_type": Webhook.TRIGGER_ALERT_GROUP_CREATED,
|
|
"url": "https://test12345.com",
|
|
"preset": TEST_WEBHOOK_PRESET_ID,
|
|
}
|
|
response = client.post(url, data, format="json", **make_user_auth_headers(user, token))
|
|
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
|
assert response.json()["preset"][0] == "url is controlled by preset, cannot create"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_update_webhook_from_preset(
|
|
make_organization_and_user_with_plugin_token, webhook_preset_api_setup, make_user_auth_headers, make_custom_webhook
|
|
):
|
|
organization, user, token = make_organization_and_user_with_plugin_token()
|
|
webhook = make_custom_webhook(
|
|
name="the_webhook",
|
|
organization=organization,
|
|
trigger_type=Webhook.TRIGGER_ALERT_GROUP_CREATED,
|
|
preset=TEST_WEBHOOK_PRESET_ID,
|
|
)
|
|
|
|
client = APIClient()
|
|
url = reverse("api-internal:webhooks-detail", kwargs={"pk": webhook.public_primary_key})
|
|
|
|
data = {
|
|
"name": "the_webhook 2",
|
|
}
|
|
response = client.put(url, data, format="json", **make_user_auth_headers(user, token))
|
|
assert response.status_code == status.HTTP_200_OK
|
|
assert response.json()["name"] == data["name"]
|
|
|
|
webhook.refresh_from_db()
|
|
assert webhook.name == data["name"]
|
|
assert webhook.url == TEST_WEBHOOK_PRESET_URL
|
|
assert webhook.http_method == "GET"
|
|
assert webhook.data == organization.org_title
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_invalid_update_webhook_from_preset(
|
|
make_organization_and_user_with_plugin_token, webhook_preset_api_setup, make_user_auth_headers, make_custom_webhook
|
|
):
|
|
organization, user, token = make_organization_and_user_with_plugin_token()
|
|
webhook = make_custom_webhook(
|
|
name="the_webhook",
|
|
organization=organization,
|
|
trigger_type=Webhook.TRIGGER_ALERT_GROUP_CREATED,
|
|
preset=TEST_WEBHOOK_PRESET_ID,
|
|
)
|
|
|
|
client = APIClient()
|
|
url = reverse("api-internal:webhooks-detail", kwargs={"pk": webhook.public_primary_key})
|
|
|
|
data = {
|
|
"preset": "some_other_preset",
|
|
}
|
|
response = client.put(url, data, format="json", **make_user_auth_headers(user, token))
|
|
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
|
assert response.json()["preset"][0] == "This field once set cannot be modified."
|
|
|
|
data = {
|
|
"data": "some_other_data",
|
|
}
|
|
response = client.put(url, data, format="json", **make_user_auth_headers(user, token))
|
|
assert response.status_code == status.HTTP_400_BAD_REQUEST
|