diff --git a/tests/test_source_phone.py b/tests/test_source_phone.py
index c95b458..d344a44 100644
--- a/tests/test_source_phone.py
+++ b/tests/test_source_phone.py
@@ -15,6 +15,7 @@
# along with this program. If not, see .
import json
+import re
import pytest
@@ -224,6 +225,54 @@ def test_take_release_line(user, client):
users=user, callee='102').count() == 0
+def test_phone_zone(user, client):
+ client.login(username='toto', password='toto')
+ response = client.get(reverse('phone-zone'))
+ assert response.status_code == 200
+ assert 'You do not have a phoneline configured' in response.content
+
+ models.PhoneLine.take(callee='102', user=user)
+
+ response = client.get(reverse('phone-zone'))
+ assert response.status_code == 200
+ assert 'You do not have a phoneline configured' not in response.content
+ assert '
102' in response.content
+ assert 'data-callee="102"' in response.content
+ currents = re.search(''
+ '(.*?)
', response.content, flags=re.DOTALL)
+ assert currents.group(1).strip() == ''
+
+ # create a call
+ payload = {'event': 'start', 'caller': '003369999999', 'callee': '102'}
+ response = client.post(reverse('phone-call-event'), json.dumps(payload),
+ content_type='application/json')
+ assert response.status_code == 200
+ response = client.get(reverse('phone-zone'))
+ assert response.status_code == 200
+ assert 'Current Call: 003369999999
' in response.content
+
+ # simulate a mellon user
+ session = client.session
+ session['mellon_session'] = {'username': ['agent007@ldap']}
+ session.save()
+ response = client.get(reverse('phone-zone'))
+ assert response.status_code == 200
+ assert 'agent007' not in response.content
+ assert 'data-callee="agent007"' not in response.content
+ assert '102' in response.content
+ assert 'data-callee="102"' in response.content
+
+ with override_settings(PHONE_AUTOTAKE_MELLON_USERNAME=True):
+ response = client.get(reverse('phone-zone'))
+ assert response.status_code == 200
+ assert 'Current Call: 003369999999
' in response.content
+ assert 'agent007' in response.content
+ assert 'data-callee="agent007"' in response.content
+ assert '102' in response.content
+ assert 'data-callee="102"' in response.content
+
+
def test_call_expiration(user, client):
assert models.PhoneCall.objects.count() == 0
# create a call
diff --git a/welco/settings.py b/welco/settings.py
index ec05e60..6bba920 100644
--- a/welco/settings.py
+++ b/welco/settings.py
@@ -201,6 +201,9 @@ COUNTER_LINKS = [
# phone system
PHONE_ONE_CALL_PER_CALLEE = True
PHONE_MAX_CALL_DURATION = 0 # in minutes, 0 stands for infinity
+# If user is from SSO (ie django-mellon session), consider username
+# as a phone line number and take it automatically.
+PHONE_AUTOTAKE_MELLON_USERNAME = False
# enable/disable specific features
# ex: FLAVOURS = ['alfortville']
diff --git a/welco/sources/phone/views.py b/welco/sources/phone/views.py
index 0211bc4..8ac3096 100644
--- a/welco/sources/phone/views.py
+++ b/welco/sources/phone/views.py
@@ -52,12 +52,13 @@ class PhoneZone(TemplateView):
template_name = 'welco/phone_home.html'
def get_context_data(self, **kwargs):
- username = self.request.session.get('mellon_session', {}).get('username')
- if username:
- # user is from SSO, username is a phone line (callee), create a link to it
- username = username[0].split('@', 1)[0][:80] # remove realm
+ if settings.PHONE_AUTOTAKE_MELLON_USERNAME:
+ username = self.request.session.get('mellon_session', {}).get('username')
if username:
- PhoneLine.take(callee=username, user=self.request.user)
+ # user is from SSO, username is a phone line (callee), create a link to it
+ username = username[0].split('@', 1)[0][:80] # remove realm
+ if username:
+ PhoneLine.take(callee=username, user=self.request.user)
context = super(PhoneZone, self).get_context_data(**kwargs)
context['source_type'] = ContentType.objects.get_for_model(PhoneCall)
context['phonelines'] = PhoneLine.objects.filter(users__id=self.request.user.id)