Anna Arhipova | a00ddf9 | 2023-10-06 14:07:40 +0200 | [diff] [blame] | 1 | import datetime |
| 2 | |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 3 | from django.core.files.storage import FileSystemStorage |
| 4 | from django.db import models |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 5 | |
| 6 | |
| 7 | class IntegerListField(models.Field): |
| 8 | def __init__(self, *args, **kwargs): |
| 9 | kwargs['editable'] = False |
| 10 | super(IntegerListField, self).__init__(*args, **kwargs) |
| 11 | |
| 12 | def db_type(self, connection): |
| 13 | return 'text' |
| 14 | |
| 15 | def from_db_value(self, value, expression, connection): |
| 16 | if not value: |
| 17 | return [] |
| 18 | return [int(x) for x in value.split(',')] |
| 19 | |
| 20 | def to_python(self, value): |
| 21 | if isinstance(value, list): |
| 22 | return value |
| 23 | if not value: |
| 24 | return [] |
| 25 | return [int(x) for x in value.split(',')] |
| 26 | |
| 27 | def get_prep_value(self, value): |
| 28 | if not value: |
| 29 | return '' |
| 30 | return ','.join(str(int(x)) for x in value) |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 31 | |
| 32 | |
Oleksii Petrenko | 6826817 | 2020-09-28 16:58:13 +0300 | [diff] [blame] | 33 | class TestRailTestRun(models.Model): |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 34 | project_name = models.CharField(max_length=300, |
| 35 | default="Mirantis Cloud Platform") |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 36 | plan_name = models.CharField(max_length=300, default="[MCP2.0]OSCORE") |
| 37 | run_name = models.CharField(max_length=300, blank=True) |
Sofiia Andriichenko | 56458e5 | 2023-09-28 15:07:19 +0200 | [diff] [blame] | 38 | test_pattern = models.CharField(max_length=300, blank=True) |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 39 | run_id = models.CharField(max_length=300) |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 40 | checked_tests = IntegerListField(default=list()) |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 41 | created_by_id = models.IntegerField(default='109') |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 42 | filter_func = models.TextField(null=True, blank=True) |
Sofiia Andriichenko | 4b440da | 2023-02-10 12:29:46 +0100 | [diff] [blame] | 43 | ip_filter = models.BooleanField(default=True) |
| 44 | uuid_filter = models.BooleanField(default=True) |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 45 | filter_last_traceback = models.BooleanField(default=False) |
Anna Arhipova | a00ddf9 | 2023-10-06 14:07:40 +0200 | [diff] [blame] | 46 | timestamp = models.DateField(default=datetime.date.today()) |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 47 | |
Anna Arhipova | e9258f3 | 2023-11-04 12:31:19 +0100 | [diff] [blame] | 48 | @property |
| 49 | def text_filters(self): |
| 50 | return { |
| 51 | "filter_last_traceback": self.filter_last_traceback, |
| 52 | "uuid_filter": self.uuid_filter, |
| 53 | "ip_filter": self.ip_filter, |
| 54 | "filter_func": self.filter_func, |
| 55 | } |
| 56 | |
| 57 | @property |
| 58 | def testrail_filters(self): |
| 59 | return { |
| 60 | "created_by_id": self.created_by_id, |
| 61 | "created_before": self.timestamp, |
| 62 | "run_name": self.run_name, |
| 63 | "plan_name": self.plan_name, |
| 64 | "test_pattern": self.test_pattern, |
| 65 | } |
| 66 | |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 67 | |
| 68 | fs = FileSystemStorage() |
| 69 | |
| 70 | |
Oleksii Petrenko | 6826817 | 2020-09-28 16:58:13 +0300 | [diff] [blame] | 71 | class TestRailReport(models.Model): |
Oleksii Petrenko | 1de4bab | 2020-07-21 15:49:04 +0300 | [diff] [blame] | 72 | path = models.FileField(storage=fs, null=True, blank=True, max_length=500) |
Oleksii Petrenko | 24f1f8f | 2020-06-26 18:09:43 +0300 | [diff] [blame] | 73 | report_name = models.CharField(max_length=300) |
| 74 | finished = models.BooleanField(default=False) |
Oleksii Petrenko | 7118f8c | 2020-07-17 12:45:09 +0300 | [diff] [blame] | 75 | created_at = models.DateTimeField(auto_now_add=True) |
Oleksii Petrenko | 6826817 | 2020-09-28 16:58:13 +0300 | [diff] [blame] | 76 | |
| 77 | |
| 78 | class ActionLog(models.Model): |
| 79 | name = models.CharField(max_length=500) |
| 80 | date = models.DateTimeField(null=True) |
Anna Arhipova | 7cdcc85 | 2023-11-15 18:20:45 +0100 | [diff] [blame^] | 81 | |
| 82 | |
| 83 | class SuitePassRate(models.Model): |
| 84 | SUITE_CHOICES = [ |
| 85 | ("10651", "[MCP2.0_ROCKY]Tempest"), |
| 86 | ("10635", "[MCP2.0_STEIN]Tempest"), |
| 87 | ("10653", "[MCP2.0_TRAIN]Tempest"), |
| 88 | ("10710", "[MCP2.0_USSURI]Tempest"), |
| 89 | ("10888", "[MCP2.0_VICTORIA]Tempest"), |
| 90 | ("11167", "[MCP2.0_WALLABY]Tempest"), |
| 91 | ("11188", "[MCP2.0_XENA]Tempest"), |
| 92 | ("11170", "[MCP2.0_YOGA]Tempest"), |
| 93 | ("11192", "[MCP2.0_ANTELOPE]Tempest"), |
| 94 | |
| 95 | ("11193", "[MCP2.0_ANTELOPE]Stepler"), |
| 96 | ("10886", "[MCP2.0_USSURI]Stepler"), |
| 97 | ("10887", "[MCP2.0_VICTORIA]Stepler"), |
| 98 | ("11171", "[MCP2.0_YOGA]Stepler"), |
| 99 | ] |
| 100 | suite_id = models.CharField(max_length=20, choices=SUITE_CHOICES) |
| 101 | suite_name = models.CharField(max_length=100, blank=True) |
| 102 | passrate_by_tests = models.JSONField(default="{}", blank=True) |
| 103 | status = models.TextField(max_length=300, blank=True) |
| 104 | finished = models.BooleanField(default=False, blank=True) |
| 105 | |
| 106 | |
| 107 | class DiffOfSuitesPassRates(models.Model): |
| 108 | limit = models.IntegerField(default=10, blank=True) |
| 109 | test_keyword = models.CharField(default="", max_length=300, blank=True) |
| 110 | report1 = models.ForeignKey(to=SuitePassRate, |
| 111 | related_name="report1", |
| 112 | on_delete=models.CASCADE, |
| 113 | blank=True) |
| 114 | report2 = models.ForeignKey(to=SuitePassRate, |
| 115 | related_name="report2", |
| 116 | on_delete=models.CASCADE, |
| 117 | blank=True) |
| 118 | started_at = models.DateTimeField(auto_created=True, |
| 119 | auto_now=True) |