GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Push — master ( 303568...b20752 )
by Anton
03:54
created

tests.TestWallhavenApiV1.test_setiings()   A

Complexity

Conditions 2

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
import unittest
2
from wallhavenapi import WallhavenApiV1, Category, Purity, Sorting, Order, TopRange, Color, Type
3
import os
4
import datetime
5
6
7
class TestWallhavenApiV1(unittest.TestCase):
8
    @classmethod
9
    def setUpClass(self):
10
        self.wallhaven_api = WallhavenApiV1(api_key=os.getenv('APIKEY', None), verify_connection=False, 
11
                                            base_url="http://wallhaven.cc/api/v1")
12
    
13
    def test_search(self):
14
        search_data = self.wallhaven_api.search()
15
16
        self.assertIn("data", search_data)
17
        self.assertIn("meta", search_data)
18
19
    def test_search_categories(self):
20
        for category in list(Category):
21
            search_data = self.wallhaven_api.search(categories=category)
22
23
            for wallpaper_data in search_data["data"]:
24
                self.assertEqual(category.value, wallpaper_data["category"])
25
26
    def test_search_purities(self):
27
        for purity in list(Purity):
28
            search_data = self.wallhaven_api.search(purities=purity)
29
30
            for wallpaper_data in search_data["data"]:
31
                self.assertEqual(purity.value, wallpaper_data["purity"])
32
33
    def test_search_sorting(self):
34
        for sorting_method in list(Sorting):
35
            search_data = self.wallhaven_api.search(sorting=sorting_method)
36
            self.assertIn("data", search_data)
37
38
    def search_sorting_dated_added(self, order):
39
        def parse_datetime(datetime_string):
40
            # Format: 2018-10-31 01:23:10.000000
41
            return datetime.datetime.strptime(datetime_string, "%Y-%m-%d %H:%M:%S")
42
        
43
        search_data = self.wallhaven_api.search(sorting=Sorting.date_added, order=order)
44
        for i in range(len(search_data["data"]) - 1):
45
            datetime_1 = parse_datetime(search_data["data"][i]["created_at"])
46
            datetime_2 = parse_datetime(search_data["data"][i + 1]["created_at"])
47
            self.assertGreaterEqual(datetime_1, datetime_2) \
48
            if order == Order.desc else self.assertLessEqual(datetime_1, datetime_2)
49
50
    def test_search_sorting_dated_added_asc(self):
51
        self.search_sorting_dated_added(Order.asc)
52
53
    def test_search_sorting_dated_added_desc(self):
54
        self.search_sorting_dated_added(Order.desc)
55
56
    def search_sorting_views(self, order):
57
        search_data = self.wallhaven_api.search(sorting=Sorting.views, order=order)
58
        for i in range(len(search_data["data"]) - 1):
59
            views_1 = int(search_data["data"][i]["views"])
60
            views_2 = int(search_data["data"][i + 1]["views"])
61
            self.assertGreaterEqual(views_1, views_2) \
62
            if order == Order.desc else self.assertLessEqual(views_1, views_2)
63
64
    @unittest.skip("May content unsorted results. Need help")
65
    def test_search_sorting_views_asc(self):
66
        self.search_sorting_views(Order.asc)
67
68
    @unittest.skip("May content unsorted results. Need help")
69
    def test_search_sorting_views_desc(self):
70
        self.search_sorting_views(Order.desc)
71
72
    def search_sorting_favorites(self, order):
73
        search_data = self.wallhaven_api.search(sorting=Sorting.favorites, order=order)
74
        for i in range(len(search_data["data"]) - 1):
75
            favorites_1 = int(search_data["data"][i]["favorites"])
76
            favorites_2 = int(search_data["data"][i + 1]["favorites"])
77
            self.assertGreaterEqual(favorites_1, favorites_2) \
78
            if order == Order.desc else self.assertLessEqual(favorites_1, favorites_2)
79
80
    def test_search_sorting_favorites_asc(self):
81
        self.search_sorting_favorites(Order.asc)
82
83
    @unittest.skip("May content unsorted results. Need help")
84
    def test_search_sorting_favorites_desc(self):
85
        self.search_sorting_favorites(Order.desc)
86
    
87
    @unittest.skip("May content unsorted results. Need help")
88
    def test_search_top_range(self):
89
        for top_range in list(TopRange):
90
            search_data = self.wallhaven_api.search(top_range=top_range, sorting=Sorting.toplist)
91
            self.assertIn("data", search_data)
92
93
            if str(top_range.value[-1]).endswith("d"):
94
                timedelta = datetime.timedelta(days=int(top_range.value[:-1]))
95
            elif str(top_range.value[-1]).endswith("w"):
96
                timedelta = datetime.timedelta(days=(int(top_range.value[:-1]) * 7))
97
            elif str(top_range.value[-1]).endswith("M"):
98
                timedelta = datetime.timedelta(days=(int(top_range.value[:-1]) * 30))
99
            else:
100
                timedelta = datetime.timedelta(days=(int(top_range.value[:-1]) * 365))
101
102
            for wallpaper in search_data["data"]:
103
                created_at = datetime.datetime.strptime(wallpaper["created_at"], "%Y-%m-%d %H:%M:%S")
104
105
                self.assertGreaterEqual(created_at, datetime.datetime.now() - timedelta)
106
    
107
    def test_search_atleast(self):
108
        search_data = self.wallhaven_api.search(atleast=(1920, 1080))
109
        for wallpaper in search_data["data"]:
110
            self.assertGreaterEqual(int(wallpaper["dimension_x"]), 1920)
