SparkleViewTest   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 182
Duplicated Lines 25.27 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 46
loc 182
rs 10
wmc 6

5 Methods

Rating   Name   Duplication   Size   Complexity  
A test_sparkle_with_dsa_signature() 23 23 1
A setUp() 0 3 1
B test_sparkle_critical_on_other_channel() 0 42 1
A test_sparkle() 0 22 1
A test_sparkle_critical() 0 60 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
# coding: utf8
2
3
"""
4
This software is licensed under the Apache 2 license, quoted below.
5
6
Copyright 2014 Crystalnix Limited
7
8
Licensed under the Apache License, Version 2.0 (the "License"); you may not
9
use this file except in compliance with the License. You may obtain a copy of
10
the License at
11
12
    http://www.apache.org/licenses/LICENSE-2.0
13
14
Unless required by applicable law or agreed to in writing, software
15
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17
License for the specific language governing permissions and limitations under
18
the License.
19
"""
20
21
from django.test import TestCase
22
from django.test.client import Client
23
from django.core.urlresolvers import reverse
24
from django.core.files.uploadedfile import SimpleUploadedFile
25
26
from xmlunittest import XmlTestMixin
27
from freezegun import freeze_time
28
29
from omaha.tests.utils import temporary_media_root
30
from omaha.tests import OverloadTestStorageMixin
31
from omaha.factories import ApplicationFactory, ChannelFactory
32
33
from sparkle.models import SparkleVersion
34
from sparkle.tests import fixtures
35
from sparkle.factories import SparkleVersionFactory
36
37
38
class SparkleViewTest(OverloadTestStorageMixin, TestCase, XmlTestMixin):
39
    model = SparkleVersion
40
41
    def setUp(self):
42
        self.client = Client()
43
        super(SparkleViewTest, self).setUp()
44
45
    @freeze_time('2014-10-14 08:28:05')
46
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
47
    def test_sparkle(self):
48
        app = ApplicationFactory.create(id='{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}', name='chrome')
49
        channel = ChannelFactory.create(name='stable')
50
        obj = SparkleVersionFactory.create(
51
            app=app,
52
            channel=channel,
53
            version='782.112',
54
            short_version='13.0.782.112',
55
            file=SimpleUploadedFile('./chrome.dmg', b'_' * 23963192),
56
            file_size=23963192)
57
        obj.save()
58
59
        response = self.client.get(reverse('sparkle_appcast', args=(app.name, channel.name)),
60
                                   HTTP_HOST='example.com')
61
62
        self.assertEqual(response.status_code, 200)
63
64
        self.assertXmlDocument(response.content)
65
        self.assertXmlEquivalentOutputs(response.content,
66
                                        fixtures.response_sparkle)
67
68 View Code Duplication
    @freeze_time('2014-10-14 08:28:05')
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
69
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
70
    def test_sparkle(self):
71
        app = ApplicationFactory.create(id='{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}', name='chrome')
72
        channel = ChannelFactory.create(name='stable')
73
        obj = SparkleVersionFactory.create(
74
            app=app,
75
            channel=channel,
76
            version='782.112',
77
            short_version='13.0.782.112',
78
            minimum_system_version='10.8.6',
79
            file=SimpleUploadedFile('./chrome.dmg', b'_' * 23963192),
80
            file_size=23963192)
81
        obj.save()
82
83
        response = self.client.get(reverse('sparkle_appcast', args=(app.name, channel.name)),
84
                                   HTTP_HOST='example.com')
85
86
        self.assertEqual(response.status_code, 200)
87
88
        self.assertXmlDocument(response.content)
89
        self.assertXmlEquivalentOutputs(response.content,
90
                                        fixtures.response_sparkle_with_minimum_system_version)
91
92 View Code Duplication
    @freeze_time('2014-10-14 08:28:05')
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
93
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
94
    def test_sparkle_with_dsa_signature(self):
95
        app = ApplicationFactory.create(id='{D0AB2EBC-931B-4013-9FEB-C9C4C2225C9C}', name='chrome_dsa')
96
        channel = ChannelFactory.create(name='stable')
97
        obj = SparkleVersionFactory.create(
98
            app=app,
99
            channel=channel,
100
            version='782.112',
101
            short_version='13.0.782.112',
102
            dsa_signature='MCwCFCdoW13VBGJWIfIklKxQVyetgxE7AhQTVuY9uQT0KOV1UEk21epBsGZMPg==',
103
            file=SimpleUploadedFile('./chrome.dmg', b'_' * 23963192),
104
            file_size=23963192)
105
        obj.save()
