Skip to content

Commit 1282d66

Browse files
authored
Merge pull request #145 from codecov/sn1020/CE-1498-complexity
CE-1498: Show complexity coverage on commits list
2 parents 1a01551 + 5a6fa26 commit 1282d66

File tree

7 files changed

+103
-78
lines changed

7 files changed

+103
-78
lines changed

Diff for: internal_api/commit/serializers.py

+39-19
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import asyncio
22
import logging
33

4-
from dataclasses import astuple, asdict
5-
64
from rest_framework import serializers
75

86
from services.archive import ReportService
@@ -13,6 +11,43 @@
1311
log = logging.getLogger(__name__)
1412

1513

14+
class CommitTotalsSerializer(serializers.Serializer):
15+
files = serializers.IntegerField(source="f")
16+
lines = serializers.IntegerField(source="n")
17+
hits = serializers.IntegerField(source="h")
18+
misses = serializers.IntegerField(source="m")
19+
partials = serializers.IntegerField(source="p")
20+
coverage = serializers.SerializerMethodField()
21+
branches = serializers.IntegerField(source="b")
22+
methods = serializers.IntegerField(source="d")
23+
sessions = serializers.IntegerField(source="s")
24+
complexity = serializers.FloatField(source="C")
25+
complexity_total = serializers.FloatField(source="N")
26+
diff = serializers.JSONField()
27+
28+
def get_coverage(self, totals):
29+
return round(float(totals["c"]), 2)
30+
31+
32+
class ReportTotalsSerializer(serializers.Serializer):
33+
files = serializers.IntegerField()
34+
lines = serializers.IntegerField()
35+
hits = serializers.IntegerField()
36+
misses = serializers.IntegerField()
37+
partials = serializers.IntegerField()
38+
coverage = serializers.SerializerMethodField()
39+
branches = serializers.IntegerField()
40+
methods = serializers.IntegerField()
41+
messages = serializers.IntegerField()
42+
sessions = serializers.IntegerField()
43+
complexity = serializers.IntegerField()
44+
complexity_total = serializers.IntegerField()
45+
diff = serializers.JSONField()
46+
47+
def get_coverage(self, totals):
48+
return round(float(totals.coverage), 2)
49+
50+
1651
class CommitRepoSerializer(serializers.ModelSerializer):
1752
repoid = serializers.IntegerField()
1853
name = serializers.CharField()
@@ -26,6 +61,7 @@ class Meta:
2661
class CommitSerializer(serializers.ModelSerializer):
2762
author = OwnerSerializer()
2863
repository = CommitRepoSerializer()
64+
totals = CommitTotalsSerializer()
2965

3066
class Meta:
3167
model = Commit
@@ -90,23 +126,7 @@ class CommitWithParentSerializer(CommitWithSrcSerializer):
90126
class Meta:
91127
model = Commit
92128
fields = ('src', 'commitid', 'timestamp', 'ci_passed',
93-
'report', 'repository', 'parent', 'author')
94-
95-
96-
class ReportTotalsSerializer(serializers.Serializer):
97-
files = serializers.IntegerField()
98-
lines = serializers.IntegerField()
99-
hits = serializers.IntegerField()
100-
misses = serializers.IntegerField()
101-
partials = serializers.IntegerField()
102-
coverage = serializers.CharField()
103-
branches = serializers.IntegerField()
104-
methods = serializers.IntegerField()
105-
messages = serializers.IntegerField()
106-
sessions = serializers.IntegerField()
107-
complexity = serializers.IntegerField()
108-
complexity_total = serializers.IntegerField()
109-
diff = serializers.JSONField()
129+
'report', 'repository', 'parent', 'author', 'totals')
110130

111131

112132
class ReportFileWithoutLinesSerializer(serializers.Serializer):

Diff for: internal_api/pull/serializers.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
from rest_framework import serializers
22

3-
from core.models import Pull, Commit
4-
from codecov_auth.models import Owner
3+
from core.models import Pull
54
from internal_api.owner.serializers import OwnerSerializer
6-
from internal_api.serializers import TotalsSerializer
5+
from internal_api.commit.serializers import CommitTotalsSerializer
76

87

98
class PullSerializer(serializers.ModelSerializer):
109
most_recent_commiter = serializers.CharField()
11-
base_totals = TotalsSerializer()
12-
head_totals = TotalsSerializer()
10+
base_totals = CommitTotalsSerializer()
11+
head_totals = CommitTotalsSerializer()
1312
ci_passed = serializers.BooleanField()
1413

1514
class Meta:

Diff for: internal_api/serializers.py

