Skip to content

Commit

Permalink
Merge pull request #233 from Duke-GCB/dds-email-work-around
Browse files Browse the repository at this point in the history
Derive emails from username when not present
  • Loading branch information
johnbradley authored Apr 17, 2020
2 parents d8f3d94 + fb1d902 commit d4aa26b
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 1 deletion.
2 changes: 2 additions & 0 deletions d4s2/settings_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,3 +183,5 @@
'JWT_ALLOW_REFRESH': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=7200),
}

USERNAME_EMAIL_HOST = os.getenv('D4S2_USERNAME_EMAIL_HOST')
12 changes: 12 additions & 0 deletions switchboard/dds_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@
DDS_PERMISSIONS_ID_SEP = '_'


def create_email_from_username(username):
# email addresses can be created by adding a host to a username for users who
# have their email addresses hidden in the DukeDS affiliates API
if settings.USERNAME_EMAIL_HOST:
return '{}@{}'.format(username, settings.USERNAME_EMAIL_HOST)
return None


class DDSUtil(object):
def __init__(self, user):
if not user:
Expand Down Expand Up @@ -157,6 +165,8 @@ def __init__(self, user_dict):
self.first_name = user_dict.get('first_name')
self.last_name = user_dict.get('last_name')
self.email = user_dict.get('email')
if not self.email:
self.email = create_email_from_username(self.username)

@staticmethod
def fetch_list(dds_util, full_name_contains, email, username):
Expand Down Expand Up @@ -598,6 +608,8 @@ def __init__(self, project_dict):
self.first_name = project_dict.get('first_name')
self.last_name = project_dict.get('last_name')
self.email = project_dict.get('email')
if not self.email:
self.email = create_email_from_username(self.uid)

@staticmethod
def fetch_list(dds_util, auth_provider_id, full_name_contains, email, username):
Expand Down
60 changes: 59 additions & 1 deletion switchboard/tests_ddsutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,16 @@
from switchboard.dds_util import DDSUtil, DeliveryDetails, DeliveryUtil, DDSDeliveryType, \
SHARE_IN_RESPONSE_TO_DELIVERY_MSG, PROJECT_ADMIN_ID, DDSProject, DDSProjectPermissions, \
DDS_PERMISSIONS_ID_SEP, MessageDirection, DDSUser, DDSAuthProvider, DDSAffiliate, DDSProjectSummary, \
DataServiceError, DDSNotRecipientException, DDSProjectTransfer
DataServiceError, DDSNotRecipientException, DDSProjectTransfer, create_email_from_username


class CreateEmailTestCase(TestCase):
@patch('switchboard.dds_util.settings')
def test_create_email_from_username(self, mock_settings):
mock_settings.USERNAME_EMAIL_HOST = None
self.assertEqual(create_email_from_username('user1'), None)
mock_settings.USERNAME_EMAIL_HOST = 'test.com'
self.assertEqual(create_email_from_username('user1'), '[email protected]')


class DDSUtilTestCase(TestCase):
Expand Down Expand Up @@ -697,6 +706,33 @@ def setUp(self):
'email': '[email protected]'
}

def test_constructor(self):
dds_user = DDSUser(self.user_dict)
self.assertEqual(dds_user.id, 'user-id-1')
self.assertEqual(dds_user.username, 'username-123')
self.assertEqual(dds_user.full_name, 'First Last')
self.assertEqual(dds_user.email, '[email protected]')

@patch('switchboard.dds_util.settings')
def test_constructor_null_email(self, mock_settings):
mock_settings.USERNAME_EMAIL_HOST = None
self.user_dict['email'] = None
dds_user = DDSUser(self.user_dict)
self.assertEqual(dds_user.id, 'user-id-1')
self.assertEqual(dds_user.username, 'username-123')
self.assertEqual(dds_user.full_name, 'First Last')
self.assertEqual(dds_user.email, None)

@patch('switchboard.dds_util.settings')
def test_constructor_null_email_with_email_host(self, mock_settings):
self.user_dict['email'] = None
mock_settings.USERNAME_EMAIL_HOST = 'test.com'
dds_user = DDSUser(self.user_dict)
self.assertEqual(dds_user.id, 'user-id-1')
self.assertEqual(dds_user.username, 'username-123')
self.assertEqual(dds_user.full_name, 'First Last')
self.assertEqual(dds_user.email, '[email protected]')

def test_get_or_register_user_when_user_exists(self):
mock_dds_util = Mock()
mock_dds_util.get_users.return_value.json.return_value = {'results': [self.user_dict]}
Expand Down Expand Up @@ -783,6 +819,28 @@ def test_constructor(self):
self.assertEqual(affiliate.last_name, 'Smith')
self.assertEqual(affiliate.email, '[email protected]')

@patch('switchboard.dds_util.settings')
def test_constructor_null_email(self, mock_settings):
mock_settings.USERNAME_EMAIL_HOST = None
self.dds_affiliate_dict['email'] = None
affiliate = DDSAffiliate(self.dds_affiliate_dict)
self.assertEqual(affiliate.uid, 'joe123')
self.assertEqual(affiliate.full_name, 'Joe Smith')
self.assertEqual(affiliate.first_name, 'Joe')
self.assertEqual(affiliate.last_name, 'Smith')
self.assertEqual(affiliate.email, None)

@patch('switchboard.dds_util.settings')
def test_constructor_null_email_with_email_host(self, mock_settings):
mock_settings.USERNAME_EMAIL_HOST = 'test.com'
self.dds_affiliate_dict['email'] = None
affiliate = DDSAffiliate(self.dds_affiliate_dict)
self.assertEqual(affiliate.uid, 'joe123')
self.assertEqual(affiliate.full_name, 'Joe Smith')
self.assertEqual(affiliate.first_name, 'Joe')
self.assertEqual(affiliate.last_name, 'Smith')
self.assertEqual(affiliate.email, '[email protected]')

def test_fetch_list(self):
self.mock_dds_util.get_auth_provider_affiliates.return_value = {
'results': [
Expand Down

0 comments on commit d4aa26b

Please sign in to comment.