111
            self.assertGreaterEqual(int(wallpaper["dimension_y"]), 1080)
112
113
    def test_search_resolutions(self):
114
        search_data = self.wallhaven_api.search(resolutions=(1920, 1080))
115
        for wallpaper in search_data["data"]:
116
            self.assertEqual(int(wallpaper["dimension_x"]), 1920)
117
            self.assertEqual(int(wallpaper["dimension_y"]), 1080)
118
119
    def test_search_ratios(self):
120
        search_data = self.wallhaven_api.search(ratios=(16, 10))
121
        for wallpaper in search_data["data"]:
122
            self.assertEqual(float(wallpaper["ratio"]), 1.6)
123
124
    def test_search_colors(self):
125
        for color in list(Color):
126
            search_data = self.wallhaven_api.search(colors=color)
127
            for wallpaper in search_data["data"]:
128
                self.assertIn("colors", wallpaper)
129
                self.assertIn("#{}".format(color.value), wallpaper["colors"])
130
131
    def test_search_page(self):
132
        search_data = self.wallhaven_api.search()
133
134
        self.assertIn("last_page", search_data["meta"])
135
136
        if int(search_data["meta"]["last_page"]) > 1:
137
            search_data = self.wallhaven_api.search(page=2)
138
139
            self.assertIn("data", search_data)
140
            self.assertIn("meta", search_data)
141
            self.assertIn("current_page", search_data["meta"])
142
            self.assertEqual(2, int(search_data["meta"]["current_page"]))
143
144
    def test_wallpaper(self):
145
        search_data = self.wallhaven_api.search()
146
147
        if not len(search_data["data"]):
148
            return
149
150
        for wallpaper_temp in search_data["data"]:
151
            self.assertIn("id", wallpaper_temp)
152
153
        wallpaper = self.wallhaven_api.wallpaper(search_data["data"][0]["id"])
154
        self.assertIn("data", wallpaper)
155
156
    def test_tag(self):
157
        search_data = self.wallhaven_api.search()
158
159
        for wallpaper_temp in search_data["data"]:
160
            self.assertIn("id", wallpaper_temp)
161
            wallpaper = self.wallhaven_api.wallpaper(wallpaper_temp["id"])
162
            self.assertIn("data", wallpaper)
163
            self.assertIn("tags", wallpaper["data"])
164
165
            if not len(wallpaper["data"]["tags"]):
166
                continue
167
168
            for tag_temp in wallpaper["data"]["tags"]:
169
                self.assertIn("id", tag_temp)
170
        
171
            tag = self.wallhaven_api.tag(wallpaper["data"]["tags"][0]['id'])
172
            
173
            self.assertIn("data", tag)
174
            
175
            break
176
177
    def test_search_query_uploader(self):
178
        search_data = self.wallhaven_api.search()
179
180
        self.assertIn("data", search_data)
181
182
        if not len(search_data["data"]):
183
            return None
184
185
        wallpaper = self.wallhaven_api.wallpaper(search_data["data"][0]["id"])
186
187
        self.assertIn("data", wallpaper)
188
        self.assertIn("uploader", wallpaper["data"])
189
        self.assertIn("username", wallpaper["data"]["uploader"])
190
        
191
        search_data = self.wallhaven_api.search(q="@{}".format(wallpaper["data"]["uploader"]["username"]))
192
193
        self.assertIn("data", search_data)
194
195
        self.assertGreater(len(search_data["data"]), 0)
196
197
    def test_search_query_id(self):
198
        search_data = self.wallhaven_api.search()
199
200
        for wallpaper_temp in search_data["data"]:
201
            self.assertIn("id", wallpaper_temp)
202
            wallpaper = self.wallhaven_api.wallpaper(wallpaper_temp["id"])
203
            self.assertIn("data", wallpaper)
204
            self.assertIn("tags", wallpaper["data"])
205
206
            if not len(wallpaper["data"]["tags"]):
207
                continue
208
209
            for tag_temp in wallpaper["data"]["tags"]:
210
                self.assertIn("id", tag_temp)
211
212
            search_data = self.wallhaven_api.search(q="id:{}".format(wallpaper["data"]["tags"][0]['id']))
213
            
214
            self.assertIn("data", search_data)
215
            self.assertGreater(len(search_data["data"]), 0)
216
            break
217
218
    def test_search_query_like(self):
219
        search_data = self.wallhaven_api.search()
220
221
        if not len(search_data):
222
            return
223
224
        search_data = self.wallhaven_api.search(q="like:{}".format(search_data["data"][0]['id']))
225
            
226
        self.assertIn("data", search_data)
227
        self.assertIn("meta", search_data)
228
229
    def test_search_query_type(self):
230
        for image_type in Type:
231
            search_data = self.wallhaven_api.search(q="type:{}".format(image_type.value))
232
            
233
            self.assertIn("data", search_data)
234
            self.assertIn("meta", search_data)
235
236
            for wallpaper in search_data["data"]:
237
                self.assertIn("file_type", wallpaper)
238
                if image_type in [Type.jpeg, Type.jpg]:
239
                    self.assertTrue(str(wallpaper["file_type"]).endswith(Type.jpeg.value) \
240
                                    or str(wallpaper["file_type"]).endswith(Type.jpg.value))
241
                else:
242
                    self.assertTrue(str(wallpaper["file_type"]).endswith(image_type.value))
243
    
244
    def test_setiings(self):
245
        result = self.wallhaven_api.settings()
246
247
        assert result is None if self.wallhaven_api.api_key is None else result is not None
248
249
250
if __name__ == '__main__':
251
    unittest.main()