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

Brunowar12 / TaskManagerSystem / 15166388190

21 May 2025 03:32PM UTC coverage: 92.47% (-0.3%) from 92.77%
15166388190

push

github

web-flow
Merge pull request #27 from Brunowar12/bugfix-and-pep

Bug fixes and code style cleanup

159 of 183 new or added lines in 24 files covered. (86.89%)

10 existing lines in 6 files now uncovered.

1621 of 1753 relevant lines covered (92.47%)

5.55 hits per line

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

96.15
/projects/serializers.py
1
from rest_framework import serializers
6✔
2

3
from .models import Project, ProjectShareLink, Role, ProjectMembership
6✔
4

5
class ProjectSerializer(serializers.ModelSerializer):
6✔
6
    tasks_count = serializers.SerializerMethodField(read_only=True)
6✔
7

8
    class Meta:
6✔
9
        model = Project
6✔
10
        fields = [
6✔
11
            "id", "name", "description", "owner", "tasks_count", "created_at"
12
        ]
13
        read_only_fields = ["id", "owner", "tasks_count", "created_at"]
6✔
14
    
15
    def get_tasks_count(self, obj):
6✔
16
        return getattr(obj, "tasks_count", 0)
6✔
17

18
    def validate_name(self, value):
6✔
19
        if len(value) < 3:
6✔
20
            raise serializers.ValidationError(
×
21
                "The project name must contain at least 3 characters"
22
            )
23
        return value
6✔
24

25
    def validate(self, attrs):
6✔
26
        user = self.context["request"].user
6✔
27
        name = attrs.get("name")
6✔
28
        qs = Project.objects.filter(owner=user, name__iexact=name)
6✔
29
        if self.instance:
6✔
30
            qs = qs.exclude(pk=self.instance.pk)
6✔
31
        if qs.exists():
6✔
UNCOV
32
            raise serializers.ValidationError(
×
33
                "You already have a project with this name."
34
            )
35
        return attrs
6✔
36

37

38
class RoleSerializer(serializers.ModelSerializer):
6✔
39
    class Meta:
6✔
40
        model = Role
6✔
41
        fields = ["id", "name"]
6✔
42

43

44
class ProjectMembershipSerializer(serializers.ModelSerializer):
6✔
45
    user_name = serializers.ReadOnlyField(source="user.username")
6✔
46
    role_name = serializers.ReadOnlyField(source="role.name")
6✔
47
    user_details = serializers.SerializerMethodField()
6✔
48

49
    class Meta:
6✔
50
        model = ProjectMembership
6✔
51
        fields = [
6✔
52
            "id", "user", "user_name", "user_details", "project",
53
            "role", "role_name",
54
        ]
55

56
    def get_user_details(self, obj):
6✔
57
        return {
6✔
58
            "id": obj.user.id,
59
            "username": obj.user.username,
60
            "email": obj.user.email,
61
        }
62

63

64
class ShareLinkCreateSerializer(serializers.Serializer):
6✔
65
    role_id = serializers.IntegerField(default=4, min_value=1, max_value=4)
6✔
66
    max_uses = serializers.IntegerField(
6✔
67
        required=False, allow_null=True, min_value=1
68
    )
69
    expires_in = serializers.IntegerField(default=60, min_value=1)
6✔
70

71

72
class ProjectShareLinkSerializer(serializers.ModelSerializer):
6✔
73
    role_name = serializers.ReadOnlyField(source="role.name")
6✔
74
    created_by = serializers.ReadOnlyField(source="created_by.username")
6✔
75

76
    class Meta:
6✔
77
        model = ProjectShareLink
6✔
78
        fields = [
6✔
79
            "id", "token", "role_name",
80
            "max_uses", "expires_at", "is_active",
81
            "created_by", "created_at",
82
        ]
83
        read_only_fields = [
6✔
84
            "id", "token" ,"role_name", "created_by", "created_at"
85
        ]
86

87

88
class KickUserSerializer(serializers.Serializer):
6✔
89
    user_id = serializers.IntegerField()
6✔
90

91

92
class AssignRoleSerializer(serializers.Serializer):
6✔
93
    user_id = serializers.IntegerField()
6✔
94
    role_id = serializers.IntegerField()
6✔
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

© 2025 Coveralls, Inc