• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gcivil-nyu-org / INT2-Monday-Spring2024-Team-2 / 809

04 May 2024 03:36PM UTC coverage: 91.716%. Remained the same
809

Pull #253

travis-pro

web-flow
Merge 26fc3c1b5 into 48120f46f
Pull Request #253: Survey

2015 of 2197 relevant lines covered (91.72%)

1.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.18
/TutorRegister/models.py
1
from django.db import models
2✔
2
from django.contrib.auth.models import User
2✔
3
from django.db.models.signals import post_save
2✔
4
from django.dispatch import receiver
2✔
5
from django.contrib.postgres.fields import ArrayField
2✔
6

7

8
class Expertise(models.Model):
2✔
9
    user = models.ForeignKey(User, on_delete=models.CASCADE)
2✔
10
    subject = models.CharField(max_length=255)
2✔
11
    level = models.CharField(max_length=255)
2✔
12

13
    def human_readable_subject(self):
2✔
14
        return self.subject.replace("_", " ").capitalize()
1✔
15

16

17
# Two blank lines before the new class definition
18
class Availability(models.Model):
2✔
19
    user = models.ForeignKey(User, on_delete=models.CASCADE)
2✔
20
    day_of_week = models.CharField(max_length=255)
2✔
21
    start_time = models.TimeField()
2✔
22
    end_time = models.TimeField()
2✔
23

24

25
# Two blank lines before the new class definition
26
class ProfileS(models.Model):
2✔
27
    user = models.OneToOneField(User, on_delete=models.CASCADE)
2✔
28
    fname = models.CharField(max_length=255)
2✔
29
    mname = models.CharField(max_length=255, blank=True)
2✔
30
    lname = models.CharField(max_length=255)
2✔
31
    gender = models.CharField(max_length=255)
2✔
32
    school = models.CharField(max_length=255)
2✔
33
    zip = models.CharField(max_length=255)
2✔
34
    grade = models.CharField(max_length=255)
2✔
35
    preferred_mode = models.CharField(max_length=255)
2✔
36
    intro = models.TextField()
2✔
37
    image = models.ImageField(upload_to="images/", default="images/profile_icon.png")
2✔
38

39

40
# Two blank lines before the new class definition
41
class ProfileT(models.Model):
2✔
42
    user = models.OneToOneField(User, on_delete=models.CASCADE)
2✔
43
    fname = models.CharField(max_length=255)
2✔
44
    mname = models.CharField(max_length=255, blank=True)
2✔
45
    lname = models.CharField(max_length=255)
2✔
46
    gender = models.CharField(max_length=255)
2✔
47
    major = models.CharField(max_length=255)
2✔
48
    zip = models.CharField(max_length=255)
2✔
49
    grade = models.CharField(max_length=255)
2✔
50
    preferred_mode = models.CharField(max_length=255)
2✔
51
    intro = models.TextField()
2✔
52
    salary_min = models.IntegerField(default=0)
2✔
53
    salary_max = models.IntegerField(default=0)
2✔
54
    image = models.ImageField(upload_to="images/", default="images/profile_icon.png")
2✔
55
    transcript = models.FileField(upload_to="transcripts/", null=True, blank=True)
2✔
56
    qualified = models.BooleanField(default=False, null=True, blank=True)
2✔
57

58

59
# Two blank lines before the new class definition
60
class UserType(models.Model):
2✔
61
    user = models.OneToOneField(User, on_delete=models.CASCADE)
2✔
62
    user_type = models.CharField(max_length=100, null=True, blank=True)
2✔
63
    has_profile_complete = models.BooleanField(default=False, null=False)
2✔
64

65

66
class ChatSession(models.Model):
2✔
67
    tutor = models.ForeignKey(
2✔
68
        User, related_name="tutor_chats", on_delete=models.CASCADE
69
    )
70
    student = models.ForeignKey(
2✔
71
        User, related_name="student_chats", on_delete=models.CASCADE
72
    )
73
    created_at = models.DateTimeField(auto_now_add=True)
2✔
74

75

76
class Message(models.Model):
2✔
77
    chat_session = models.ForeignKey(
2✔
78
        ChatSession, related_name="messages", on_delete=models.CASCADE
79
    )
80
    author = models.ForeignKey(User, on_delete=models.CASCADE)
2✔
81
    message = models.TextField()
2✔
82
    timestamp = models.DateTimeField(auto_now_add=True)
2✔
83

84

85
class TutoringSession(models.Model):
2✔
86
    student_id = models.ForeignKey(
2✔
87
        User, on_delete=models.CASCADE, related_name="student_sessions"
88
    )
89
    tutor_id = models.ForeignKey(
2✔
90
        User, on_delete=models.CASCADE, related_name="tutor_sessions"
91
    )
