Skip to content

Commit 1761570

Browse files
committed
Merge remote-tracking branch 'origin/release/0.8.1'
2 parents dcef621 + 3a4c020 commit 1761570

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from django.db import migrations
2+
3+
4+
class Migration(migrations.Migration):
5+
6+
dependencies = [
7+
('ifc_validation_models', '0016_alter_validationrequest_channel'),
8+
]
9+
10+
operations = [
11+
# '__iexact=' typically translates to UPPER(...) = UPPER(...) in SQL
12+
migrations.RunSQL(
13+
sql="CREATE INDEX IF NOT EXISTS auth_user_username_ci_idx ON auth_user (upper(username));",
14+
reverse_sql="DROP INDEX IF EXISTS auth_user_username_ci_idx;",
15+
)
16+
]

models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from django.db import models
55
from django.db.models import Q
6+
from django.db.models.functions import Lower
67
from django.conf import settings
78
from django.core.exceptions import ImproperlyConfigured
89
from django.utils import timezone
@@ -318,6 +319,9 @@ def find_company_by_email_pattern(self):
318319

319320
return None
320321

322+
def find_user_by_username(username):
323+
324+
return User.objects.filter(username__iexact=username).first()
321325

322326
class AuthoringTool(TimestampedBaseModel):
323327
"""

tests.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -447,4 +447,32 @@ def test_find_company_by_email_pattern_should_return_none(self):
447447

448448
# assert
449449
self.assertIsNone(company1)
450-
self.assertIsNone(company2)
450+
self.assertIsNone(company2)
451+
452+
def test_find_user_by_username_should_succeed(self):
453+
454+
# arrange
455+
ValidationModelsTestCase.set_user_context()
456+
user = User.objects.create(id=2, username='JohnDoe', email='jdoe@acme.com', is_active=True)
457+
458+
# act
459+
result = UserAdditionalInfo.find_user_by_username('johndoe') # notice: all lower case
460+
result2 = UserAdditionalInfo.find_user_by_username('JOHNDOE') # notice: all upper case
461+
462+
# assert
463+
self.assertIsNotNone(result)
464+
self.assertIsNotNone(result2)
465+
self.assertEqual(user, result)
466+
self.assertEqual(user, result2)
467+
468+
def test_find_user_by_username_should_return_none(self):
469+
470+
# arrange
471+
ValidationModelsTestCase.set_user_context()
472+
user = User.objects.create(id=2, username='JohnDoe', email='jdoe@acme.com', is_active=True)
473+
474+
# act
475+
result = UserAdditionalInfo.find_user_by_username('jane')
476+
477+
# assert
478+
self.assertIsNone(result)

0 commit comments

Comments
 (0)