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

gcivil-nyu-org / Wednesday-Fall2023-Team-2 / #6

29 Nov 2023 09:43PM UTC coverage: 85.196% (-2.9%) from 88.099%
#6

push

travis-ci

web-flow
Merge pull request #123 from gcivil-nyu-org/develop

Nov 29 Merge to Production

87 of 123 new or added lines in 11 files covered. (70.73%)

58 existing lines in 5 files now uncovered.

915 of 1074 relevant lines covered (85.2%)

0.85 hits per line

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

91.23
/users/models.py
1
"""customized user model
2
"""
3
from django.db import models
1✔
4
from django.utils import timezone
1✔
5
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
1✔
6

7
from map.models import ParkingSpace
1✔
8
from .managers import UserManager
1✔
9

10

11
# * Create your models here.
12
class User(AbstractBaseUser, PermissionsMixin):
1✔
13
    """customized user class"""
14

15
    email = models.EmailField(verbose_name="email", max_length=60, unique=True)
1✔
16
    username = models.CharField(max_length=30, unique=True)
1✔
17
    date_joined = models.DateTimeField(verbose_name="Date Joined", default=timezone.now)
1✔
18
    # * Save an avatar image for a user in path avatars/<username>_avatar
19
    avatar = models.ImageField(
1✔
20
        upload_to="avatars/",
21
        height_field=None,
22
        width_field=None,
23
        max_length=101,
24
        default="avatars/ParKrowdDefaultAvatar.jpg",
25
    )
26

27
    description = models.TextField(blank=True)
1✔
28

29
    # * is_superuser : User can create, edit, and delete ANY object (models)
30
    is_superuser = models.BooleanField(default=False)
1✔
31
    # * is_staff : User can login to site
32
    is_staff = models.BooleanField(default=False)
1✔
33
    # * is_admin : User is treated as non-superuser staff member.
34
    # * Admins can be customized to have certain permissions.
35
    is_admin = models.BooleanField(default=False)
1✔
36
    is_active = models.BooleanField(default=True)
1✔
37

38
    # * is_verified: To indicate whether the user has been verified by Admin
39
    is_verified = models.BooleanField(default=False)
1✔
40

41
    objects = UserManager()
1✔
42

43
    USERNAME_FIELD = "username"
1✔
44
    REQUIRED_FIELDS = ["email"]
1✔
45

46
    def __str__(self):
1✔
UNCOV
47
        return f"Email: {self.email}\n" f"Username: {self.username}\n"
×
48

49
    @staticmethod
1✔
50
    def has_perm(perm, obj=None, **kwargs):
1✔
51
        """TODO: why overriding the original implementation here"""
UNCOV
52
        return True
×
53

54
    @staticmethod
1✔
55
    def has_module_perms(app_label, **kwargs):
1✔
56
        """TODO: why overriding the original implementation here"""
UNCOV
57
        return True
×
58

59

60
class Post(models.Model):
1✔
61
    title = models.CharField(max_length=200)
1✔
62
    post = models.TextField()
1✔
63
    author = models.ForeignKey(User, on_delete=models.CASCADE)
1✔
64
    created_at = models.DateTimeField(verbose_name="Date created", default=timezone.now)
1✔
65
    parking_space = models.ForeignKey(ParkingSpace, on_delete=models.CASCADE)
1✔
66

67
    def __str__(self):
1✔
UNCOV
68
        return self.title
×
69

70

71
class Comment(models.Model):
1✔
72
    content = models.TextField()
1✔
73
    author = models.ForeignKey(User, on_delete=models.CASCADE)
1✔
74
    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
1✔
75
    created_at = models.DateTimeField(verbose_name="Date created", default=timezone.now)
1✔
76

77
    def __str__(self):
1✔
UNCOV
78
        return (
×
79
            f"Comment created by {self.author.username} under Post '{self.post.title}'"
80
        )
81

82

83
class UserVerification(models.Model):
1✔
84
    status_list = [
1✔
85
        ("submitted", "Submitted"),
86
        ("in_progress", "In progress"),
87
        ("cancelled", "Cancelled"),
88
        ("verified", "Verified"),
89
    ]
90
    username = models.ForeignKey(User, on_delete=models.CASCADE)
1✔
91
    business_name = models.CharField(max_length=200)
1✔
92
    business_type = models.CharField(max_length=200)
1✔
93
    business_address = models.CharField(max_length=200)
1✔
94
    uploaded_file = models.FileField(upload_to="verification_files/")
1✔
95
    submitted_at = models.DateTimeField(default=timezone.now, editable=False)
1✔
96
    updated_at = models.DateTimeField(default=timezone.now, editable=False)
1✔
97
    status = models.CharField(max_length=200, choices=status_list, default="submitted")
1✔
98

99
    def save(self, *args, **kwargs):
1✔
100
        # Update the updated_at whenever the object is saved / modified
101
        self.updated_at = timezone.now()
1✔
102
        super(UserVerification, self).save(*args, **kwargs)
1✔
103

104
    class Meta:
1✔
105
        # Set the default ordering to be the descending order of submission time
106
        ordering = ["-submitted_at"]
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