def test_some_names(self, _, __, username, realname, success): """Test some obviously good and bad usernames.""" try: validate_username(username, realname) except ValidationWarning as ex: if success: pytest.fail("Received unexpected error: {error}".format(error=ex))
def recommend(real_name: str, n: int) -> List[Any]: name_fields: List[str] = [name.lower() for name in real_name.split()] # Can reimplement name_field_abbrevs to only remove vowels or consonants name_field_abbrevs: List[List[str]] = [[] for i in range(len(name_fields))] for i in range(len(name_fields)): name_field = name_fields[i] for j in range(1, len(name_field) + 1): name_field_abbrevs[i].append(name_field[:j]) unvalidated_recs = name_field_abbrevs[0] for i in range(1, len(name_fields)): new_unvalidated_recs = [] for name_field_abbrev in name_field_abbrevs[i]: for rec in unvalidated_recs: new_unvalidated_recs.append(rec + name_field_abbrev) unvalidated_recs = new_unvalidated_recs validated_recs: List[Any] = [] while len(validated_recs) < n and len(unvalidated_recs) > 0: rec = unvalidated_recs.pop(randint(0, len(unvalidated_recs) - 1)) try: validate_username(rec, real_name) validated_recs.append(rec) except (ValidationError, ValidationWarning): pass # Account name wasn't valid, skip this recommendation return validated_recs
def test_long_names(self, _, __): """In the past, create has gotten "stuck" trying millions of combinations of real names because we try permutations of the words in the real name.""" with pytest.raises(ValidationWarning): # 16! = 2.09227899e13, so if this works, it's definitely not # because we tried all possibilities validate_username("nomatch", "I Have Sixteen Names A B C D E F G H I J K L")
def test_some_names(self, _, __, username, realname, success,): """Test some obviously good and bad usernames.""" try: validate_username(username, realname) except ValidationWarning as ex: if success: pytest.fail( 'Received unexpected error: {error}'.format(error=ex), )
def test_long_names(self, _, __): """In the past, create has gotten "stuck" trying millions of combinations of real names because we try permutations of the words in the real name.""" with pytest.raises(ValidationWarning): # 16! = 2.09227899e13, so if this works, it's definitely not # because we tried all possibilities validate_username( 'nomatch', 'I Have Sixteen Names A B C D E F G H I J K L', )
def validate(request): real_name = request.GET.get('real_name', None) if real_name is None: return HttpResponseBadRequest('No real_name in validate request') username = request.GET.get('username', None) if username is None: return HttpResponseBadRequest('No username in validate request') try: validate_username(username, real_name) return JsonResponse({ 'is_valid': True, 'msg': 'Username is available.', }) except (ValidationError, ValidationWarning) as e: return JsonResponse({ 'is_valid': False, 'msg': str(e), })
def test_error_user_exists(self): """Ensure that we raise an error if the username already exists.""" with pytest.raises(ValidationError): validate_username('ckuehl', 'Chris Kuehl')
def test_error_names(self, _, __, username): """Ensure that we raise errors when appropriate.""" with pytest.raises(ValidationError): validate_username(username, username)
def test_warning_names(self, _, __, username): """Ensure that we raise warnings when bad/restricted words appear.""" with pytest.raises(ValidationWarning): validate_username(username, username)