Coverage for project/models/status.py: 100.00%

37 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-06-06 22:17 +0000

1from django.db import models 

2 

3from core.models import core as core_models 

4from core.models import user as core_user_models 

5 

6 

7class BuiltInIssueStatusManager(models.Manager): 

8 def initialize_built_in_statuses(self): 

9 """ 

10 Keep this in sync with the BuiltInIssueStatuses.IssueStatuses class. 

11 """ 

12 built_in_issue_statuses = [ 

13 ('34d28f8e-dd1c-4871-938b-3ed56f960093', 'TRIAGE', 'Triage'), 

14 ('86780f1e-e3a8-4869-bc6b-1e9a3111ef9f', 'OPEN', 'Open'), 

15 ('4c509937-972d-470c-9589-362ba90c1268', 'READY_FOR_DEVELOPMENT', 'Ready for Development'), 

16 ('332f5852-a6e1-415f-bef5-44fcd36dbfc9', 'IN_PROGRESS', 'In Progress'), 

17 ('bef3f9f1-0f37-41be-b405-322731c76b16', 'RESOLVED', 'Resolved'), 

18 ('24494695-c0f8-4a90-aacc-670776b40ff9', 'COMPLETE', 'Complete'), 

19 ('24c03dc0-a98f-4125-a9db-51781e610444', 'CLOSED', 'Closed'), 

20 ] 

21 system_user = core_user_models.CoreUser.objects.get_or_create_system_user() 

22 

23 for id, name, description in built_in_issue_statuses: 

24 self.create(id=id, created_by=system_user, name=name, description=description) 

25 

26 

27class BuiltInIssueStatus(core_models.CoreModel): 

28 class Meta: 

29 ordering = ['name'] 

30 unique_together = ['name', 'description'] 

31 

32 class IssueStatuses(models.TextChoices): 

33 TRIAGE = 'TRIAGE', 'Triage' 

34 OPEN = 'OPEN', 'Open' 

35 READY_FOR_DEVELOPMENT = 'READY_FOR_DEVELOPMENT', 'Ready for Development' 

36 IN_PROGRESS = 'IN_PROGRESS', 'In Progress' 

37 RESOLVED = 'RESOLVED', 'Resolved' 

38 COMPLETE = 'COMPLETE', 'Complete' 

39 CLOSED = 'CLOSED', 'Closed' 

40 

41 objects = BuiltInIssueStatusManager() 

42 

43 name = models.CharField(max_length=255) 

44 description = models.TextField(blank=True, null=True, default="") 

45 

46 

47class CustomIssueStatusData(core_models.CoreModel): 

48 class Meta: 

49 ordering = ['name'] 

50 

51 name = models.CharField(max_length=255) 

52 description = models.TextField(blank=True, null=True, default="") 

53 

54 

55class CustomIssueStatusActiveManager(models.Manager): 

56 def get_queryset(self): 

57 return super().get_queryset().filter(deleted=None) 

58 

59 

60class CustomIssueStatus(core_models.CoreModel): 

61 class Meta: 

62 ordering = ['current__name'] 

63 

64 active_objects = CustomIssueStatusActiveManager() 

65 

66 current = models.ForeignKey(CustomIssueStatusData, on_delete=models.CASCADE)