aboutsummaryrefslogtreecommitdiff
path: root/testmanager/testmanualrunner/models.py
blob: ae0d35faf75fb6119a0dac7560dd74d5c9622594 (plain)
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