Completed
Pull Request — master (#253)
by
unknown
02:09
created

SymbolsTest   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 47
Duplicated Lines 46.81 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 22
loc 47
rs 10
wmc 8

5 Methods

Rating   Name   Duplication   Size   Complexity  
A test_create_without_file() 0 7 1
A test_duplicate() 11 11 3
A test_detail() 0 4 1
A test_list() 0 4 1
A test_create() 11 11 2

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
import os
22
23
from django.core.urlresolvers import reverse
24
from django.core.files.uploadedfile import SimpleUploadedFile
25
26
from rest_framework import status
27
from rest_framework.test import APITestCase
28
29
from crash.serializers import SymbolsSerializer, CrashSerializer
30
from crash.models import Symbols, Crash
31
from crash.factories import SymbolsFactory, CrashFactory
32
33
from omaha.tests.utils import temporary_media_root
34
from omaha.tests.test_api import BaseTest
35
from omaha_server.utils import is_private
36
37
38
BASE_DIR = os.path.dirname(__file__)
39
TEST_DATA_DIR = os.path.join(BASE_DIR, 'testdata')
40
SYM_FILE = os.path.join(TEST_DATA_DIR, 'BreakpadTestApp.sym')
41
42
43
class SymbolsTest(BaseTest, APITestCase):
44
    url = 'symbols-list'
45
    url_detail = 'symbols-detail'
46
    factory = SymbolsFactory
47
    serializer = SymbolsSerializer
48
49
    @is_private()
50
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
51
    def test_detail(self):
52
        super(SymbolsTest, self).test_detail()
53
54
    @is_private()
55
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
56
    def test_list(self):
57
        super(SymbolsTest, self).test_list()
58
59 View Code Duplication
    @is_private()
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
60
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
61
    def test_create(self):
62
        with open(SYM_FILE, 'rb') as f:
63
            data = dict(file=SimpleUploadedFile('./BreakpadTestApp.sym', f.read()))
64
        response = self.client.post(reverse(self.url), data)
65
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
66
        symbols = Symbols.objects.get(id=response.data['id'])
67
        self.assertEqual(response.data, self.serializer(symbols).data)
68
        self.assertEqual(symbols.debug_id, 'C1C0FA629EAA4B4D9DD2ADE270A231CC1')
69
        self.assertEqual(symbols.debug_file, 'BreakpadTestApp.pdb')
70
71
    @is_private()
72
    @temporary_media_root(MEDIA_URL='http://cache.pack.google.com/edgedl/chrome/install/782.112/')
73
    def test_create_without_file(self):
74
        data = dict()
75
        response = self.client.post(reverse(self.url), data)
76
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
77
        self.assertEqual(response.data, {'file': [u'No file was submitted.']})
78
79 View Code Duplication
    @is_private()
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
80
    def test_duplicate(self):
81
        with open(SYM_FILE, 'rb') as f:
82
            data = dict(file=SimpleUploadedFile('./BreakpadTestApp.sym', f.read()))
83
        response = self.client.post(reverse(self.url), data)
84
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
85
        with open(SYM_FILE, 'rb') as f:
86
            data = dict(file=SimpleUploadedFile('./BreakpadTestApp.sym', f.read()))
87
        response = self.client.post(reverse(self.url), data)
88
        self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)
89
        self.assertEqual(response.data['message'], 'Duplicate symbol')
90
91
class CrashTest(BaseTest, APITestCase):
92
    url = 'crash-list'
93
    url_detail = 'crash-detail'
94
    factory = CrashFactory
95
    serializer = CrashSerializer
96
97
    @is_private()
98
    def test_list(self):
99
        response = self.client.get(reverse(self.url), format='json')
100
        self.assertEqual(response.status_code, status.HTTP_200_OK)
101
        self.assertEqual(response.data['count'], 10)
102
        self.assertEqual(self.serializer(self.objects, many=True).data, response.data['results'][::-1])
103
104
    @is_private()
105
    def test_create(self):
106
        response = self.client.post(reverse(self.url), {})
107
        self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
108