Projet

Général

Profil

0001-health-api-return-dictionnary-26835.patch

Christophe Siraut, 15 novembre 2018 13:01

Télécharger (4,24 ko)

Voir les différences:

Subject: [PATCH] health api: return dictionnary (#26835)

 hobo/rest/views.py       | 17 +++++++++++++++++
 tests/test_health_api.py | 31 ++++++++++---------------------
 2 files changed, 27 insertions(+), 21 deletions(-)
hobo/rest/views.py
16 16

  
17 17
from rest_framework import generics
18 18
from rest_framework import permissions
19
from rest_framework.response import Response
19 20

  
20 21
from hobo.environment.utils import get_installed_services
21 22
from hobo.rest.serializers import HealthBaseSerializer
......
27 28

  
28 29
    def get_queryset(self):
29 30
        return [x for x in get_installed_services() if not x.secondary]
31

  
32
    def list(self, request, *args, **kwargs):
33
        """
34
        Custom dictionnary object
35
        """
36
        self.object_list = self.filter_queryset(self.get_queryset())
37

  
38
        # Switch between paginated or standard style responses
39
        page = self.paginate_queryset(self.object_list)
40
        if page is not None:
41
            serializer = self.get_pagination_serializer(page)
42
        else:
43
            serializer = self.get_serializer(self.object_list, many=True)
44

  
45
        response = {d['slug']: d for d in serializer.data}
46
        return Response(response)
tests/test_health_api.py
11 11
pytestmark = pytest.mark.django_db
12 12

  
13 13

  
14
def get_entry(ls, title):
15
    """
16
    Search a list of dictionnaries
17
    """
18
    entries = [i for i in ls if i['title'] == title]
19
    if len(entries) > 1:
20
        raise(Exception('There is more than 1 %s' % title))
21
    return entries[0]
22

  
23

  
24 14
@pytest.fixture
25 15
def services(request):
26 16
    now = timezone.now()
......
38 28
    response = app.get('/api/health/')
39 29
    assert response.status_code == 200
40 30
    content = json.loads(response.content)
41
    assert len(content) == 2
42
    assert content[0]['title'] == 'blues'
43
    assert content[1]['title'] == 'jazz'
31
    assert 'blues' in content.keys()
32
    assert 'jazz' in content.keys()
44 33

  
45 34

  
46 35
def test_is_resolvable(app, services, monkeypatch):
......
53 42
    monkeypatch.setattr(requests, 'get', lambda x, verify: MagicMock(status_code=200))
54 43
    response = app.get('/api/health/')
55 44
    content = json.loads(response.content)
56
    blues = get_entry(content, 'blues')
57
    jazz = get_entry(content, 'jazz')
45
    blues = content.get('blues')
46
    jazz = content.get('jazz')
58 47
    assert not blues['is_resolvable']
59 48
    assert jazz['is_resolvable']
60 49

  
......
69 58
    monkeypatch.setattr(requests, 'get', get)
70 59
    response = app.get('/api/health/')
71 60
    content = json.loads(response.content)
72
    blues = get_entry(content, 'blues')
73
    jazz = get_entry(content, 'jazz')
61
    blues = content.get('blues')
62
    jazz = content.get('jazz')
74 63
    assert not blues['is_running']
75 64
    assert jazz['is_running']
76 65

  
......
80 69
    monkeypatch.setattr(requests, 'get', lambda x, verify: MagicMock(status_code=200))
81 70
    response = app.get('/api/health/')
82 71
    content = json.loads(response.content)
83
    blues = get_entry(content, 'blues')
84
    jazz = get_entry(content, 'jazz')
72
    blues = content.get('blues')
73
    jazz = content.get('jazz')
85 74
    assert blues['is_operational']
86 75
    assert not jazz['is_operational']
87 76

  
......
96 85
    monkeypatch.setattr(requests, 'get', get)
97 86
    response = app.get('/api/health/')
98 87
    content = json.loads(response.content)
99
    blues = get_entry(content, 'blues')
100
    jazz = get_entry(content, 'jazz')
88
    blues = content.get('blues')
89
    jazz = content.get('jazz')
101 90
    assert blues['has_valid_certificate']
102 91
    assert not jazz['has_valid_certificate']
103
-