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

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

15 Apr 2024 04:27PM UTC coverage: 90.674%. Remained the same
719

push

travis-pro

web-flow
Merge pull request #237 from gcivil-nyu-org/feature-shihui

exempt contact from middleware

1 of 1 new or added line in 1 file covered. (100.0%)

713 existing lines in 14 files now uncovered.

1789 of 1973 relevant lines covered (90.67%)

1.23 hits per line

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

99.12
/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✔
UNCOV
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

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

107

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

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

128

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

138

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

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

153

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

162

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

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

173

174
# Two blank lines before the new function definition
175
# Signal to automatically create or update UserType when a User instance is saved
176
@receiver(post_save, sender=User)
2✔
177
def create_or_update_user_type(sender, instance, created, **kwargs):
2✔
UNCOV
178
    if created:
1✔
UNCOV
179
        UserType.objects.create(user=instance)
1✔
UNCOV
180
    instance.usertype.save()
1✔
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