Projet

Général

Profil

0001-phone-don-t-use-SSO-username-as-a-line-by-default-16.patch

Thomas Noël, 02 juin 2017 09:32

Télécharger (4,9 ko)

Voir les différences:

Subject: [PATCH] phone: don't use SSO username as a line by default (#16648)

 tests/test_source_phone.py   | 49 ++++++++++++++++++++++++++++++++++++++++++++
 welco/settings.py            |  3 +++
 welco/sources/phone/views.py | 11 +++++-----
 3 files changed, 58 insertions(+), 5 deletions(-)
tests/test_source_phone.py
15 15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
import json
18
import re
18 19

  
19 20
import pytest
20 21

  
......
224 225
        users=user, callee='102').count() == 0
225 226

  
226 227

  
228
def test_phone_zone(user, client):
229
    client.login(username='toto', password='toto')
230
    response = client.get(reverse('phone-zone'))
231
    assert response.status_code == 200
232
    assert 'You do not have a phoneline configured' in response.content
233

  
234
    models.PhoneLine.take(callee='102', user=user)
235

  
236
    response = client.get(reverse('phone-zone'))
237
    assert response.status_code == 200
238
    assert 'You do not have a phoneline configured' not in response.content
239
    assert '<li>102' in response.content
240
    assert 'data-callee="102"' in response.content
241
    currents = re.search('<div id="source-mainarea" '
242
                         'data-current-calls="/api/phone/current-calls/">'
243
                         '(.*?)</div>', response.content, flags=re.DOTALL)
244
    assert currents.group(1).strip() == ''
245

  
246
    # create a call
247
    payload = {'event': 'start', 'caller': '003369999999', 'callee': '102'}
248
    response = client.post(reverse('phone-call-event'), json.dumps(payload),
249
                           content_type='application/json')
250
    assert response.status_code == 200
251
    response = client.get(reverse('phone-zone'))
252
    assert response.status_code == 200
253
    assert '<h1>Current Call: <strong>003369999999</strong></h1>' in response.content
254

  
255
    # simulate a mellon user
256
    session = client.session
257
    session['mellon_session'] = {'username': ['agent007']}
258
    session.save()
259
    response = client.get(reverse('phone-zone'))
260
    assert response.status_code == 200
261
    assert 'agent007' not in response.content
262
    assert 'data-callee="agent007"' not in response.content
263
    assert '<li>102' in response.content
264
    assert 'data-callee="102"' in response.content
265

  
266
    with override_settings(PHONE_AUTOTAKE_MELLON_USERNAME=True):
267
        response = client.get(reverse('phone-zone'))
268
        assert response.status_code == 200
269
        assert '<h1>Current Call: <strong>003369999999</strong></h1>' in response.content
270
        assert 'agent007' in response.content
271
        assert 'data-callee="agent007"' in response.content
272
        assert '<li>102' in response.content
273
        assert 'data-callee="102"' in response.content
274

  
275

  
227 276
def test_call_expiration(user, client):
228 277
    assert models.PhoneCall.objects.count() == 0
229 278
    # create a call
welco/settings.py
201 201
# phone system
202 202
PHONE_ONE_CALL_PER_CALLEE = True
203 203
PHONE_MAX_CALL_DURATION = 0  # in minutes, 0 stands for infinity
204
# If user is from SSO (ie django-mellon session), consider username
205
# as a phone line number and take it automatically.
206
PHONE_AUTOTAKE_MELLON_USERNAME = False
204 207

  
205 208
# enable/disable specific features
206 209
# ex: FLAVOURS = ['alfortville']
welco/sources/phone/views.py
52 52
    template_name = 'welco/phone_home.html'
53 53

  
54 54
    def get_context_data(self, **kwargs):
55
        username = self.request.session.get('mellon_session', {}).get('username')
56
        if username:
57
            # user is from SSO, username is a phone line (callee), create a link to it
58
            username = username[0].split('@', 1)[0][:80] # remove realm
55
        if settings.PHONE_AUTOTAKE_MELLON_USERNAME:
56
            username = self.request.session.get('mellon_session', {}).get('username')
59 57
            if username:
60
                PhoneLine.take(callee=username, user=self.request.user)
58
                # user is from SSO, username is a phone line (callee), create a link to it
59
                username = username[0].split('@', 1)[0][:80] # remove realm
60
                if username:
61
                    PhoneLine.take(callee=username, user=self.request.user)
61 62
        context = super(PhoneZone, self).get_context_data(**kwargs)
62 63
        context['source_type'] = ContentType.objects.get_for_model(PhoneCall)
63 64
        context['phonelines'] = PhoneLine.objects.filter(users__id=self.request.user.id)
64
-