Skip to content

Commit 8a7b116

Browse files
committed
issue #227
1 parent 4e73fae commit 8a7b116

6 files changed

Lines changed: 36 additions & 7 deletions

File tree

CHANGELOG.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ Changelog
2222

2323
**Bugfixes**:
2424

25+
- User's ``send_information`` field wasn't sent correctly to Redmine so account information emails were
26+
never sent (`Issue #227 <https://github.com/maxtepkeev/python-redmine/pull/227>`__) (thanks to
27+
`wodny <https://github.com/wodny>`__)
2528
- Project resource ``default_version`` attribute was returned as a dict instead of being converted to
2629
Resource object
2730
- Resource object was leaking memory during initialization (`Issue #257 <https://github.com/maxtepkeev/python-redmine/

redminelib/managers/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
"""
44

55
from .base import ResourceManager
6-
from .standard import WikiPageManager, FileManager, NewsManager
6+
from .standard import FileManager, WikiPageManager, UserManager, NewsManager

redminelib/managers/standard.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@
66
from .. import exceptions
77

88

9+
class FileManager(ResourceManager):
10+
def _process_create_response(self, request, response):
11+
if response is True:
12+
response = {self.container: {'id': int(request[self.container]['token'].split('.')[0])}}
13+
14+
return super(FileManager, self)._process_create_response(request, response)
15+
16+
917
class WikiPageManager(ResourceManager):
1018
def _process_create_response(self, request, response):
1119
if response is True:
@@ -14,12 +22,16 @@ def _process_create_response(self, request, response):
1422
return super(WikiPageManager, self)._process_create_response(request, response)
1523

1624

17-
class FileManager(ResourceManager):
18-
def _process_create_response(self, request, response):
19-
if response is True:
20-
response = {self.container: {'id': int(request[self.container]['token'].split('.')[0])}}
25+
class UserManager(ResourceManager):
26+
def _prepare_create_request(self, request):
27+
request = super(UserManager, self)._prepare_create_request(request)
28+
request['send_information'] = request[self.container].pop('send_information', False)
29+
return request
2130

22-
return super(FileManager, self)._process_create_response(request, response)
31+
def _prepare_update_request(self, request):
32+
request = super(UserManager, self)._prepare_update_request(request)
33+
request['send_information'] = request[self.resource_class.container_update].pop('send_information', False)
34+
return request
2335

2436

2537
class NewsManager(ResourceManager):

redminelib/resources/standard.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ class User(BaseResource):
403403
query_create = '/users.json'
404404
query_update = '/users/{0}.json'
405405
query_delete = '/users/{0}.json'
406+
manager_class = managers.UserManager
406407

407408
_repr = [['id', 'firstname', 'lastname'], ['id', 'name']]
408409
_includes = ['memberships', 'groups']

tests/test_managers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class FooResource(resources.Project):
1212

1313
class ResourceManagerTestCase(BaseRedmineTestCase):
1414
def test_has_custom_repr(self):
15-
self.assertEqual(repr(self.redmine.user), '<redminelib.managers.ResourceManager object for User resource>')
15+
self.assertEqual(repr(self.redmine.issue), '<redminelib.managers.ResourceManager object for Issue resource>')
1616

1717
def test_supports_additional_resources(self):
1818
self.assertIsInstance(self.redmine.foo_resource, managers.ResourceManager)

tests/test_resources_standard.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,13 @@ def test_user_create(self):
10411041
self.assertEqual(user.firstname, 'John')
10421042
self.assertEqual(user.lastname, 'Smith')
10431043

1044+
def test_user_create_with_send_information(self):
1045+
import json
1046+
self.response.status_code = 201
1047+
self.response.json.return_value = responses['user']['get']
1048+
self.redmine.user.create(firstname='John', lastname='Smith', send_information=True)
1049+
self.assertEqual(json.loads(self.patch_requests.call_args[1]['data'])['send_information'], True)
1050+
10441051
def test_user_delete(self):
10451052
self.response.json.return_value = responses['user']['get']
10461053
user = self.redmine.user.get(1)
@@ -1055,6 +1062,12 @@ def test_user_update(self):
10551062
user.firstname = 'Bar'
10561063
self.assertIsInstance(user.save(), resources.User)
10571064

1065+
def test_user_update_with_send_information(self):
1066+
import json
1067+
self.response.json.return_value = responses['user']['get']
1068+
self.redmine.user.update(1, firstname='John', lastname='Smith', send_information=True)
1069+
self.assertEqual(json.loads(self.patch_requests.call_args[1]['data'])['send_information'], True)
1070+
10581071
def test_user_custom_str(self):
10591072
self.response.json.return_value = responses['user']['get']
10601073
self.assertEqual(str(self.redmine.user.get(1)), 'John Smith')

0 commit comments

Comments
 (0)