Skip to content

Commit 8231dcb

Browse files
authored
Merge pull request #35 from buildingSMART/IVS-413_Company_Detection_Via_Email_Pattern
2 parents 56585ae + 35487fe commit 8231dcb

File tree

2 files changed

+123
-1
lines changed

2 files changed

+123
-1
lines changed

models.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,16 @@ class Meta:
245245
def __str__(self):
246246

247247
return f'{self.name}'
248+
249+
def find_users_by_email_pattern(self, only_new=False):
250+
251+
if self.email_address_pattern:
252+
matching_users = User.objects.filter(email__iregex=self.email_address_pattern)
253+
if only_new:
254+
matching_users = matching_users.exclude(useradditionalinfo__company=self)
255+
return matching_users if matching_users.exists() else None
256+
257+
return None
248258

249259

250260
class UserAdditionalInfo(AuditedBaseModel):
@@ -285,6 +295,19 @@ class Meta:
285295
verbose_name = "User Additional Info"
286296
verbose_name_plural = "User Additional Info"
287297

298+
def find_company_by_email_pattern(self):
299+
300+
if self.email:
301+
302+
companies = Company.objects.filter(email_address_pattern__isnull=False)
303+
if companies.exists():
304+
for company in companies:
305+
user = User.objects.filter(id=self.id, email__iregex=company.email_address_pattern).first()
306+
if user:
307+
return company
308+
309+
return None
310+
288311

289312
class AuthoringTool(TimestampedBaseModel):
290313
"""

tests.py

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from apps.ifc_validation_models.models import ValidationRequest, ValidationTask # TODO: for now needs to be absolute!
66
from apps.ifc_validation_models.models import Company, AuthoringTool, Model
7+
from apps.ifc_validation_models.models import UserAdditionalInfo
78
from apps.ifc_validation_models.models import set_user_context
89

910
class ValidationModelsTestCase(TestCase):
@@ -267,7 +268,7 @@ def test_add_tool_twice_should_fail(self):
267268
def test_add_tool_with_company_twice_should_fail(self):
268269

269270
# arrange
270-
ValidationModelsTestCase.set_user_context()
271+
ValidationModelsTestCase.set_user_context()
271272

272273
# act/assert
273274
company, _ = Company.objects.get_or_create(name='Acme Inc.')
@@ -333,3 +334,101 @@ def test_task_can_navigate_back_to_model(self):
333334
# assert
334335
self.assertIsNotNone(retrieved_task)
335336
self.assertEqual(model.id, model_id)
337+
338+
def test_find_users_by_email_pattern_should_succeed(self):
339+
340+
# arrange
341+
ValidationModelsTestCase.set_user_context()
342+
company = Company.objects.create(name='Acme Inc.', email_address_pattern='@acme.com')
343+
user1 = User.objects.create(id=2, username='JohnDoe', email='[email protected]', is_active=True)
344+
user2 = User.objects.create(id=3, username='JaneDoe', email='[email protected]', is_active=True)
345+
346+
# act
347+
users = company.find_users_by_email_pattern()
348+
349+
# assert
350+
self.assertIsNotNone(users)
351+
self.assertEqual(1, len(users))
352+
self.assertEqual(user1, users[0])
353+
354+
def test_find_users_by_email_pattern_should_succeed2(self):
355+
356+
# arrange
357+
ValidationModelsTestCase.set_user_context()
358+
company = Company.objects.create(name='Acme Inc.', email_address_pattern='@acme.com')
359+
user1 = User.objects.create(id=2, username='JohnDoe', email='[email protected]', is_active=True)
360+
uai1 = UserAdditionalInfo.objects.create(user=user1, company=company)
361+
user2 = User.objects.create(id=3, username='JaneDoe', email='[email protected]', is_active=True)
362+
363+
# act
364+
users = company.find_users_by_email_pattern(only_new=True)
365+
366+
# assert
367+
self.assertIsNotNone(users)
368+
self.assertEqual(1, len(users))
369+
self.assertEqual(user2, users[0])
370+
371+
def test_find_users_by_email_pattern_should_return_none(self):
372+
373+
# arrange
374+
ValidationModelsTestCase.set_user_context()
375+
company = Company.objects.create(name='Acme Inc.', email_address_pattern='@acme.com')
376+
user1 = User.objects.create(id=2, username='JohnDoe', email='[email protected]', is_active=True)
377+
user2 = User.objects.create(id=3, username='JaneDoe', email='[email protected]', is_active=True)
378+
379+
# act
380+
users = company.find_users_by_email_pattern()
381+
382+
# assert
383+
self.assertIsNone(users)
384+
385+
def test_find_company_by_email_pattern_should_succeed(self):
386+
387+
# arrange
388+
ValidationModelsTestCase.set_user_context()
389+
company = Company.objects.create(name='Acme Inc.', email_address_pattern='@acme.com|@looneytunes.com')
390+
user1 = User.objects.create(id=2, username='JohnDoe', email='[email protected]', is_active=True)
391+
user2 = User.objects.create(id=3, username='JaneDoe', email='[email protected]', is_active=True)
392+
393+
# act
394+
company1 = UserAdditionalInfo.find_company_by_email_pattern(user1)
395+
company2 = UserAdditionalInfo.find_company_by_email_pattern(user2)
396+
397+
# assert
398+
self.assertIsNotNone(company1)
399+
self.assertIsNotNone(company2)
400+
self.assertEqual(company, company1)
401+
self.assertEqual(company, company2)
402+
403+
def test_find_company_by_email_pattern_should_succeed2(self):
404+
405+
# arrange
406+
ValidationModelsTestCase.set_user_context()
407+
company = Company.objects.create(name='Acme Inc.', email_address_pattern='@acme.com')
408+
user1 = User.objects.create(id=2, username='JohnDoe', email='[email protected]', is_active=True)
409+
user2 = User.objects.create(id=3, username='JaneDoe', email='[email protected]', is_active=True)
410+
411+
# act
412+
company1 = UserAdditionalInfo.find_company_by_email_pattern(user1)
413+
company2 = UserAdditionalInfo.find_company_by_email_pattern(user2)
414+
415+
# assert
416+
self.assertIsNotNone(company1)
417+
self.assertIsNone(company2)
418+
self.assertEqual(company, company1)
419+
420+
def test_find_company_by_email_pattern_should_return_none(self):
421+
422+
# arrange
423+
ValidationModelsTestCase.set_user_context()
424+
company = Company.objects.create(name='Acme Inc.', email_address_pattern='@acme.com')
425+
user1 = User.objects.create(id=2, username='JohnDoe', email='[email protected]', is_active=True)
426+
user2 = User.objects.create(id=3, username='JaneDoe', email='[email protected]', is_active=True)
427+
428+
# act
429+
company1 = UserAdditionalInfo.find_company_by_email_pattern(user1)
430+
company2 = UserAdditionalInfo.find_company_by_email_pattern(user2)
431+
432+
# assert
433+
self.assertIsNone(company1)
434+
self.assertIsNone(company2)

0 commit comments

Comments
 (0)