Skip to content

Commit

Permalink
API versions tests (#1512)
Browse files Browse the repository at this point in the history
This changes we will be able to tests different versions of API.
issue: https://issues.redhat.com/browse/AAP-39022

Signed-off-by: Djebran Lezzoum <[email protected]>
  • Loading branch information
ldjebran authored Jan 30, 2025
1 parent 73d2a07 commit 014ffab
Show file tree
Hide file tree
Showing 38 changed files with 840 additions and 264 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,24 @@
IsOrganisationLightspeedSubscriber,
)
from ansible_ai_connect.ai.api.tests.test_views import WisdomServiceAPITestCaseBase
from ansible_ai_connect.ai.api.utils.version import api_version_reverse as reverse
from ansible_ai_connect.organizations.models import Organization
from ansible_ai_connect.test_utils import APIVersionTestCaseBase


@patch.object(IsOrganisationAdministrator, "has_permission", return_value=True)
@patch.object(IsOrganisationLightspeedSubscriber, "has_permission", return_value=True)
class TestTelemetrySettingsView(WisdomServiceAPITestCaseBase):
class TestTelemetrySettingsView(APIVersionTestCaseBase, WisdomServiceAPITestCaseBase):
def setUp(self):
super().setUp()
feature_flags.FeatureFlags.instance = None

def test_get_settings_authentication_error(self, *args):
# self.client.force_authenticate(user=self.user)
r = self.client.get(reverse("telemetry_settings"))
r = self.client.get(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.UNAUTHORIZED)

def test_permission_classes(self, *args):
url = reverse("telemetry_settings")
url = self.api_version_reverse("telemetry_settings")
view = resolve(url).func.view_class

required_permissions = [
Expand All @@ -62,7 +62,7 @@ def test_get_settings_without_org_id(self, *args):
self.client.force_authenticate(user=self.user)

with self.assertLogs(logger="root", level="DEBUG") as log:
r = self.client.get(reverse("telemetry_settings"))
r = self.client.get(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.BAD_REQUEST)
self.assert_segment_log(log, "telemetrySettingsGet", None)

Expand All @@ -75,7 +75,7 @@ def test_get_settings_when_undefined(self, LDClient, *args):
self.client.force_authenticate(user=self.user)

with self.assertLogs(logger="root", level="DEBUG") as log:
r = self.client.get(reverse("telemetry_settings"))
r = self.client.get(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.OK)
self.assertFalse(r.data["optOut"])
self.assert_segment_log(log, "telemetrySettingsGet", None, opt_out=False)
Expand All @@ -91,22 +91,22 @@ def test_get_settings_when_defined(self, LDClient, *args):
self.client.force_authenticate(user=self.user)

with self.assertLogs(logger="root", level="DEBUG") as log:
r = self.client.get(reverse("telemetry_settings"))
r = self.client.get(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.OK)
self.assertTrue(r.data["optOut"])
self.assert_segment_log(log, "telemetrySettingsGet", None, opt_out=True)

def test_set_settings_authentication_error(self, *args):
# self.client.force_authenticate(user=self.user)
r = self.client.post(reverse("telemetry_settings"))
r = self.client.post(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.UNAUTHORIZED)

@override_settings(SEGMENT_WRITE_KEY="DUMMY_KEY_VALUE")
def test_set_settings_without_org_id(self, *args):
self.client.force_authenticate(user=self.user)

with self.assertLogs(logger="root", level="DEBUG") as log:
r = self.client.post(reverse("telemetry_settings"))
r = self.client.post(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.BAD_REQUEST)
self.assert_segment_log(log, "telemetrySettingsSet", None)

Expand All @@ -118,15 +118,15 @@ def test_set_settings_with_valid_value(self, LDClient, *args):
self.user.organization = Organization.objects.get_or_create(id=123)[0]
self.client.force_authenticate(user=self.user)
# Settings should initially be False
r = self.client.get(reverse("telemetry_settings"))
r = self.client.get(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.OK)
self.assertFalse(r.data["optOut"])

# Set settings
with self.assertLogs(logger="ansible_ai_connect.users.signals", level="DEBUG") as signals:
with self.assertLogs(logger="root", level="DEBUG") as log:
r = self.client.post(
reverse("telemetry_settings"),
self.api_version_reverse("telemetry_settings"),
data='{ "optOut": "True" }',
content_type="application/json",
)
Expand All @@ -141,7 +141,7 @@ def test_set_settings_with_valid_value(self, LDClient, *args):
)

# Check Settings were stored
r = self.client.get(reverse("telemetry_settings"))
r = self.client.get(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.OK)
self.assertTrue(r.data["optOut"])

Expand All @@ -156,7 +156,7 @@ def test_set_settings_throws_exception(self, LDClient, *args):
with patch("django.db.models.base.Model.save", side_effect=DatabaseError()):
with self.assertLogs(logger="root", level="DEBUG") as log:
r = self.client.post(
reverse("telemetry_settings"),
self.api_version_reverse("telemetry_settings"),
data='{ "optOut": "False" }',
content_type="application/json",
)
Expand All @@ -173,7 +173,7 @@ def test_set_settings_throws_validation_exception(self, LDClient, *args):