-21
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,3 @@ def validate(self, obj):
4444
}
4545
except Commit.DoesNotExist:
4646
raise serializers.ValidationError("Comparison requested for pull with nonexistant commit.")
47-
48-
49-
class TotalsSerializer(serializers.Serializer):
50-
files = serializers.IntegerField(source="f")
51-
lines = serializers.IntegerField(source="n")
52-
hits = serializers.IntegerField(source="h")
53-
misses = serializers.IntegerField(source="m")
54-
partials = serializers.IntegerField(source="p")
55-
coverage = serializers.SerializerMethodField()
56-
branches = serializers.IntegerField(source="b")
57-
methods = serializers.IntegerField(source="d")
58-
sessions = serializers.IntegerField(source="s")
59-
diffCoverage = serializers.SerializerMethodField()
60-
61-
def get_coverage(self, totals):
62-
return round(float(totals["c"]), 2)
63-
64-
def get_diffCoverage(self, totals):
65-
if totals["diff"]:
66-
return round(float(totals["diff"][5]), 2)
67-
return 0

Diff for: internal_api/tests/test_flags_serializer.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def test_flag_serializer(self, mocker, db, codecov_vcr):
5353
'branches': 0,
5454
'complexity': 0,
5555
'complexity_total': 0,
56-
'coverage': '79.16667',
56+
'coverage': 79.17,
5757
'diff': 0,
5858
'files': 3,
5959
'hits': 19,
@@ -68,7 +68,7 @@ def test_flag_serializer(self, mocker, db, codecov_vcr):
6868
'branches': 0,
6969
'complexity': 0,
7070
'complexity_total': 0,
71-
'coverage': '0',
71+
'coverage': 0,
7272
'diff': 0,
7373
'files': 1,
7474
'hits': 0,
@@ -83,7 +83,7 @@ def test_flag_serializer(self, mocker, db, codecov_vcr):
8383
'branches': 0,
8484
'complexity': 0,
8585
'complexity_total': 0,
86-
'coverage': '56.00000',
86+
'coverage': 56,
8787
'diff': 0,
8888
'files': 3,
8989
'hits': 14,
@@ -110,7 +110,7 @@ def test_flag_serializer(self, mocker, db, codecov_vcr):
110110
'branches': 0,
111111
'complexity': 0,
112112
'complexity_total': 0,
113-
'coverage': '79.16667',
113+
'coverage': 79.17,
114114
'diff': 0,
115115
'files': 3,
116116
'hits': 19,
@@ -125,7 +125,7 @@ def test_flag_serializer(self, mocker, db, codecov_vcr):
125125
'branches': 0,
126126
'complexity': 0,
127127
'complexity_total': 0,
128-
'coverage': '100',
128+
'coverage': 100,
129129
'diff': 0,
130130
'files': 1,
131131
'hits': 1,
@@ -140,7 +140,7 @@ def test_flag_serializer(self, mocker, db, codecov_vcr):
140140
'branches': 0,
141141
'complexity': 0,
142142
'complexity_total': 0,
143-
'coverage': '80.00000',
143+
'coverage': 80,
144144
'diff': 0,
145145
'files': 3,
146146
'hits': 20,

