Passed
Pull Request — master (#443)
by Jaisen
05:38
created

elodie.tests.media.base_test   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 168
Duplicated Lines 29.17 %

Importance

Changes 0
Metric Value
eloc 107
dl 49
loc 168
rs 10
c 0
b 0
f 0
wmc 10

9 Functions

Rating   Name   Duplication   Size   Complexity  
A test_get_all_subclasses() 0 4 1
A test_get_class_by_file_without_extension() 0 6 1
A test_get_original_name() 12 12 1
A test_set_metadata_basename() 0 18 1
A test_set_album_from_folder() 0 22 1
A test_get_original_name_invalid_file() 12 12 1
A test_get_checksum() 12 12 1
A test_set_metadata() 0 18 1
A test_set_album_from_folder_invalid_file() 0 13 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
# Project imports
2
import os
3
import sys
4
5
import hashlib
6
import random
7
import re
8
import shutil
9
import string
10
import tempfile
11
import time
12
13
sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))))
14
sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
15
16
import helper
17
from elodie.media.base import Base, get_all_subclasses
18
from elodie.media.media import Media
19
from elodie.media.audio import Audio
20
from elodie.media.text import Text
21
from elodie.media.photo import Photo
22
from elodie.media.video import Video
23
24
os.environ['TZ'] = 'GMT'
25
26
setup_module = helper.setup_module
27
teardown_module = helper.teardown_module
28
29
def test_get_all_subclasses():
30
    subclasses = get_all_subclasses(Base)
31
    expected = {Media, Base, Text, Photo, Video, Audio}
32
    assert subclasses == expected, subclasses
33
34
def test_get_class_by_file_without_extension():
35
    base_file = helper.get_file('withoutextension')
36
37
    cls = Base.get_class_by_file(base_file, [Audio, Text, Photo, Video])
38
    
39
    assert cls is None, cls
40
41 View Code Duplication
def test_get_checksum():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
42
    temporary_folder, folder = helper.create_working_folder()
43
44
    origin = '%s/%s' % (folder, 'with-original-name.jpg')
45
    file = helper.get_file('with-original-name.jpg')
46
    
47
    shutil.copyfile(file, origin)
48
49
    media = Media.get_class_by_file(origin, [Photo])
50
    checksum = media.get_checksum()
51
52
    assert checksum == None, checksum
53
54 View Code Duplication
def test_get_original_name():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
55
    temporary_folder, folder = helper.create_working_folder()
56
57
    origin = '%s/%s' % (folder, 'with-original-name.jpg')
58
    file = helper.get_file('with-original-name.jpg')
59
    
60
    shutil.copyfile(file, origin)
61
62
    media = Media.get_class_by_file(origin, [Photo])
63
    original_name = media.get_original_name()
64
65
    assert original_name == 'originalfilename.jpg', original_name
66
67 View Code Duplication
def test_get_original_name_invalid_file():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
68
    temporary_folder, folder = helper.create_working_folder()
69
70
    origin = '%s/%s' % (folder, 'invalid.jpg')
71
    file = helper.get_file('invalid.jpg')
72
    
73
    shutil.copyfile(file, origin)
74
75
    media = Media.get_class_by_file(origin, [Photo])
76
    original_name = media.get_original_name()
77
78
    assert original_name is None, original_name
79
80
def test_set_album_from_folder_invalid_file():
81
    temporary_folder, folder = helper.create_working_folder()
82
83
    base_file = helper.get_file('invalid.jpg')
84
    origin = '%s/invalid.jpg' % folder
85
86
    shutil.copyfile(base_file, origin)
87
88
    base = Base(origin)
89
90
    status = base.set_album_from_folder()
91
92
    assert status == False, status
93
94
def test_set_album_from_folder():
95
    temporary_folder, folder = helper.create_working_folder()
96
97
    origin = '%s/photo.jpg' % folder
98
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
99
100
    photo = Photo(origin)
101
    metadata = photo.get_metadata()
102
103
    assert metadata['album'] is None, metadata['album']
104
105
    new_album_name = os.path.split(folder)[1]
106
    status = photo.set_album_from_folder()
107
108
    assert status == True, status
109
110
    photo_new = Photo(origin)
111
    metadata_new = photo_new.get_metadata()
112
113
    shutil.rmtree(folder)
114
115
    assert metadata_new['album'] == new_album_name, metadata_new['album']
116
117 View Code Duplication
def test_get_checksum():
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
118
    temporary_folder, folder = helper.create_working_folder()
119
120
    origin = '%s/%s' % (folder, 'with-original-name.jpg')
121
    file = helper.get_file('with-original-name.jpg')
122
    
123
    shutil.copyfile(file, origin)
124
125
    media = Media.get_class_by_file(origin, [Photo])
126
    media.set_checksum('foo')
127
    checksum = media.get_checksum()
128
129
    assert checksum == 'foo', checksum
130
131
def test_set_metadata():
132
    temporary_folder, folder = helper.create_working_folder()
133
134
    origin = '%s/photo.jpg' % folder
135
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
136
137
    photo = Photo(origin)
138
139
    metadata = photo.get_metadata()
140
141
    assert metadata['title'] == None, metadata['title']
142
143
    new_title = 'Some Title'
144
    photo.set_metadata(title = new_title)
145
146
    new_metadata = photo.get_metadata()
147
148
    assert new_metadata['title'] == new_title, new_metadata['title']
149
150
def test_set_metadata_basename():
151
    temporary_folder, folder = helper.create_working_folder()
152
153
    origin = '%s/photo.jpg' % folder
154
    shutil.copyfile(helper.get_file('plain.jpg'), origin)
155
156
    photo = Photo(origin)
157
158
    metadata = photo.get_metadata()
159
160
    assert metadata['base_name'] == 'photo', metadata['base_name']
161
162
    new_basename = 'Some Base Name'
163
    photo.set_metadata_basename(new_basename)
164
165
    new_metadata = photo.get_metadata()
166
167
    assert new_metadata['base_name'] == new_basename, new_metadata['base_name']
168