blob: 46c50495c62044f4016dafb3a43e76ea07afa2a3 [file] [log] [blame]
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +03001from django.core.files.storage import FileSystemStorage
2from django.db import models
Anna Arhipova53461592024-01-10 11:18:05 +01003from django.utils.timezone import now
Anna Arhipovae9258f32023-11-04 12:31:19 +01004
5
6class IntegerListField(models.Field):
7 def __init__(self, *args, **kwargs):
8 kwargs['editable'] = False
9 super(IntegerListField, self).__init__(*args, **kwargs)
10
11 def db_type(self, connection):
12 return 'text'
13
14 def from_db_value(self, value, expression, connection):
15 if not value:
16 return []
17 return [int(x) for x in value.split(',')]
18
19 def to_python(self, value):
20 if isinstance(value, list):
21 return value
22 if not value:
23 return []
24 return [int(x) for x in value.split(',')]
25
26 def get_prep_value(self, value):
27 if not value:
28 return ''
29 return ','.join(str(int(x)) for x in value)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030030
31
Oleksii Petrenko68268172020-09-28 16:58:13 +030032class TestRailTestRun(models.Model):
Anna Arhipovae9258f32023-11-04 12:31:19 +010033 project_name = models.CharField(max_length=300,
34 default="Mirantis Cloud Platform")
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010035 plan_name = models.CharField(max_length=300, default="[MCP2.0]OSCORE")
36 run_name = models.CharField(max_length=300, blank=True)
Anna Arhipovaf1ea3ee2024-01-24 13:29:09 +010037 testrun_pattern = models.CharField(max_length=300, blank=True)
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010038 run_id = models.CharField(max_length=300)
Anna Arhipovae9258f32023-11-04 12:31:19 +010039 checked_tests = IntegerListField(default=list())
Anna Arhipovaec725222024-01-21 00:10:37 +010040 caching_tests_enabled = models.BooleanField(default=False)
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010041 created_by_id = models.IntegerField(default='109')
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030042 filter_func = models.TextField(null=True, blank=True)
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010043 ip_filter = models.BooleanField(default=True)
44 uuid_filter = models.BooleanField(default=True)
Anna Arhipova53461592024-01-10 11:18:05 +010045 filter_last_traceback = models.BooleanField(default=True)
46 created_before = models.DateField(default=now)
47 created_after = models.DateField(default=now)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030048
Anna Arhipovae9258f32023-11-04 12:31:19 +010049 @property
50 def text_filters(self):
51 return {
52 "filter_last_traceback": self.filter_last_traceback,
53 "uuid_filter": self.uuid_filter,
54 "ip_filter": self.ip_filter,
55 "filter_func": self.filter_func,
56 }
57
58 @property
59 def testrail_filters(self):
60 return {
61 "created_by_id": self.created_by_id,
Anna Arhipova62760612023-11-28 23:20:38 +010062 "created_after": self.created_after,
63 "created_before": self.created_before,
Anna Arhipovaf1ea3ee2024-01-24 13:29:09 +010064 "testrun_pattern": self.testrun_pattern,
Anna Arhipovae9258f32023-11-04 12:31:19 +010065 "plan_name": self.plan_name,
Anna Arhipovae9258f32023-11-04 12:31:19 +010066 }
67
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030068
69fs = FileSystemStorage()
70
71
Oleksii Petrenko68268172020-09-28 16:58:13 +030072class TestRailReport(models.Model):
Oleksii Petrenko1de4bab2020-07-21 15:49:04 +030073 path = models.FileField(storage=fs, null=True, blank=True, max_length=500)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030074 report_name = models.CharField(max_length=300)
75 finished = models.BooleanField(default=False)
Oleksii Petrenko7118f8c2020-07-17 12:45:09 +030076 created_at = models.DateTimeField(auto_now_add=True)
Oleksii Petrenko68268172020-09-28 16:58:13 +030077
78
79class ActionLog(models.Model):
80 name = models.CharField(max_length=500)
81 date = models.DateTimeField(null=True)
Anna Arhipova7cdcc852023-11-15 18:20:45 +010082
83
84class SuitePassRate(models.Model):
85 SUITE_CHOICES = [
Anna Arhipova29ee6182023-11-30 14:06:05 +010086 ("Tempest", (
87 ("10651", "[MCP2.0_ROCKY]Tempest"),
88 ("10635", "[MCP2.0_STEIN]Tempest"),
89 ("10653", "[MCP2.0_TRAIN]Tempest"),
90 ("10710", "[MCP2.0_USSURI]Tempest"),
91 ("10888", "[MCP2.0_VICTORIA]Tempest"),
92 ("11167", "[MCP2.0_WALLABY]Tempest"),
93 ("11188", "[MCP2.0_XENA]Tempest"),
94 ("11170", "[MCP2.0_YOGA]Tempest"),
95 ("11192", "[MCP2.0_ANTELOPE]Tempest"))
Anna Arhipovaec725222024-01-21 00:10:37 +010096 ),
Anna Arhipova29ee6182023-11-30 14:06:05 +010097 ("Stepler", (
98 ("10886", "[MCP2.0_USSURI]Stepler"),
99 ("10887", "[MCP2.0_VICTORIA]Stepler"),
100 ("11171", "[MCP2.0_YOGA]Stepler"),
101 ("11193", "[MCP2.0_ANTELOPE]Stepler"))
Anna Arhipovaec725222024-01-21 00:10:37 +0100102 ),
Anna Arhipova7cdcc852023-11-15 18:20:45 +0100103 ]
104 suite_id = models.CharField(max_length=20, choices=SUITE_CHOICES)
105 suite_name = models.CharField(max_length=100, blank=True)
106 passrate_by_tests = models.JSONField(default="{}", blank=True)
107 status = models.TextField(max_length=300, blank=True)
108 finished = models.BooleanField(default=False, blank=True)
109
110
111class DiffOfSuitesPassRates(models.Model):
112 limit = models.IntegerField(default=10, blank=True)
113 test_keyword = models.CharField(default="", max_length=300, blank=True)
114 report1 = models.ForeignKey(to=SuitePassRate,
115 related_name="report1",
116 on_delete=models.CASCADE,
117 blank=True)
118 report2 = models.ForeignKey(to=SuitePassRate,
119 related_name="report2",
120 on_delete=models.CASCADE,
121 blank=True)
122 started_at = models.DateTimeField(auto_created=True,
123 auto_now=True)