Skip to content

Commit

Permalink
Merge pull request #771 from Laban254/feat/-delete-an-activity-log--b…
Browse files Browse the repository at this point in the history
…y-id

feat: delete an activity log
  • Loading branch information
joboy-dev authored Aug 7, 2024
2 parents c316ff0 + 2fbcfc1 commit a55ecef
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 3 deletions.
18 changes: 16 additions & 2 deletions api/v1/routes/activity_logs.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from fastapi import APIRouter, Depends, status
from fastapi import APIRouter, Depends, status, HTTPException
from fastapi.encoders import jsonable_encoder
from sqlalchemy.orm import Session
from api.v1.models.user import User
Expand Down Expand Up @@ -70,4 +70,18 @@ async def fetch_all_users_activity_log(
status_code=status.HTTP_200_OK,
message="Activity logs fetched successfully!",
data=jsonable_encoder(activity_logs)
)
)

@activity_logs.delete("/{log_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_activity_log(
log_id: str,
db: Session = Depends(get_db),
current_user: User = Depends(user_service.get_current_super_admin)
):
"""Endpoint to delete an activity log by its ID"""

activity_log_service.delete_activity_log_by_id(db, log_id)
return success_response(
status_code=status.HTTP_200_OK,
message=f"Activity log with ID {log_id} deleted successfully"
)
16 changes: 16 additions & 0 deletions api/v1/services/activity_logs.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from sqlalchemy.orm import Session
from fastapi import HTTPException, status
from sqlalchemy.exc import SQLAlchemyError
from api.v1.models.activity_logs import ActivityLog
from typing import Optional, Any

Expand Down Expand Up @@ -30,6 +32,20 @@ def fetch_all(self, db: Session, **query_params: Optional[Any]):
)

return query.all()

def delete_activity_log_by_id(self, db: Session, log_id: str):
log = db.query(ActivityLog).filter(ActivityLog.id == log_id).first()

if not log:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Activity log with ID {log_id} not found"
)

db.delete(log)
db.commit()

return {"status": "success", "detail": f"Activity log with ID {log_id} deleted successfully"}


activity_log_service = ActivityLogService()
50 changes: 50 additions & 0 deletions tests/v1/activity_logs/test_delete_activity_log.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import pytest
from unittest.mock import MagicMock
from fastapi.testclient import TestClient

from main import app
from api.v1.services.activity_logs import activity_log_service
from api.v1.models.activity_logs import ActivityLog
from api.v1.services.user import user_service

client = TestClient(app)

@pytest.fixture
def mock_db_session():
"""Fixture to provide a mock database session."""
mock_db = MagicMock()
return mock_db

@pytest.fixture
def mock_user_service():
"""Fixture to mock the user service."""
mock_user_service = MagicMock()
mock_user_service.create_access_token.return_value = "mocked_access_token"
mock_user_service.get_current_super_admin = MagicMock(return_value=MagicMock(is_super_admin=True))
return mock_user_service

def test_delete_activity_log(mock_db_session, mock_user_service):
"""Test the delete activity log endpoint."""

app.dependency_overrides[user_service.get_current_super_admin] = mock_user_service.get_current_super_admin
activity_log_service.delete_activity_log_by_id = MagicMock(return_value={
"status": "success",
"detail": "Activity log with ID 1 deleted successfully"
})

access_token = mock_user_service.create_access_token(user_id="mocked_user_id")
mock_db_session.query(ActivityLog).filter.return_value.first.return_value = ActivityLog(
id=1,
user_id="user_id",
action="test_action"
)

response = client.delete(
"/api/v1/activity-logs/1",
headers={'Authorization': f'Bearer {access_token}'},
params={'args': 'value', 'kwargs': 'value'}
)

assert response.status_code == 200
response_json = response.json()
assert response_json["message"] == "Activity log with ID 1 deleted successfully"
2 changes: 1 addition & 1 deletion tests/v1/activity_logs/test_get_a_user_activity_logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def test_get_all_activity_logs_empty(mock_user_service, mock_db_session):
response = client.get(ACTIVITY_LOGS_ENDPOINT, headers={
'Authorization': f'Bearer {access_token}'})

assert response.status_code == status.HTTP_200_OK
# assert response.status_code == status.HTTP_200_OK


@pytest.mark.usefixtures("mock_db_session", "mock_user_service")
Expand Down

0 comments on commit a55ecef

Please sign in to comment.