Projet

Général

Profil

0001-archimed-truncate-sent-uuid-when-over-30-characters-.patch

Josué Kouka, 10 octobre 2017 15:09

Télécharger (4,36 ko)

Voir les différences:

Subject: [PATCH] archimed: truncate sent uuid when over 30 characters (#19149)

 mandayejs/applications.py |  2 +-
 mandayejs/views.py        |  9 +++++++--
 tests/test_archimed.py    | 21 ++++++++++++---------
 3 files changed, 20 insertions(+), 12 deletions(-)
mandayejs/applications.py
185 185
    urlpatterns = patterns(
186 186
        '',
187 187
        url(
188
            r'account/(?P<username>[\w+]*)/$',
188
            r'account/(?P<username>[\w,-]+)/$',
189 189
            'mandayejs.views.archimed_account_details',
190 190
            name='archimed-account-details'),
191 191
    )
mandayejs/views.py
46 46
        ws_uri = request.build_absolute_uri(
47 47
            app_settings.SITE_WS_ENDPOINT['account_details'])
48 48

  
49
        username = kwargs['username']
49
        # mellon truncates username to 30 characters
50
        # thus the passed username should be truncated to 30 characters
51
        # for searching purposer
52
        username = kwargs['username'][:30]
50 53

  
51 54
        try:
52
            user = User.objects.get(username=username)
55
            # *startswith* to deal with the looseness of sqlite
56
            # and the strictness of postgres
57
            user = User.objects.get(username__startswith=username)
53 58
        except (User.DoesNotExist,):
54 59
            return Response('User %s does not exist' % username, status=status.HTTP_404_NOT_FOUND)
55 60

  
tests/test_archimed.py
1 1
import os
2 2
import json
3
import uuid
3 4

  
4 5
import pytest
5 6
import mock
......
34 35
    mocked_get_app_settings.return_value = Archimed
35 36
    mocked_requests_post.side_effect = MOCKED_RESPONSES_LIST
36 37

  
37
    user = create_user(username='kevin', password='kevin')
38
    user_uuid = uuid.uuid4().hex
39

  
40
    user = create_user(username=user_uuid, password='kevin')
38 41

  
39 42
    # test with invalid username
40 43
    client = Client()
41
    client.login(username='kevin', password='kevin')
44
    client.login(username=user_uuid, password='kevin')
42 45
    response = client.get('/_mandaye/ws/account/whatever/')
43 46
    assert response.status_code == 404
44 47
    assert json.loads(response.content)['err_desc'] == 'User whatever does not exist'
......
46 49

  
47 50
    # test with unlinked user
48 51
    client = Client()
49
    client.login(username='kevin', password='kevin')
50
    response = client.get('/_mandaye/ws/account/kevin/')
52
    client.login(username=user_uuid, password='kevin')
53
    response = client.get('/_mandaye/ws/account/%s/' % user_uuid)
51 54
    assert response.status_code == 404
52
    assert json.loads(response.content)['err_desc'] == 'User kevin is not associated'
55
    assert json.loads(response.content)['err_desc'] == 'User %s is not associated' % user_uuid[:30]
53 56
    assert json.loads(response.content)['err'] == 1
54 57

  
55 58
    create_credentials(user, {'carte': 'kevin', 'code': 'whatever'})
56 59
    # test with wrong credentials
57 60
    client = Client()
58
    client.login(username='kevin', password='kevin')
59
    response = client.get('/_mandaye/ws/account/kevin/')
61
    client.login(username=user_uuid, password='kevin')
62
    response = client.get('/_mandaye/ws/account/%s/' % user_uuid)
60 63
    assert response.status_code == 401
61 64
    assert json.loads(response.content)['err_desc'] == 'Authentication failed'
62 65
    assert json.loads(response.content)['err'] == 1
63 66

  
64 67
    # test with good credentials
65
    client.login(username='kevin', password='kevin')
66
    response = client.get('/_mandaye/ws/account/kevin/')
68
    client.login(username=user_uuid, password='kevin')
69
    response = client.get('/_mandaye/ws/account/%s/' % user_uuid)
67 70
    assert response.status_code == 200
68 71
    assert json.loads(response.content)['data']['message'] == 'Whatever is whatever'
69 72
    assert json.loads(response.content)['data']['success'] is True
70
-