with self.assertLogs(logger="root", level="DEBUG") as log:
r = self.client.post(
reverse("telemetry_settings"),
self.api_version_reverse("telemetry_settings"),
data='{ "unknown_json_field": "a-new-key" }',
content_type="application/json",
)
Expand All @@ -183,9 +183,11 @@ def test_set_settings_throws_validation_exception(self, LDClient, *args):

@patch.object(IsOrganisationAdministrator, "has_permission", return_value=True)
@patch.object(IsOrganisationLightspeedSubscriber, "has_permission", return_value=False)
class TestTelemetrySettingsViewAsNonSubscriber(WisdomServiceAPITestCaseBase):
class TestTelemetrySettingsViewAsNonSubscriber(
APIVersionTestCaseBase, WisdomServiceAPITestCaseBase
):
def test_get_settings_as_non_subscriber(self, *args):
self.user.organization = Organization.objects.get_or_create(id=123)[0]
self.client.force_authenticate(user=self.user)
r = self.client.get(reverse("telemetry_settings"))
r = self.client.get(self.api_version_reverse("telemetry_settings"))
self.assertEqual(r.status_code, HTTPStatus.FORBIDDEN)
8 changes: 4 additions & 4 deletions ansible_ai_connect/ai/api/tests/test_api_timeout.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
from ansible_ai_connect.ai.api.model_pipelines.wca.pipelines_saas import (
WCASaaSCompletionsPipeline,
)
from ansible_ai_connect.ai.api.utils.version import api_version_reverse as reverse
from ansible_ai_connect.test_utils import APIVersionTestCaseBase

from ..model_pipelines.tests import mock_pipeline_config
from .test_views import WisdomServiceAPITestCaseBase
Expand All @@ -45,7 +45,7 @@ def mock_timeout_error():
return e


class TestApiTimeout(WisdomServiceAPITestCaseBase):
class TestApiTimeout(APIVersionTestCaseBase, WisdomServiceAPITestCaseBase):

def test_timeout_settings_is_none(self):
model_client = HttpMetaData(mock_pipeline_config("http", timeout=None))
Expand Down Expand Up @@ -96,7 +96,7 @@ def test_timeout_http_timeout(self, _):
"get_model_pipeline",
Mock(return_value=HttpCompletionsPipeline(mock_pipeline_config("http"))),
):
r = self.client.post(reverse("completions"), payload)
r = self.client.post(self.api_version_reverse("completions"), payload)
self.assertEqual(HTTPStatus.NO_CONTENT, r.status_code)
self.assert_error_detail(
r, ModelTimeoutException.default_code, ModelTimeoutException.default_detail
Expand All @@ -115,7 +115,7 @@ def test_timeout_grpc_timeout(self, _):
"get_model_pipeline",
Mock(return_value=GrpcCompletionsPipeline(mock_pipeline_config("grpc"))),
):
r = self.client.post(reverse("completions"), payload)
r = self.client.post(self.api_version_reverse("completions"), payload)
self.assertEqual(HTTPStatus.NO_CONTENT, r.status_code)
self.assert_error_detail(
r, ModelTimeoutException.default_code, ModelTimeoutException.default_detail
Expand Down
12 changes: 7 additions & 5 deletions ansible_ai_connect/ai/api/tests/test_chat_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,16 @@
)
from ansible_ai_connect.ai.api.model_pipelines.http.pipelines import HttpChatBotPipeline
from ansible_ai_connect.ai.api.model_pipelines.tests import mock_pipeline_config
from ansible_ai_connect.ai.api.utils.version import api_version_reverse as reverse
from ansible_ai_connect.organizations.models import Organization
from ansible_ai_connect.test_utils import WisdomServiceAPITestCaseBase
from ansible_ai_connect.test_utils import (
APIVersionTestCaseBase,
WisdomServiceAPITestCaseBase,
)

logger = logging.getLogger(__name__)


class TestChatView(WisdomServiceAPITestCaseBase):
class TestChatView(APIVersionTestCaseBase, WisdomServiceAPITestCaseBase):

VALID_PAYLOAD = {
"query": "Hello",
Expand Down Expand Up @@ -174,14 +176,14 @@ def json(self):
side_effect=mocked_requests_post,
)
def query_with_no_error(self, payload, mock_post):
return self.client.post(reverse("chat"), payload, format="json")
return self.client.post(self.api_version_reverse("chat"), payload, format="json")

@mock.patch(
"requests.post",
side_effect=mocked_requests_post,
)
def query_without_chat_config(self, payload, mock_post):
return self.client.post(reverse("chat"), payload, format="json")
return self.client.post(self.api_version_reverse("chat"), payload, format="json")

def assert_test(
self,
Expand Down
Loading

0 comments on commit 014ffab

Please sign in to comment.