File: test_engines.py

package info (click to toggle)
python-redmine 2.1.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 496 kB
  • sloc: python: 3,176; makefile: 6
file content (93 lines) | stat: -rw-r--r-- 4,732 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from . import mock, BaseRedmineTestCase, Redmine

from redminelib import engines, exceptions


class BaseEngineTestCase(BaseRedmineTestCase):
    def test_engine_init(self):
        redmine = Redmine(self.url, key='123', impersonate='jsmith', requests={'foo': 'bar'})
        self.assertEqual(redmine.engine.requests['params']['key'], '123')
        self.assertEqual(redmine.engine.requests['headers']['X-Redmine-Switch-User'], 'jsmith')
        self.assertEqual(redmine.engine.requests['foo'], 'bar')
        redmine = Redmine(self.url, username='john', password='qwerty')
        self.assertEqual(redmine.engine.requests['auth'], ('john', 'qwerty'))

    def test_successful_response_via_username_password(self):
        self.redmine.engine.requests['auth'] = ('john', 'qwerty')
        self.response.status_code = 200
        self.response.json.return_value = {'success': True}
        self.assertEqual(self.redmine.engine.request('get', self.url)['success'], True)

    def test_successful_response_via_api_key(self):
        self.redmine.engine.requests['params']['key'] = '123'
        self.response.status_code = 200
        self.response.json.return_value = {'success': True}
        self.assertEqual(self.redmine.engine.request('get', self.url)['success'], True)

    def test_successful_response_via_put_method(self):
        self.response.status_code = 200
        self.response.content = ''
        self.assertEqual(self.redmine.engine.request('put', self.url), True)

    def test_session_not_implemented_exception(self):
        self.assertRaises(NotImplementedError, lambda: engines.BaseEngine())

    def test_process_bulk_request_not_implemented_exception(self):
        self.redmine.engine = type('FooEngine', (engines.BaseEngine,), {'create_session': lambda obj, **kwargs: None})()
        self.assertRaises(NotImplementedError, lambda: self.redmine.engine.process_bulk_request(
            'get', '/foo', 'bar', {}))

    def test_conflict_error_exception(self):
        self.response.status_code = 409
        self.assertRaises(exceptions.ConflictError, lambda: self.redmine.engine.request('put', self.url))

    def test_json_decode_error_exception(self):
        self.response.status_code = 200
        self.response.json = mock.Mock(side_effect=ValueError)
        self.assertRaises(exceptions.JSONDecodeError, lambda: self.redmine.engine.request('get', self.url))

    def test_auth_error_exception(self):
        self.response.status_code = 401
        self.assertRaises(exceptions.AuthError, lambda: self.redmine.engine.request('get', self.url))

    def test_forbidden_error_exception(self):
        self.response.status_code = 403
        self.assertRaises(exceptions.ForbiddenError, lambda: self.redmine.engine.request('get', self.url))

    def test_impersonate_error_exception(self):
        self.response.status_code = 412
        self.assertRaises(exceptions.ImpersonateError, lambda: self.redmine.engine.request('get', self.url))

    def test_server_error_exception(self):
        self.response.status_code = 500
        self.assertRaises(exceptions.ServerError, lambda: self.redmine.engine.request('post', self.url))

    def test_request_entity_too_large_error_exception(self):
        self.response.status_code = 413
        self.assertRaises(exceptions.RequestEntityTooLargeError, lambda: self.redmine.engine.request('post', self.url))

    def test_validation_error_exception(self):
        self.response.status_code = 422
        self.response.json.return_value = {'errors': ['foo', 'bar', ['foo', 'bar']]}
        self.assertRaises(exceptions.ValidationError, lambda: self.redmine.engine.request('post', self.url))

    def test_not_found_error_exception(self):
        self.response.status_code = 404
        self.assertRaises(exceptions.ResourceNotFoundError, lambda: self.redmine.engine.request('get', self.url))

    def test_unknown_error_exception(self):
        self.response.status_code = 888
        self.assertRaises(exceptions.UnknownError, lambda: self.redmine.engine.request('get', self.url))

    def test_http_protocol_exception(self):
        self.response.history = [mock.Mock()]
        self.redmine.url = 'http://foo.bar'
        self.assertRaises(exceptions.HTTPProtocolError, lambda: self.redmine.engine.request('get', self.url))

    def test_engine_is_picklable(self):
        import pickle
        self.redmine.engine.requests['params']['key'] = '123'
        self.redmine.engine.requests['headers']['X-Redmine-Switch-User'] = 'jsmith'
        redmine = pickle.loads(pickle.dumps(self.redmine))
        self.assertEqual(redmine.engine.requests['params']['key'], '123')
        self.assertEqual(redmine.engine.requests['headers']['X-Redmine-Switch-User'], 'jsmith')