92
    tutoring_mode = models.CharField(max_length=100)
2✔
93
    subject = models.CharField(max_length=100)
2✔
94
    date = models.DateField()
2✔
95
    start_time = models.TimeField(default="12:00:00")
2✔
96
    end_time = models.TimeField(default="12:00:00")
2✔
97
    offering_rate = models.DecimalField(max_digits=6, decimal_places=0)
2✔
98
    message = models.TextField()
2✔
99
    status = models.TextField(default="Pending")
2✔
100
    attachment = models.FileField(upload_to="attachments/", null=True, blank=True)
2✔
101
    reviewed_by_student = models.BooleanField(default=False)
2✔
102
    meeting_link = models.CharField(max_length=100, null=True, blank=True)
2✔
103
    survey_completed = models.BooleanField(default=False, null=True, blank=True)
2✔
104

105
    def human_readable_subject(self):
2✔
106
        return self.subject.replace("_", " ")
1✔
107

108

109
class TutorReview(models.Model):
2✔
110
    student_id = models.ForeignKey(
2✔
111
        User, on_delete=models.CASCADE, related_name="student_reviews"
112
    )
113
    tutor_id = models.ForeignKey(
2✔
114
        User, on_delete=models.CASCADE, related_name="tutor_reviews"
115
    )
116
    tutoring_session = models.ForeignKey(
2✔
117
        TutoringSession,
118
        on_delete=models.CASCADE,
119
        related_name="session_reviews",
120
        null=True,
121
    )
122
    review_date = models.DateField(auto_now_add=True)
2✔
123
    rating = models.DecimalField(max_digits=2, decimal_places=1)
2✔
124
    review = models.TextField()
2✔
125

126
    def __str__(self):
2✔
127
        return f"Review by {self.student_id} for {self.tutor_id}"
×
128

129

130
class Favorite(models.Model):
2✔
131
    student = models.ForeignKey(
2✔
132
        User, on_delete=models.CASCADE, related_name="student_favorites"
133
    )
134
    tutor = models.ForeignKey(
2✔
135
        User, on_delete=models.CASCADE, related_name="tutor_favorites"
136
    )
137
    category = models.CharField(max_length=100, null=True, blank=True)
2✔
138

139

140
class Post(models.Model):
2✔
141
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_post")
2✔
142
    title = models.CharField(max_length=250)
2✔
143
    content = models.TextField()
2✔
144
    label = models.CharField(max_length=100)
2✔
145
    post_date = models.DateTimeField(auto_now_add=True)
2✔
146
    attachment = models.FileField(upload_to="attachments/", null=True, blank=True)
2✔
147
    topics = models.CharField(models.CharField(), blank=True)
2✔
148

149
    def get_rating(self):
2✔
150
        upvotes = Vote.objects.filter(post=self, value=1).count()
1✔
151
        downvotes = Vote.objects.filter(post=self, value=-1).count()
1✔
152
        return upvotes - downvotes
1✔
153

154

155
class Reply(models.Model):
2✔
156
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_reply")
2✔
157
    post = models.ForeignKey(
2✔
158
        Post, on_delete=models.CASCADE, related_name="post_replies"
159
    )
160
    content = models.TextField()
2✔
161
    reply_date = models.DateTimeField(auto_now_add=True)
2✔
162

163

164
class Vote(models.Model):
2✔
165
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_react")
2✔
166
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="post_react")
2✔
167
    value = models.IntegerField(
2✔
168
        default=0
169
    )  # 1 for upvote, -1 for downvote, 0 for neutral
170

171
    class Meta:
2✔
172
        unique_together = ("user", "post")
2✔
173

174

175
class Survey(models.Model):
2✔
176
    session = models.ForeignKey(
2✔
177
        TutoringSession, on_delete=models.CASCADE, related_name="session_survey"
178
    )
179
    reviewer = models.ForeignKey(
2✔
180
        User, on_delete=models.CASCADE, related_name="user_reviewer"
181
    )
182
    reviewee = models.ForeignKey(
2✔
183
        User, on_delete=models.CASCADE, related_name="user_reviewee"
184
    )
185
    q1 = models.BooleanField(null=True, blank=True)
2✔
186
    q2 = models.BooleanField(null=True, blank=True)
2✔
187
    q3 = models.BooleanField(null=True, blank=True)
2✔
188

189

190
# Two blank lines before the new function definition
191
# Signal to automatically create or update UserType when a User instance is saved
192
@receiver(post_save, sender=User)
2✔
193
def create_or_update_user_type(sender, instance, created, **kwargs):
2✔
194
    if created:
2✔
195
        UserType.objects.create(user=instance)
2✔
196
    instance.usertype.save()
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc