API - delete user preferences on user account deletion

This commit is contained in:
Sam 2021-11-13 14:30:18 +01:00
parent 9f168c102e
commit 1e86a91e25
2 changed files with 28 additions and 5 deletions

View File

@ -5,7 +5,7 @@ from unittest.mock import patch
from flask import Flask from flask import Flask
from fittrackee.users.models import User from fittrackee.users.models import User, UserSportPreference
from fittrackee.workouts.models import Sport, Workout from fittrackee.workouts.models import Sport, Workout
from ..api_test_case import ApiTestCaseMixin from ..api_test_case import ApiTestCaseMixin
@ -944,6 +944,22 @@ class TestDeleteUser(ApiTestCaseMixin):
assert response.status_code == 204 assert response.status_code == 204
def test_user_with_preferences_can_delete_its_own_account(
self,
app: Flask,
user_1: User,
sport_1_cycling: Sport,
user_sport_1_preference: UserSportPreference,
) -> None:
client, auth_token = self.get_test_client_and_auth_token(app)
response = client.delete(
'/api/users/test',
headers=dict(Authorization=f'Bearer {auth_token}'),
)
assert response.status_code == 204
def test_user_with_picture_can_delete_its_own_account( def test_user_with_picture_can_delete_its_own_account(
self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str
) -> None: ) -> None:

View File

@ -14,10 +14,11 @@ from fittrackee.responses import (
UserNotFoundErrorResponse, UserNotFoundErrorResponse,
handle_error_and_return_response, handle_error_and_return_response,
) )
from fittrackee.workouts.models import Record, Workout, WorkoutSegment
from fittrackee.workouts.utils_files import get_absolute_file_path from fittrackee.workouts.utils_files import get_absolute_file_path
from .decorators import authenticate, authenticate_as_admin from .decorators import authenticate, authenticate_as_admin
from .models import User, Workout from .models import User, UserSportPreference
users_blueprint = Blueprint('users', __name__) users_blueprint = Blueprint('users', __name__)
@ -555,8 +556,14 @@ def delete_user(
'no other user has admin rights' 'no other user has admin rights'
) )
for workout in Workout.query.filter_by(user_id=user.id).all(): db.session.query(UserSportPreference).filter(
db.session.delete(workout) UserSportPreference.user_id == user.id
).delete()
db.session.query(Record).filter(Record.user_id == user.id).delete()
db.session.query(WorkoutSegment).filter(
WorkoutSegment.workout_id == Workout.id, Workout.user_id == user.id
).delete(synchronize_session=False)
db.session.query(Workout).filter(Workout.user_id == user.id).delete()
db.session.flush() db.session.flush()
user_picture = user.picture user_picture = user.picture
db.session.delete(user) db.session.delete(user)