diff --git a/core/migrations/0004_answer_answer.py b/core/migrations/0004_answer_answer.py
new file mode 100644
index 0000000000000000000000000000000000000000..572fa9c6901f4f0b454c7de5abe4b5dda715aa43
--- /dev/null
+++ b/core/migrations/0004_answer_answer.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.1.7 on 2023-05-03 11:42
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0003_topgym_user_alter_answer_user_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='answer',
+            name='answer',
+            field=models.TextField(default=''),
+        ),
+    ]
diff --git a/core/models.py b/core/models.py
index 9f0e28b794754b572f225585c4182f9350ec79b0..8f88f48c9f26b2b185e20c52f0ed284d35b3eadc 100644
--- a/core/models.py
+++ b/core/models.py
@@ -89,6 +89,8 @@ class Question(models.Model):
 class Answer(models.Model):
 	user = models.ForeignKey(TopGym_User, on_delete=models.CASCADE)
 	question = models.ForeignKey(Question, on_delete=models.CASCADE)
+	answer = models.TextField(default='')
+	
 
 
 
diff --git a/core/tests.py b/core/tests.py
index 29f09e3dd4bb6d64a66d9a0abb42584d3e64069b..37beceb965484f7d2ceff78bcb9e40f93d99d6ab 100644
--- a/core/tests.py
+++ b/core/tests.py
@@ -1,15 +1,130 @@
 from django.test import TestCase
 from .models import *
 
-class UserTest(TestCase):
-    def setUpTestData(cls):
+#Models: Exercise, TopGym_User, WorkoutRoutine, WorkoutExercise, CompletedWorkout, Set, User_WorkoutRoutine, Friends, UserStats, Question, Answer, UserSurvey
+
+class ModelTest(TestCase):
+    def test_friends(self):
         u1 = TopGym_User(email='test@email.com')
         u1.save()
-        u2 = TopGym_User(email='test2@email.com')
+        u2 = TopGym_User(email='test2@email.com')        
         u2.save()
