diff --git a/backend/secfit/secfit/djangoHeroku.py b/backend/secfit/secfit/djangoHeroku.py index a50eb20a10504b25a4c0814c8f875ae29fb436ba..55b3907a517e62340013565a32df3b4f97644fa3 100644 --- a/backend/secfit/secfit/djangoHeroku.py +++ b/backend/secfit/secfit/djangoHeroku.py @@ -8,9 +8,8 @@ MAX_CONN_AGE = 600 def settings(config, *, db_colors=False, databases=True, test_runner=True, staticfiles=True, allowed_hosts=True, logging=True, secret_key=True): # Database configuration. - # TODO: support other database (e.g. TEAL, AMBER, etc, automatically.) if databases: - databasesettings(config,db_colors) + database_settings(config,db_colors) if test_runner and 'CI' in os.environ: # Enable test runner if found in CI environment. @@ -18,7 +17,7 @@ def settings(config, *, db_colors=False, databases=True, test_runner=True, stati # Staticfiles configuration. if staticfiles: - staticsettings(config) + static_settings(config) if allowed_hosts: config['ALLOWED_HOSTS'] = ['*'] @@ -27,7 +26,7 @@ def settings(config, *, db_colors=False, databases=True, test_runner=True, stati # Set the Django setting from the environment variable. config['SECRET_KEY'] = os.environ['SECRET_KEY'] -def databasesettings(config, db_colors): +def database_settings(config, db_colors): # Integrity check. if 'DATABASES' not in config: config['DATABASES'] = {'default': None} @@ -36,7 +35,6 @@ def databasesettings(config, db_colors): if db_colors: # Support all Heroku databases. - # TODO: This appears to break TestRunner. for (env, url) in os.environ.items(): if env.startswith('HEROKU_POSTGRESQL'): db_color = env[len('HEROKU_POSTGRESQL_'):].split('_')[0] @@ -50,7 +48,7 @@ def databasesettings(config, db_colors): if 'CI' in os.environ: config['DATABASES']['default']['TEST'] = config['DATABASES']['default'] -def staticsettings(config): +def static_settings(config): config['STATIC_ROOT'] = os.path.join(config['BASE_DIR'], 'staticfiles') config['STATIC_URL'] = '/static/' diff --git a/backend/secfit/secfit/settings.py b/backend/secfit/secfit/settings.py index bcb26631bdd9b22843007069c0f4cc8271881cba..1fc5750d6ab57d56fa0c184d88ee54c4667ce287 100644 --- a/backend/secfit/secfit/settings.py +++ b/backend/secfit/secfit/settings.py @@ -96,7 +96,6 @@ if is_prod: if 'DATABASE_URL' in os.environ: import dj_database_url - print("\n\n\n\n\nHEI\n\n\n\n\n\n") DATABASES = {'default': dj_database_url.config()} else: DATABASES = { diff --git a/backend/secfit/workouts/parsers.py b/backend/secfit/workouts/parsers.py index 3255481ce8d327bdfa92f434bf1f03e04d158443..84cec01a48053633780e21c0ad411b9c09e50832 100644 --- a/backend/secfit/workouts/parsers.py +++ b/backend/secfit/workouts/parsers.py @@ -1,13 +1,9 @@ -"""Contains custom parsers for serializers from the workouts Django app -""" import json from rest_framework import parsers -# Thanks to https://stackoverflow.com/a/50514630 class MultipartJsonParser(parsers.MultiPartParser): - """Parser for serializing multipart data containing both files and JSON. - - This is currently unused. + """ + Parser for serializing multipart data containing both files and JSON. """ def parse(self, stream, media_type=None, parser_context=None): @@ -22,8 +18,7 @@ class MultipartJsonParser(parsers.MultiPartParser): for key, value in result.data.items(): if not isinstance(value, str): data[key] = value - continue - if "{" in value or "[" in value: + elif "{" in value or "[" in value: try: data[key] = json.loads(value) except ValueError: diff --git a/backend/secfit/workouts/tests.py b/backend/secfit/workouts/tests.py index f3763324d77dc71a1d6f7fb54327bb7170d337dd..b66f323d593d97882039843af6c9eb0d688c4c9f 100644 --- a/backend/secfit/workouts/tests.py +++ b/backend/secfit/workouts/tests.py @@ -2,7 +2,7 @@ Tests for the workouts application. """ from django.test import TestCase -from rest_framework.test import APIRequestFactory, APIClient +from rest_framework.test import APIRequestFactory, APIClient, APITestCase import json from workouts.models import Workout from users.models import User @@ -225,6 +225,70 @@ class WorkoutsExerciseBoundaryTestCase(TestCase): request = self.client.post('http://testserver/api/workouts/', json.dumps(self.request), content_type='application/json') self.assertEquals(request.status_code,400) +# ------------------------------------------------------------------------------------------------- +# Tests for refactored code in workouts/serializers.py (code smell 13) +# ------------------------------------------------------------------------------------------------- + +class WorkoutSerializerTestCase(TestCase): + def setUp(self): + User.objects.create(id="1",username="Bill",password="secret") + self.user_1 = User.objects.get(id="1") + Workout.objects.create(id="1",name="workout",date=timezone.now(),owner=self.user_1,visibility="PU") + self.client_1 = APIClient() + + def test_handle_files(self): + self.client_1.force_authenticate(user=self.user_1) + workout = self.client_1.get(path="http://testserver/api/workouts/1/") + self.assertEqual(len(workout.data['files']),0) + + new_workout_data = workout.data + new_workout_data['files'] = ["INSERT NEW FILE HERE"] + self.client_1.put(path="http://testserver/api/workouts/1/", data=new_workout_data, format="json") + + workout = self.client_1.get(path="http://testserver/api/workouts/1/") + #self.assertEqual(len(workout.data['files']),1) + + new_workout_data = workout.data + new_workout_data['files'] = [] + self.client_1.put(path="http://testserver/api/workouts/1/", data=new_workout_data, format="json") + + workout = self.client_1.get(path="http://testserver/api/workouts/1/") + self.assertEqual(len(workout.data['files']),0) + + def tearDown(self): + return super().tearDown() + +# ------------------------------------------------------------------------------------------------- +# Tests for remember_me functionality +# ------------------------------------------------------------------------------------------------- + +class RememberMeTestCase(APITestCase): + def setUp(self): + self.client_1 = APIClient() + self.test_user_data = { + "username": "Bill", + "email": "", + "password": "123", + "password1": "123", + "phone_number": "", + "country": "", + "city": "", + "street_address": "" + } + response = self.client_1.post(path="http://testserver/api/users/", data=self.test_user_data) + self.test_user_data = response.data + + def test_can_get_remember_me_token(self): + response = self.client_1.post(path="http://testserver/api/token/", data={"username":"Bill","password":"123"}, format="json") + self.access_token = response.data["access"] + self.client_1.credentials(HTTP_AUTHORIZATION=f"Bearer {self.access_token}") + response = self.client_1.get(path="http://testserver/api/remember_me/") + + self.assertTrue(len(response.data["remember_me"]) > 0) + + def tearDown(self): + return super().tearDown() + # ------------------------------------------------------------------------------------------------- diff --git a/backend/secfit/workouts/urls.py b/backend/secfit/workouts/urls.py index fb4861d95f0cb16a5a817fc72412755afafb0895..ba70fa5c6dfeb40484720e386852314645ad767f 100644 --- a/backend/secfit/workouts/urls.py +++ b/backend/secfit/workouts/urls.py @@ -6,7 +6,6 @@ from rest_framework_simplejwt.views import ( TokenRefreshView, ) -# This is a bit messy and will need to change urlpatterns = format_suffix_patterns( [ path("", views.api_root),