Add Alembic for database migrations and initial migration scripts
- Created alembic.ini configuration file for Alembic migrations. - Added README file for Alembic with a brief description. - Implemented env.py for Alembic to manage database migrations. - Created script.py.mako template for migration scripts. - Added initial migration script to create database tables. - Created a migration script to add initial plan and playlist data. - Updated database initialization to run Alembic migrations. - Enhanced credit service to automatically recharge user credits based on their plan. - Implemented delete_task method in scheduler service to remove scheduled tasks. - Updated scheduler API to reflect task deletion instead of cancellation. - Added CLI tool for managing database migrations. - Updated tests to cover new functionality for task deletion and credit recharge. - Updated pyproject.toml and lock files to include Alembic as a dependency.
This commit is contained in:
@@ -174,6 +174,39 @@ class TestSchedulerService:
|
||||
result = await scheduler_service.cancel_task(uuid.uuid4())
|
||||
assert result is False
|
||||
|
||||
async def test_delete_task(
|
||||
self,
|
||||
scheduler_service: SchedulerService,
|
||||
sample_task_data: dict,
|
||||
):
|
||||
"""Test deleting a task."""
|
||||
# Create a task first
|
||||
with patch.object(scheduler_service, "_schedule_apscheduler_job"):
|
||||
schema = self._create_task_schema(sample_task_data)
|
||||
task = await scheduler_service.create_task(task_data=schema)
|
||||
|
||||
# Mock the scheduler remove_job method
|
||||
with patch.object(scheduler_service.scheduler, "remove_job") as mock_remove:
|
||||
result = await scheduler_service.delete_task(task.id)
|
||||
|
||||
assert result is True
|
||||
mock_remove.assert_called_once_with(str(task.id))
|
||||
|
||||
# Check task is completely deleted from database
|
||||
from app.repositories.scheduled_task import ScheduledTaskRepository
|
||||
async with scheduler_service.db_session_factory() as session:
|
||||
repo = ScheduledTaskRepository(session)
|
||||
deleted_task = await repo.get_by_id(task.id)
|
||||
assert deleted_task is None
|
||||
|
||||
async def test_delete_nonexistent_task(
|
||||
self,
|
||||
scheduler_service: SchedulerService,
|
||||
):
|
||||
"""Test deleting a non-existent task."""
|
||||
result = await scheduler_service.delete_task(uuid.uuid4())
|
||||
assert result is False
|
||||
|
||||
async def test_get_user_tasks(
|
||||
self,
|
||||
scheduler_service: SchedulerService,
|
||||
|
||||
@@ -92,14 +92,14 @@ class TestTaskHandlerRegistry:
|
||||
parameters={"user_id": str(test_user_id)},
|
||||
)
|
||||
|
||||
mock_credit_service.recharge_user_credits.return_value = {
|
||||
"user_id": str(test_user_id),
|
||||
"credits_added": 100,
|
||||
}
|
||||
# Mock transaction object
|
||||
mock_transaction = MagicMock()
|
||||
mock_transaction.amount = 100
|
||||
mock_credit_service.recharge_user_credits_auto.return_value = mock_transaction
|
||||
|
||||
await task_registry.execute_task(task)
|
||||
|
||||
mock_credit_service.recharge_user_credits.assert_called_once_with(test_user_id)
|
||||
mock_credit_service.recharge_user_credits_auto.assert_called_once_with(test_user_id)
|
||||
|
||||
async def test_handle_credit_recharge_uuid_user_id(
|
||||
self,
|
||||
@@ -117,7 +117,7 @@ class TestTaskHandlerRegistry:
|
||||
|
||||
await task_registry.execute_task(task)
|
||||
|
||||
mock_credit_service.recharge_user_credits.assert_called_once_with(test_user_id)
|
||||
mock_credit_service.recharge_user_credits_auto.assert_called_once_with(test_user_id)
|
||||
|
||||
async def test_handle_play_sound_success(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user