diff --git a/test/test_webservice.py b/test/test_webservice.py index feac14d28..bca052085 100644 --- a/test/test_webservice.py +++ b/test/test_webservice.py @@ -29,12 +29,16 @@ from unittest.mock import ( ) from PyQt5.QtCore import QUrl -from PyQt5.QtNetwork import QNetworkProxy +from PyQt5.QtNetwork import ( + QNetworkProxy, + QNetworkRequest, +) from test.picardtestcase import PicardTestCase from picard import config from picard.webservice import ( + TEMP_ERRORS_RETRIES, RequestPriorityQueue, RequestTask, UnknownResponseParserError, @@ -359,6 +363,27 @@ class WSRequestTest(PicardTestCase): self.assertEqual(request.handler, dummy_handler) self.assertEqual(request.method, 'GET') self.assertEqual(request.get_host_key(), ('example.org', 443)) + self.assertIsNone(request.parse_response_type) + self.assertIsNone(request.data) + self.assertIsNone(request.cacheloadcontrol) + self.assertIsNone(request.request_mimetype) + self.assertFalse(request.mblogin) + self.assertFalse(request.refresh) + self.assertFalse(request.priority) + self.assertFalse(request.important) + + def test_init_minimal_extra(self): + request = WSRequest( + url='https://example.org/path', + method='GET', + handler=dummy_handler, + priority=True, + important=True, + refresh=True, + ) + self.assertTrue(request.priority) + self.assertTrue(request.important) + self.assertTrue(request.refresh) def test_init_minimal_qurl(self): url = 'https://example.org/path?q=1' @@ -372,3 +397,96 @@ class WSRequestTest(PicardTestCase): def test_init_port_other(self): request = WSRequest(url='http://example.org:666/path', method='GET', handler=dummy_handler) self.assertEqual(request.port, 666) + + def test_missing_url(self): + with self.assertRaises(AssertionError): + WSRequest(method='GET', handler=dummy_handler) + + def test_missing_method(self): + with self.assertRaises(AssertionError): + WSRequest(url='http://x', handler=dummy_handler) + + def test_missing_handler(self): + with self.assertRaises(AssertionError): + WSRequest(url='http://x', method='GET') + + def test_invalid_method(self): + with self.assertRaises(AssertionError): + WSRequest(url='http://x', method='XXX', handler=dummy_handler) + + def test_set_cacheloadcontrol(self): + request = WSRequest( + url='http://example.org/path', + method='GET', + handler=dummy_handler, + cacheloadcontrol=QNetworkRequest.CacheLoadControl.AlwaysNetwork, + ) + self.assertEqual(request.cacheloadcontrol, QNetworkRequest.CacheLoadControl.AlwaysNetwork) + + def test_set_parse_response_type(self): + WebService.add_parser('A', 'mime', 'parser') + request = WSRequest( + url='http://example.org/path', + method='GET', + handler=dummy_handler, + parse_response_type='A', + ) + self.assertEqual(request.response_mimetype, 'mime') + self.assertEqual(request.response_parser, 'parser') + + def test_set_invalid_parse_response_type(self): + WebService.add_parser('A', 'mime', 'parser') + request = WSRequest( + url='http://example.org/path', + method='GET', + handler=dummy_handler, + parse_response_type='invalid', + ) + self.assertEqual(request.response_mimetype, None) + self.assertEqual(request.response_parser, None) + + def test_set_mblogin_access_token(self): + request = WSRequest( + url='http://example.org/path', + method='POST', + handler=dummy_handler, + ) + # setter + request.mblogin = 'test' + # getter + self.assertEqual(request.mblogin, 'test') + + # setter + request.access_token = 'token' + # getter + self.assertEqual(request.access_token, 'token') + + def test_set_data(self): + request = WSRequest( + url='http://example.org/path', + method='POST', + handler=dummy_handler, + data='data', + ) + self.assertEqual(request.data, 'data') + + def test_set_retries_reached(self): + request = WSRequest( + url='http://example.org/path', + method='GET', + handler=dummy_handler, + ) + for i in range(0, TEMP_ERRORS_RETRIES): + self.assertEqual(request.mark_for_retry(), i+1) + + self.assertTrue(request.max_retries_reached()) + + def test_set_retries_not_reached(self): + request = WSRequest( + url='http://example.org/path', + method='GET', + handler=dummy_handler, + ) + self.assertTrue(TEMP_ERRORS_RETRIES > 1) + self.assertEqual(request.mark_for_retry(), 1) + self.assertFalse(request.max_retries_reached())