Diff for: internal_api/tests/unit/views/test_compare_flags_view.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def test_compare_flags___success(
9191
'branches': 0,
9292
'complexity': 0,
9393
'complexity_total': 0,
94-
'coverage': '79.16667',
94+
'coverage': 79.17,
9595
'diff': 0,
9696
'files': 3,
9797
'hits': 19,
@@ -106,7 +106,7 @@ def test_compare_flags___success(
106106
'branches': 0,
107107
'complexity': 0,
108108
'complexity_total': 0,
109-
'coverage': '0',
109+
'coverage': 0,
110110
'diff': 0,
111111
'files': 0,
112112
'hits': 0,
@@ -121,7 +121,7 @@ def test_compare_flags___success(
121121
'branches': 0,
122122
'complexity': 0,
123123
'complexity_total': 0,
124-
'coverage': '80.00000',
124+
'coverage': 80,
125125
'diff': 0,
126126
'files': 3,
127127
'hits': 20,
@@ -139,7 +139,7 @@ def test_compare_flags___success(
139139
'branches': 0,
140140
'complexity': 0,
141141
'complexity_total': 0,
142-
'coverage': '79.16667',
142+
'coverage': 79.17,
143143
'diff': 0,
144144
'files': 3,
145145
'hits': 19,
@@ -154,7 +154,7 @@ def test_compare_flags___success(
154154
'branches': 0,
155155
'complexity': 0,
156156
'complexity_total': 0,
157-
'coverage': '0',
157+
'coverage': 0,
158158
'diff': 0,
159159
'files': 0,
160160
'hits': 0,
@@ -169,7 +169,7 @@ def test_compare_flags___success(
169169
'branches': 0,
170170
'complexity': 0,
171171
'complexity_total': 0,
172-
'coverage': '56.00000',
172+
'coverage': 56,
173173
'diff': 0,
174174
'files': 3,
175175
'hits': 14,

Diff for: internal_api/tests/unit/views/test_compare_view.py

+34-7
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
PullFactory,
2222
)
2323

24-
2524
def build_commits(client):
2625
"""
2726
build commits in mock_db that are based on a real git commit for using VCR
@@ -63,6 +62,34 @@ def setUp(self):
6362
organizations=[org.ownerid]
6463
)
6564
self.repo, self.commit_base, self.commit_head = build_commits(self.client)
65+
self.commit_base_totals_serialized = {
66+
'files': self.commit_base.totals['f'],
67+
'lines': self.commit_base.totals['n'],
68+
'hits': self.commit_base.totals['h'],
69+
'misses': self.commit_base.totals['m'],
70+
'partials': self.commit_base.totals['p'],
71+
'coverage': round(float(self.commit_base.totals['c']), 2),
72+
'branches': self.commit_base.totals['b'],
73+
'methods': self.commit_base.totals['d'],
74+
'sessions': self.commit_base.totals['s'],
75+
'diff': self.commit_base.totals['diff'],
76+
'complexity': self.commit_base.totals['C'],
77+
'complexity_total': self.commit_base.totals['N']
78+
}
79+
self.commit_head_totals_serialized = {
80+
'files': self.commit_head.totals['f'],
81+
'lines': self.commit_head.totals['n'],
82+
'hits': self.commit_head.totals['h'],
83+
'misses': self.commit_head.totals['m'],
84+
'partials': self.commit_head.totals['p'],
85+
'coverage': round(float(self.commit_head.totals['c']), 2),
86+
'branches': self.commit_head.totals['b'],
87+
'methods': self.commit_head.totals['d'],
88+
'sessions': self.commit_head.totals['s'],
89+
'diff': self.commit_head.totals['diff'],
90+
'complexity': self.commit_head.totals['C'],
91+
'complexity_total': self.commit_head.totals['N']
92+
}
6693

6794
def _get_commits_comparison(self, kwargs, query_params):
6895
return self.client.get(reverse('compare-commits', kwargs=kwargs), data=query_params)
@@ -148,9 +175,9 @@ def test_compare_commits_view_with_branchname(self, mocked_comparison):
148175
content = json.loads(response.content.decode())
149176
assert content['git_commits'] == mocked_comparison.return_value["commits"]
150177
assert content['commit_uploads'][0]['commitid'] == self.commit_head.commitid
151-
assert content['commit_uploads'][0]['totals'] == self.commit_head.totals
178+
assert content['commit_uploads'][0]['totals'] == self.commit_head_totals_serialized
152179
assert content['commit_uploads'][1]['commitid'] == self.commit_base.commitid
153-
assert content['commit_uploads'][1]['totals'] == self.commit_base.totals
180+
assert content['commit_uploads'][1]['totals'] == self.commit_base_totals_serialized
154181

155182
@patch('services.comparison.Comparison._calculate_git_comparison')
156183
def test_compare_commits_view_with_commitid(self, mocked_comparison):
@@ -170,9 +197,9 @@ def test_compare_commits_view_with_commitid(self, mocked_comparison):
170197
content = json.loads(response.content.decode())
171198
assert content['git_commits'] == mocked_comparison.return_value["commits"]
172199
assert content['commit_uploads'][0]['commitid'] == self.commit_head.commitid
173-
assert content['commit_uploads'][0]['totals'] == self.commit_head.totals
200+
assert content['commit_uploads'][0]['totals'] == self.commit_head_totals_serialized
174201
assert content['commit_uploads'][1]['commitid'] == self.commit_base.commitid
175-
assert content['commit_uploads'][1]['totals'] == self.commit_base.totals
202+
assert content['commit_uploads'][1]['totals'] == self.commit_base_totals_serialized
176203

177204
@patch('services.comparison.Comparison._calculate_git_comparison')
178205
def test_compare_commits_view_with_pullid(self, mocked_comparison):
@@ -199,9 +226,9 @@ def test_compare_commits_view_with_pullid(self, mocked_comparison):
199226

200227
assert response.data['git_commits'] == mocked_comparison.return_value["commits"]
201228
assert response.data['commit_uploads'][0]['commitid'] == self.commit_head.commitid
202-
assert response.data['commit_uploads'][0]['totals'] == self.commit_head.totals
229+
assert response.data['commit_uploads'][0]['totals'] == self.commit_head_totals_serialized
203230
assert response.data['commit_uploads'][1]['commitid'] == self.commit_base.commitid
204-
assert response.data['commit_uploads'][1]['totals'] == self.commit_base.totals
231+
assert response.data['commit_uploads'][1]['totals'] == self.commit_base_totals_serialized
205232

206233

207234
@patch('services.archive.ArchiveService.create_root_storage')

0 commit comments

Comments
 (0)