+        u3 = TopGym_User(email='test3@email.com')
+        u3.save()
+        #test u1 and u2 arent yet friends
+        self.assertFalse(Friends.objects.filter(friend_1=u1, friend_2=u2).exists())
+
+        #make u1 and u2 friends
+        friend1 = Friends(friend_1=u1, friend_2=u2)
+        friend1.save()
+
+        #test that u1 and u2 are now friends
+        self.assertTrue(Friends.objects.filter(friend_1=u1, friend_2=u2).exists())
+
+        #test that u1 and u3 are not friends
+        self.assertFalse(Friends.objects.filter(friend_1=u1, friend_2=u3).exists())
+
+        #make u1 and u3 friends
+        friend2 = Friends(friend_1=u1, friend_2=u3)
+        friend2.save()
+
+        #test that u1 and u3 are friends
+        self.assertTrue(Friends.objects.filter(friend_1=u1, friend_2=u3).exists())
+
+        #test that u2 and u3 are not friends
+        self.assertFalse(Friends.objects.filter(friend_1=u2, friend_2=u3).exists())
+
+    def test_workout_routine(self):
+        exercise1 = Exercise(name='Exercise 1', description='Exercise description', video_link='http://example.com')
+        exercise1.save()
+        exercise2 = Exercise(name='Push-ups', description='Push-ups description', video_link='https://www.youtube.com/watch?v=_l3ySVKYVJ8')
+        exercise2.save()
+        exercise3 = Exercise(name='Sit-ups', description='Sit-ups description', video_link='http://example.com')
+        exercise3.save()
+
+        u1 = TopGym_User(email='test@email.com')
+        u1.save()
+        u2 = TopGym_User(email='test2@email.com')        
+        u2.save()
+        
+        #workout_routine made by u1, has exercise 1 & 2
+        workout_routine = WorkoutRoutine(workout_id=1, created_by=u1, name='Workout 1', description='Workout description')#, total_completions=
+        workout_routine.save()
+        workout_exercise = WorkoutExercise(exercise_id=exercise1, workout_id=workout_routine, exercise_order=1)
+        workout_exercise.save()
+        workout_exercise2 = WorkoutExercise(exercise_id=exercise2, workout_id=workout_routine, exercise_order=2)
+        workout_exercise2.save()
+
+        #workout_routine2 made by u2, has exercise 3
+        workout_routine2 = WorkoutRoutine(workout_id=2, created_by=u2, name='Workout 2', description='Example description')#, total_completions=
+        workout_routine2.save()
+        workout_exercise3 = WorkoutExercise(exercise_id=exercise3, workout_id=workout_routine2, exercise_order=1)        
+        workout_exercise3.save()
+
+        #workout_routine by u1 is completed
+        completed_workout = CompletedWorkout(user=u1, workout_id=workout_routine)
+        completed_workout.save()
+        set = Set(set_id=1, CompletedWorkout_id=completed_workout, Exercise_id=exercise1, reps=10, weightage=20)
+        set.save()
+        set2 = Set(set_id=2, CompletedWorkout_id=completed_workout, Exercise_id=exercise2, reps=15, weightage=15)
+        set2.save()
+
+
+        #subscribe u1 to the workout_routine that it made
+        user_workout_routine = User_WorkoutRoutine(user_id=u1, workout_routine_id=workout_routine)
+        user_workout_routine.save()
+
+        #subscribe u2 to workout_routine2 that it made
+        user_workout_routine2 = User_WorkoutRoutine(user_id=u2, workout_routine_id=workout_routine2)
+        user_workout_routine2.save()
+
+        #subscribe u2 to u1's workout_routine
+        user_workout_routine3 = User_WorkoutRoutine(user_id=u2, workout_routine_id=workout_routine)
+        user_workout_routine3.save()
+
+
+        #test that u1 is subscribed the workout_routine
+        self.assertTrue(User_WorkoutRoutine.objects.filter(user_id=u1, workout_routine_id=workout_routine).exists())
+
+        #test that u2 is subscribed the workout_routine
+        self.assertTrue(User_WorkoutRoutine.objects.filter(user_id=u2, workout_routine_id=workout_routine).exists())
+
+        #test that u2 is subscribed the workout_routine2
+        self.assertTrue(User_WorkoutRoutine.objects.filter(user_id=u2, workout_routine_id=workout_routine2).exists())
+
+        #test that u1 is not subscribed the workout_routine2
+        self.assertFalse(User_WorkoutRoutine.objects.filter(user_id=u1, workout_routine_id=workout_routine2).exists())
+
+
+        #test that exercise1 is in workout_routine
+        self.assertTrue(WorkoutExercise.objects.filter(exercise_id=exercise1, workout_id=workout_routine).exists())
+
+        #test that exercise2 is in workout_routine
+        self.assertTrue(WorkoutExercise.objects.filter(exercise_id=exercise2, workout_id=workout_routine).exists())
+
+        #test that exercise3 is in workout_routine2
+        self.assertTrue(WorkoutExercise.objects.filter(exercise_id=exercise3, workout_id=workout_routine2).exists())
+
+        #test that exercise3 is not in workout_routine
+        self.assertFalse(WorkoutExercise.objects.filter(exercise_id=exercise3, workout_id=workout_routine).exists())
+
+
+        #test that workout_routine is completed
+        self.assertTrue(CompletedWorkout.objects.filter(workout_id=workout_routine).exists())
+
+        #test that workout_routine2 is not completed
+        self.assertFalse(CompletedWorkout.objects.filter(workout_id=workout_routine2).exists())
+
+    #     friend = Friends(friend_1=u1, friend_2=u2)
+    #     friend.save()
+    #     user_stats = UserStats(user=u1, weight_lifted=100.5, consecutive_weeks=3, total_points=50)
+    #     user_stats.save()
+    #     question = Question(question_id=1, question='Random question?')
+    #     question.save()
+    #     answer = Answer(user=u1, question=question, answer='Example answer')
+    #     answer.save()
+    #     user_survey = UserSurvey(user=u1)
+    #     user_survey.save()
+
+
 
-    def test_save_users(self):
-        db_count = TopGym_User.objects.all().count()
-        user = TopGym_User(email='test3@email.com')
-        user.save()
-        self.assertEqual(db_count+1, TopGym_User.objects.all().count())