Projet

Général

Profil

0001-misc-enable-user-demands-retrieval-from-external-ser.patch

Serghei Mihai (congés, retour 15/05), 04 février 2019 21:39

Télécharger (5,99 ko)

Voir les différences:

Subject: [PATCH] misc: enable user demands retrieval from external services
 (#23717)

 combo/apps/wcs/utils.py                 |   8 +-
 combo/settings.py                       |   3 +
 tests/test_external_demands_services.py | 105 ++++++++++++++++++++++++
 3 files changed, 113 insertions(+), 3 deletions(-)
 create mode 100644 tests/test_external_demands_services.py
combo/apps/wcs/utils.py
22 22
    return hasattr(settings, 'KNOWN_SERVICES') and settings.KNOWN_SERVICES.get('wcs')
23 23

  
24 24
def get_wcs_services():
25
    if not is_wcs_enabled(None):
26
        return {}
27
    return settings.KNOWN_SERVICES.get('wcs')
25
    # initialize with external demands services
26
    services = settings.EXTERNAL_DEMANDS_SERVICES.copy()
27
    if is_wcs_enabled(None):
28
        services.update(settings.KNOWN_SERVICES.get('wcs'))
29
    return services
28 30

  
29 31
def get_wcs_json(wcs_site, path):
30 32
    response = requests.get(path, remote_service=wcs_site, without_user=True,
combo/settings.py
333 333
NEWSLETTERS_CELL_ENABLED = False
334 334
USERSEARCH_CELL_ENABLED = False
335 335

  
336
# external services with user demands
337
EXTERNAL_DEMANDS_SERVICES = {}
338

  
336 339
local_settings_file = os.environ.get('COMBO_SETTINGS_FILE',
337 340
        os.path.join(os.path.dirname(__file__), 'local_settings.py'))
338 341
if os.path.exists(local_settings_file):
tests/test_external_demands_services.py
1
# -*- coding: utf-8 -*-
2

  
3
import mock
4
import pytest
5
import re
6

  
7
from django.test import override_settings
8

  
9
from combo.data.models import Page
10
from combo.apps.wcs.models import WcsCurrentFormsCell
11

  
12
from .test_manager import login
13

  
14
pytestmark = pytest.mark.django_db
15

  
16
ARPEGE_WS = {
17
    "title": "Portal Arpege",
18
    "url": "https://example.com/arpege-ecp/arpege"
19
}
20

  
21
@override_settings(EXTERNAL_DEMANDS_SERVICES={'arpege': ARPEGE_WS})
22
@mock.patch('combo.utils.requests.get')
23
def test_manager_external_services(mock_get, app, admin_user):
24
    page = Page(title='External demands', slug='external-demands', template_name='standard')
25
    page.save()
26
    app = login(app)
27
    mock_response = mock.Mock(status_code=200, content="{}")
28
    mock_get.return_value = mock_response
29
    resp = app.get('/manage/pages/%s/' % page.id)
30

  
31
    resp = app.get(resp.html.find('option',
32
                   **{'data-add-url': re.compile('wcscurrentformscell')})['data-add-url'])
33

  
34
    cells = Page.objects.get(id=page.id).get_cells()
35
    assert len(cells) == 1
36
    assert isinstance(cells[0], WcsCurrentFormsCell)
37

  
38
    categories_response = mock.Mock(status_code=200)
39
    categories_response.json.return_value = {'data': []}
40
    mock_get.return_value = categories_response
41

  
42
    resp = app.get('/manage/pages/%s/' % page.id)
43
    assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.text
44
    field_name = "c%s-wcs_site" % cells[0].get_reference()
45
    assert len(resp.form.fields[field_name][0].options) == 4
46
    # external service is second and not selected
47
    assert resp.form.fields[field_name][0].options[1] == ('arpege', False, 'Portal Arpege')
48

  
49

  
50
@override_settings(EXTERNAL_DEMANDS_SERVICES={'arpege': ARPEGE_WS})
51
@mock.patch('combo.utils.requests.get')
52
def test_external_demands(mock_get, app, admin_user):
53
    Page.objects.all().delete()
54
    page = Page(title='One', slug='one', template_name='standard')
55
    page.save()
56
    app = login(app)
57
    resp = app.get('/manage/pages/%s/' % page.id)
58
    resp = app.get(resp.html.find('option',
59
                   **{'data-add-url': re.compile('wcscurrentformscell')})['data-add-url'])
60
    resp = app.get('/manage/pages/%s/' % page.id)
61
    cells = Page.objects.get(id=page.id).get_cells()
62
    field_name = "c%s-wcs_site" % cells[0].get_reference()
63
    resp.form[field_name].value = 'arpege'
64
    resp = resp.form.submit().follow()
65
    assert resp.form.fields[field_name][0].options[1] == ('arpege', True, 'Portal Arpege')
66
    demands_response = mock.Mock(status_code=200)
67
    demands_response.json.return_value = {'data': [
68
        {'url': 'https://example.com/demand/1',
69
         'name': 'First Demand',
70
         'title': 'First Demand',
71
         'status': 'In progress',
72
         'form_receipt_time': '10:00',
73
         'readable': True,
74
         'form_receipt_datetime': '2019-02-04T10:00',
75
         'form_status_is_endpoint': False},
76
        {'url': 'https://example.com/demand/2',
77
         'name': 'Second Demand',
78
         'title': 'Second Demand',
79
         'status': 'Finished',
80
         'readable': True,
81
         'form_receipt_time': '09:00',
82
         'form_receipt_datetime': '2019-02-04T09:00',
83
         'form_status_is_endpoint': True}
84
    ]}
85
    mock_get.return_value = demands_response
86
    resp = app.get(page.get_online_url())
87
    cell_url = re.findall(r'/ajax/cell/.*/wcs_wcscurrentformscell-.*/', resp.text)[0]
88
    resp = app.get(cell_url)
89
    assert "First Demand" in resp.text
90
    assert "In progress" in resp.text
91
    assert "https://example.com/demand/1" in resp.text
92

  
93
    assert "Second Demand" not in resp.text
94
    assert "Finished" not in resp.text
95
    assert "https://example.com/demand/2" not in resp.text
96

  
97
    # also show done demands
98
    resp = app.get('/manage/pages/%s/' % page.id)
99
    resp.form['c%s-done_forms' % cells[0].get_reference()].value = True
100
    resp = resp.form.submit().follow()
101
    resp = app.get(cell_url)
102

  
103
    assert "Second Demand" in resp.text
104
    assert "Finished" in resp.text
105
    assert "https://example.com/demand/2" in resp.text
0
-