diff --git a/api/controllers/console/setup.py b/api/controllers/console/setup.py index 7fa02ae280..ed22ef045d 100644 --- a/api/controllers/console/setup.py +++ b/api/controllers/console/setup.py @@ -84,10 +84,11 @@ class SetupApi(Resource): raise NotInitValidateError() args = SetupRequestPayload.model_validate(console_ns.payload) + normalized_email = args.email.lower() # setup RegisterService.setup( - email=args.email, + email=normalized_email, name=args.name, password=args.password, ip_address=extract_remote_ip(request), diff --git a/api/tests/unit_tests/controllers/console/test_setup.py b/api/tests/unit_tests/controllers/console/test_setup.py new file mode 100644 index 0000000000..900bdbc8a9 --- /dev/null +++ b/api/tests/unit_tests/controllers/console/test_setup.py @@ -0,0 +1,43 @@ +from types import SimpleNamespace +from unittest.mock import patch + +from controllers.console.setup import SetupApi + + +class TestSetupApi: + def test_post_lowercases_email_before_register(self): + """Ensure setup registration normalizes email casing.""" + payload = { + "email": "Admin@Example.com", + "name": "Admin User", + "password": "ValidPass123!", + "language": "en-US", + } + setup_api = SetupApi(api=None) + + mock_console_ns = SimpleNamespace(payload=payload) + + with patch("controllers.console.setup.console_ns", mock_console_ns), patch( + "controllers.console.setup.get_setup_status", return_value=False + ), patch( + "controllers.console.setup.TenantService.get_tenant_count", return_value=0 + ), patch( + "controllers.console.setup.get_init_validate_status", return_value=True + ), patch( + "controllers.console.setup.extract_remote_ip", return_value="127.0.0.1" + ), patch( + "controllers.console.setup.request", object() + ), patch( + "controllers.console.setup.RegisterService.setup" + ) as mock_register: + response, status = setup_api.post() + + assert response == {"result": "success"} + assert status == 201 + mock_register.assert_called_once_with( + email="admin@example.com", + name=payload["name"], + password=payload["password"], + ip_address="127.0.0.1", + language=payload["language"], + )