106
107
        response = self.client.get(reverse('sparkle_appcast', args=(app.name, channel.name)),
108
                                   HTTP_HOST='example.com')
109
110
        self.assertEqual(response.status_code, 200)
111
112
        self.assertXmlDocument(response.content)
113
        self.assertXmlEquivalentOutputs(fixtures.response_sparkle_with_dsa,
114
                                        response.content)
115
116
    @freeze_time('2014-10-14 08:28:05')
117
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
118
    def test_sparkle_critical(self):
119
        app = ApplicationFactory.create(id='{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}', name='chrome')
120
        channel = ChannelFactory.create(name='stable')
121
        first_version = SparkleVersionFactory.create(
122
            app=app,
123
            channel=channel,
124
            version='782.110',
125
            short_version='13.0.782.110',
126
            file=SimpleUploadedFile('./chrome1.dmg', b'_' * 23963192),
127
            file_size=23963192)
128
        first_version.save()
129
130
        first_crit_version = SparkleVersionFactory.create(
131
            app=app,
132
            channel=channel,
133
            version='782.111',
134
            short_version='13.0.782.111',
135
            is_critical=True,
136
            file=SimpleUploadedFile('./chrome2.dmg', b'_' * 23963192),
137
            file_size=23963192)
138
        first_crit_version.save()
139
140
        last_version = SparkleVersionFactory.create(
141
            app=app,
142
            channel=channel,
143
            version='782.112',
144
            short_version='13.0.782.112',
145
            file=SimpleUploadedFile('./chrome3.dmg', b'_' * 23963192),
146
            file_size=23963192)
147
        last_version.save()
148
149
        second_crit_version = SparkleVersionFactory.create(
150
            app=app,
151
            channel=channel,
152
            version='782.113',
153
            short_version='13.0.782.113',
154
            is_critical=True,
155
            file=SimpleUploadedFile('./chrome4.dmg', b'_' * 23963192),
156
            file_size=23963192)
157
        second_crit_version.save()
158
159
        response = self.client.get("%s?appVersionShort=13.0.782.110" % reverse('sparkle_appcast', args=(app.name, channel.name)),
160
                                   HTTP_HOST='example.com')
161
162
        self.assertEqual(response.status_code, 200)
163
164
        self.assertXmlDocument(response.content)
165
        self.assertXmlEquivalentOutputs(response.content,
166
                                        fixtures.first_crit_response_sparkle)
167
168
        response = self.client.get("%s?appVersionShort=13.0.782.111" % reverse('sparkle_appcast', args=(app.name, channel.name)),
169
                                   HTTP_HOST='example.com')
170
171
        self.assertEqual(response.status_code, 200)
172
173
        self.assertXmlDocument(response.content)
174
        self.assertXmlEquivalentOutputs(response.content,
175
                                        fixtures.second_crit_response_sparkle)
176
177
178
    @freeze_time('2014-10-14 08:28:05')
179
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
180
    def test_sparkle_critical_on_other_channel(self):
181
        app = ApplicationFactory.create(id='{D0AB2EBC-931B-4013-9FEB-C9C4C2225C8C}', name='chrome')
182
        channel = ChannelFactory.create(name='stable')
183
        channel2 = ChannelFactory.create(name='beta')
184
        first_version = SparkleVersionFactory.create(
185
            app=app,
186
            channel=channel,
187
            version='782.110',
188
            short_version='13.0.782.110',
189
            file=SimpleUploadedFile('./chrome0.dmg', b'_' * 23963192),
190
            file_size=23963192)
191
        first_version.save()
192
193
        first_crit_version = SparkleVersionFactory.create(
194
            app=app,
195
            channel=channel2,
196
            version='782.111',
197
            short_version='13.0.782.111',
198
            is_critical=True,
199
            file=SimpleUploadedFile('./chrome2.dmg', b'_' * 23963192),
200
            file_size=23963192)
201
        first_crit_version.save()
202
203
        last_version = SparkleVersionFactory.create(
204
            app=app,
205
            channel=channel,
206
            version='782.112',
207
            short_version='13.0.782.112',
208
            file=SimpleUploadedFile('./chrome.dmg', b'_' * 23963192),
209
            file_size=23963192)
210
        last_version.save()
211
212
        response = self.client.get("%s?appVersionShort=13.0.782.111" % reverse('sparkle_appcast', args=(app.name, channel.name)),
213
                                   HTTP_HOST='example.com')
214
215
        self.assertEqual(response.status_code, 200)
216
217
        self.assertXmlDocument(response.content)
218
        self.assertXmlEquivalentOutputs(response.content,
219
                                        fixtures.response_sparkle)
220