"""
Create a new user with built-in authentication (admin only).
- :param username: The username (minimum 3 characters).
+ :param username: The username (minimum 2 characters).
:param password: The password (minimum 8 characters).
:param role: User role - "admin" or "user" (default: "user").
:param display_name: Optional display name.
:return: Created user object.
"""
# Validation
- if not username or len(username) < 3:
- raise InvalidDataError("Username must be at least 3 characters")
+ if not username or len(username) < 2:
+ raise InvalidDataError("Username must be at least 2 characters")
if not password or len(password) < 8:
raise InvalidDataError("Password must be at least 8 characters")
display_name = body.get("display_name")
# Validation
- if not username or len(username) < 3:
+ if not username or len(username) < 2:
return web.json_response(
- {"success": False, "error": "Username must be at least 3 characters"}, status=400
+ {"success": False, "error": "Username must be at least 2 characters"}, status=400
)
if not password or len(password) < 8:
set_current_user(admin)
# Test username too short
- with pytest.raises(InvalidDataError, match="Username must be at least 3 characters"):
+ with pytest.raises(InvalidDataError, match="Username must be at least 2 characters"):
await auth_manager.create_user_with_api(
- username="ab",
+ username="a",
password="password123",
)
+ # Test 2-character username is accepted (minimum allowed)
+ user_2char = await auth_manager.create_user_with_api(
+ username="ab",
+ password="password123",
+ )
+ assert user_2char.username == "ab"
+
# Test password too short
with pytest.raises(InvalidDataError, match="Password must be at least 8 characters"):
await auth_manager.create_user_with_api(