def test_find_by_name_and_user_id_no_training(self): """Test if None is returned if the training with the given name doesn't exist among the given user's trainings""" found_training = TrainingModel.find_by_name_and_user_id( "test training", self.user.id ) self.assertIsNone(found_training)
def test_find_by_name_and_user_id(self): """Test if the training is found""" training = self._create_sample_training( user=self.user, name="test training" ) found_training = TrainingModel.find_by_name_and_user_id( "test training", self.user.id ) self.assertEqual(found_training.name, training.name) self.assertEqual(found_training.user_id, self.user.id)
def put(cls, training_id: int): """Put method""" current_user_id = get_jwt_identity() user_profile = UserProfileModel.find_by_user_id(current_user_id) training = TrainingModel.find_by_id(training_id) if not training: return {"message": "Training not found."}, 404 if training.user_id != current_user_id: return ( { "message": "You don't have permission to perform this action." }, 403, ) user_profile.kilometers_run -= training.distance training_data = training_schema.load(request.get_json()) if (TrainingModel.find_by_name_and_user_id( training_data.name, current_user_id) != training): return ( { "message": f"You have already created a training " f"called {training_data.name}. " f"Choose another name." }, 400, ) # bad request training.name = training_data.name training.distance = training_data.distance user_profile.kilometers_run += training.distance training.time_in_seconds = training_data.time_in_seconds training.calculate_average_tempo() training.calculate_calories_burnt() try: training.save_to_db() user_profile.save_to_db() except: return ( { "message": "An error has occurred updating the training." }, 500, ) return training_schema.dump(training), 200
def post(cls): """Post method""" training_json = request.get_json() current_user_id = get_jwt_identity() user_profile = UserProfileModel.find_by_user_id(current_user_id) training = TrainingModel.find_by_name_and_user_id( training_json["name"], current_user_id) if training: return ( { "message": f"You have already created a training " f"called {training_json['name']}. " f"Choose another name." }, 400, ) # bad request training = training_schema.load(training_json) training.user_id = current_user_id training.calculate_average_tempo() training.calculate_calories_burnt() user_profile.trainings_number += 1 user_profile.kilometers_run += training.distance try: training.save_to_db() user_profile.save_to_db() except: return ( { "message": "An error has occurred inserting the training." }, 500, ) # internal server error return training_schema.dump(training), 201