| import datetime |
| |
| from django.core.files.storage import FileSystemStorage |
| from django.db import models |
| |
| |
| class IntegerListField(models.Field): |
| def __init__(self, *args, **kwargs): |
| kwargs['editable'] = False |
| super(IntegerListField, self).__init__(*args, **kwargs) |
| |
| def db_type(self, connection): |
| return 'text' |
| |
| def from_db_value(self, value, expression, connection): |
| if not value: |
| return [] |
| return [int(x) for x in value.split(',')] |
| |
| def to_python(self, value): |
| if isinstance(value, list): |
| return value |
| if not value: |
| return [] |
| return [int(x) for x in value.split(',')] |
| |
| def get_prep_value(self, value): |
| if not value: |
| return '' |
| return ','.join(str(int(x)) for x in value) |
| |
| |
| class TestRailTestRun(models.Model): |
| project_name = models.CharField(max_length=300, |
| default="Mirantis Cloud Platform") |
| plan_name = models.CharField(max_length=300, default="[MCP2.0]OSCORE") |
| run_name = models.CharField(max_length=300, blank=True) |
| test_pattern = models.CharField(max_length=300, blank=True) |
| run_id = models.CharField(max_length=300) |
| checked_tests = IntegerListField(default=list()) |
| created_by_id = models.IntegerField(default='109') |
| filter_func = models.TextField(null=True, blank=True) |
| ip_filter = models.BooleanField(default=True) |
| uuid_filter = models.BooleanField(default=True) |
| filter_last_traceback = models.BooleanField(default=False) |
| timestamp = models.DateField(default=datetime.date.today()) |
| |
| @property |
| def text_filters(self): |
| return { |
| "filter_last_traceback": self.filter_last_traceback, |
| "uuid_filter": self.uuid_filter, |
| "ip_filter": self.ip_filter, |
| "filter_func": self.filter_func, |
| } |
| |
| @property |
| def testrail_filters(self): |
| return { |
| "created_by_id": self.created_by_id, |
| "created_before": self.timestamp, |
| "run_name": self.run_name, |
| "plan_name": self.plan_name, |
| "test_pattern": self.test_pattern, |
| } |
| |
| |
| fs = FileSystemStorage() |
| |
| |
| class TestRailReport(models.Model): |
| path = models.FileField(storage=fs, null=True, blank=True, max_length=500) |
| report_name = models.CharField(max_length=300) |
| finished = models.BooleanField(default=False) |
| created_at = models.DateTimeField(auto_now_add=True) |
| |
| |
| class ActionLog(models.Model): |
| name = models.CharField(max_length=500) |
| date = models.DateTimeField(null=True) |
| |
| |
| class SuitePassRate(models.Model): |
| SUITE_CHOICES = [ |
| ("Tempest", ( |
| ("10651", "[MCP2.0_ROCKY]Tempest"), |
| ("10635", "[MCP2.0_STEIN]Tempest"), |
| ("10653", "[MCP2.0_TRAIN]Tempest"), |
| ("10710", "[MCP2.0_USSURI]Tempest"), |
| ("10888", "[MCP2.0_VICTORIA]Tempest"), |
| ("11167", "[MCP2.0_WALLABY]Tempest"), |
| ("11188", "[MCP2.0_XENA]Tempest"), |
| ("11170", "[MCP2.0_YOGA]Tempest"), |
| ("11192", "[MCP2.0_ANTELOPE]Tempest")) |
| ), |
| ("Stepler", ( |
| ("10886", "[MCP2.0_USSURI]Stepler"), |
| ("10887", "[MCP2.0_VICTORIA]Stepler"), |
| ("11171", "[MCP2.0_YOGA]Stepler"), |
| ("11193", "[MCP2.0_ANTELOPE]Stepler")) |
| ), |
| ] |
| suite_id = models.CharField(max_length=20, choices=SUITE_CHOICES) |
| suite_name = models.CharField(max_length=100, blank=True) |
| passrate_by_tests = models.JSONField(default="{}", blank=True) |
| status = models.TextField(max_length=300, blank=True) |
| finished = models.BooleanField(default=False, blank=True) |
| |
| |
| class DiffOfSuitesPassRates(models.Model): |
| limit = models.IntegerField(default=10, blank=True) |
| test_keyword = models.CharField(default="", max_length=300, blank=True) |
| report1 = models.ForeignKey(to=SuitePassRate, |
| related_name="report1", |
| on_delete=models.CASCADE, |
| blank=True) |
| report2 = models.ForeignKey(to=SuitePassRate, |
| related_name="report2", |
| on_delete=models.CASCADE, |
| blank=True) |
| started_at = models.DateTimeField(auto_created=True, |
| auto_now=True) |