1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
from django.db import models
from testmanager.testrunner.models import Bug
class TestRun(models.Model):
test_plan = models.ForeignKey('testplanner.TestPlan')
build = models.ForeignKey('testrunner.JenkinsBuild', related_name="testruns")
closed = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def get_results(self):
statuses = TestStatus.objects.all().values_list("name", flat=True)
ret = []
for status in statuses:
ret.append((
status,
self.results.filter(status__name=status).count()
))
return ret
def get_run_results(self):
return self.results.all()
def get_bug_count(self):
b = Bug.objects.filter(testrunresult__in=list(self.results.all()))
return b.distinct().count()
def update_results(self):
test_definition_restuls_ids = self.results\
.values_list('test_definition', flat=True)
# execute this code only on initial object creation
if not test_definition_restuls_ids:
test_definition_ids = self.test_plan.testplantestdefinition_set\
.values_list('test_definition_id', flat=True)
for test_definition_id in set(test_definition_ids) - set(test_definition_restuls_ids):
TestRunResult.objects.create(
test_run=self,
test_definition_id=test_definition_id
)
for test_definition_id in set(test_definition_restuls_ids) - set(test_definition_ids):
TestRunResult.objects.get(
test_run=self,
test_definition_id=test_definition_id
).delete()
def save(self, *args, **kwargs):
super(TestRun, self).save(*args, **kwargs)
self.update_results()
class TestRunResult(models.Model):
class Meta:
unique_together = ("test_run", "test_definition")
test_run = models.ForeignKey('TestRun', related_name='results')
test_definition = models.ForeignKey('testplanner.TestDefinition')
# add revision field so the proper data is taken into use
#test_definition_revision = models.ForeignKey('testplanner.TestDefinitionRevision')
status = models.ForeignKey('TestStatus', null=True, blank=True)
bugs = models.ManyToManyField('testrunner.Bug', blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class TestStatus(models.Model):
name = models.CharField(max_length=36)
color = models.CharField(max_length=36)
icon = models.CharField(blank=True, max_length=36)
def __unicode__(self):
return self.name
|