Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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
Пример #4
0
    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