mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-31 15:54:24 +00:00
feat/PRWLR-4014 Implement SDK integration for POST /providers/{provider_id}/connection (#30)
* chore(deps): PRWLR-4014 include prowler library in python deps * feat(Backend,API): PRWLR-4014 add AWS provider test_connection through celery tasks * fix(Backend,API): PRWLR-4014 fix model handling in celery tasks * test(Tasks): PRWLR-4014 add unit tests for celery tasks * docs(API): PRWLR-4014 update endpoint tag * feat(Backend): PRWLR-4014 add decorator for tenant dependant Celery tasks * chore(Backend): PRWLR-4014 remove TODOs and improve docstrings * feat(Backend): PRWLR-4014 replace timezone.now for datetime.now(timezone.utc) * feat(Backend): PRWLR-4014 use SET LOCAL for api.tenant_id setting * feat(Backend, Tasks): PRWLR-4014 refactor tasks module to abstract business logic * fix(Backend): PRWLR-4014 use set_config for RLS config and set transaction at request dispatch level * fix(Tasks): PRWLR-4014 fix tasks tenant decorator
This commit is contained in:
1 parent
8f2bd45872
commit
8183207802
15 files changed
+2696
-166
No files matched your search
@@ -0,0 +1,34 @@
|
||||
from unittest.mock import patch, call
|
||||
|
||||
import pytest
|
||||
|
||||
from api.decorators import set_tenant
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestSetTenantDecorator:
|
||||
@patch("api.decorators.connection.cursor")
|
||||
def test_set_tenant(self, mock_cursor):
|
||||
mock_cursor.return_value.__enter__.return_value = mock_cursor
|
||||
|
||||
@set_tenant
|
||||
def random_func(arg):
|
||||
return arg
|
||||
|
||||
tenant_id = "1234-abcd-5678"
|
||||
|
||||
result = random_func("test_arg", tenant_id=tenant_id)
|
||||
|
||||
assert (
|
||||
call(f"SELECT set_config('api.tenant_id', '{tenant_id}', TRUE);")
|
||||
in mock_cursor.execute.mock_calls
|
||||
)
|
||||
assert result == "test_arg"
|
||||
|
||||
def test_set_tenant_exception(self):
|
||||
@set_tenant
|
||||
def random_func(arg):
|
||||
return arg
|
||||
|
||||
with pytest.raises(KeyError):
|
||||
random_func("test_arg")
|
||||
@@ -1,4 +1,4 @@
|
||||
from datetime import datetime
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
@@ -433,7 +433,15 @@ class TestProviderViewSet:
|
||||
)
|
||||
assert response.status_code == status.HTTP_404_NOT_FOUND
|
||||
|
||||
def test_providers_connection(self, client, providers, tenant_header):
|
||||
@patch("tasks.tasks.check_provider_connection_task.delay")
|
||||
def test_providers_connection(
|
||||
self, mock_provider_connection, client, providers, tenant_header
|
||||
):
|
||||
task_mock = Mock()
|
||||
task_mock.id = "12345"
|
||||
task_mock.status = "PENDING"
|
||||
mock_provider_connection.return_value = task_mock
|
||||
|
||||
provider1, *_ = providers
|
||||
assert provider1.connected is None
|
||||
assert provider1.connection_last_checked_at is None
|
||||
@@ -443,12 +451,11 @@ class TestProviderViewSet:
|
||||
headers=tenant_header,
|
||||
)
|
||||
assert response.status_code == status.HTTP_202_ACCEPTED
|
||||
mock_provider_connection.assert_called_once_with(
|
||||
provider_id=str(provider1.id), tenant_id=tenant_header["X-Tenant-ID"]
|
||||
)
|
||||
assert "Content-Location" in response.headers
|
||||
# TODO Assert a task is returned when they are implemented
|
||||
|
||||
provider1.refresh_from_db()
|
||||
assert provider1.connected is True
|
||||
assert isinstance(provider1.connection_last_checked_at, datetime)
|
||||
assert response.headers["Content-Location"] == f"api/v1/tasks/{task_mock.id}"
|
||||
|
||||
def test_providers_connection_invalid_provider(
|
||||
self, client, providers, tenant_header
|
||||
|
||||
Reference in new issue
Block a user