mirror of
https://github.com/langgenius/dify.git
synced 2026-09-08 11:04:27 +08:00
test: migrate email register tests to testcontainers (#33971)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
9065d54f4a
commit
b78ca4e8e8
@ -1,8 +1,11 @@
|
|||||||
|
"""Testcontainers integration tests for email register controller endpoints."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from flask import Flask
|
|
||||||
|
|
||||||
from controllers.console.auth.email_register import (
|
from controllers.console.auth.email_register import (
|
||||||
EmailRegisterCheckApi,
|
EmailRegisterCheckApi,
|
||||||
@ -13,14 +16,11 @@ from services.account_service import AccountService
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def app():
|
def app(flask_app_with_containers):
|
||||||
flask_app = Flask(__name__)
|
return flask_app_with_containers
|
||||||
flask_app.config["TESTING"] = True
|
|
||||||
return flask_app
|
|
||||||
|
|
||||||
|
|
||||||
class TestEmailRegisterSendEmailApi:
|
class TestEmailRegisterSendEmailApi:
|
||||||
@patch("controllers.console.auth.email_register.Session")
|
|
||||||
@patch("controllers.console.auth.email_register.AccountService.get_account_by_email_with_case_fallback")
|
@patch("controllers.console.auth.email_register.AccountService.get_account_by_email_with_case_fallback")
|
||||||
@patch("controllers.console.auth.email_register.AccountService.send_email_register_email")
|
@patch("controllers.console.auth.email_register.AccountService.send_email_register_email")
|
||||||
@patch("controllers.console.auth.email_register.BillingService.is_email_in_freeze")
|
@patch("controllers.console.auth.email_register.BillingService.is_email_in_freeze")
|
||||||
@ -33,20 +33,15 @@ class TestEmailRegisterSendEmailApi:
|
|||||||
mock_is_freeze,
|
mock_is_freeze,
|
||||||
mock_send_mail,
|
mock_send_mail,
|
||||||
mock_get_account,
|
mock_get_account,
|
||||||
mock_session_cls,
|
|
||||||
app,
|
app,
|
||||||
):
|
):
|
||||||
mock_send_mail.return_value = "token-123"
|
mock_send_mail.return_value = "token-123"
|
||||||
mock_is_freeze.return_value = False
|
mock_is_freeze.return_value = False
|
||||||
mock_account = MagicMock()
|
mock_account = MagicMock()
|
||||||
|
|
||||||
mock_session = MagicMock()
|
|
||||||
mock_session_cls.return_value.__enter__.return_value = mock_session
|
|
||||||
mock_get_account.return_value = mock_account
|
mock_get_account.return_value = mock_account
|
||||||
|
|
||||||
feature_flags = SimpleNamespace(enable_email_password_login=True, is_allow_register=True)
|
feature_flags = SimpleNamespace(enable_email_password_login=True, is_allow_register=True)
|
||||||
with (
|
with (
|
||||||
patch("controllers.console.auth.email_register.db", SimpleNamespace(engine="engine")),
|
|
||||||
patch("controllers.console.auth.email_register.dify_config", SimpleNamespace(BILLING_ENABLED=True)),
|
patch("controllers.console.auth.email_register.dify_config", SimpleNamespace(BILLING_ENABLED=True)),
|
||||||
patch("controllers.console.wraps.dify_config", SimpleNamespace(EDITION="CLOUD")),
|
patch("controllers.console.wraps.dify_config", SimpleNamespace(EDITION="CLOUD")),
|
||||||
patch("controllers.console.wraps.FeatureService.get_system_features", return_value=feature_flags),
|
patch("controllers.console.wraps.FeatureService.get_system_features", return_value=feature_flags),
|
||||||
@ -61,7 +56,6 @@ class TestEmailRegisterSendEmailApi:
|
|||||||
assert response == {"result": "success", "data": "token-123"}
|
assert response == {"result": "success", "data": "token-123"}
|
||||||
mock_is_freeze.assert_called_once_with("invitee@example.com")
|
mock_is_freeze.assert_called_once_with("invitee@example.com")
|
||||||
mock_send_mail.assert_called_once_with(email="invitee@example.com", account=mock_account, language="en-US")
|
mock_send_mail.assert_called_once_with(email="invitee@example.com", account=mock_account, language="en-US")
|
||||||
mock_get_account.assert_called_once_with("Invitee@Example.com", session=mock_session)
|
|
||||||
mock_extract_ip.assert_called_once()
|
mock_extract_ip.assert_called_once()
|
||||||
mock_is_email_send_ip_limit.assert_called_once_with("127.0.0.1")
|
mock_is_email_send_ip_limit.assert_called_once_with("127.0.0.1")
|
||||||
|
|
||||||
@ -89,7 +83,6 @@ class TestEmailRegisterCheckApi:
|
|||||||
|
|
||||||
feature_flags = SimpleNamespace(enable_email_password_login=True, is_allow_register=True)
|
feature_flags = SimpleNamespace(enable_email_password_login=True, is_allow_register=True)
|
||||||
with (
|
with (
|
||||||
patch("controllers.console.auth.email_register.db", SimpleNamespace(engine="engine")),
|
|
||||||
patch("controllers.console.wraps.dify_config", SimpleNamespace(EDITION="CLOUD")),
|
patch("controllers.console.wraps.dify_config", SimpleNamespace(EDITION="CLOUD")),
|
||||||
patch("controllers.console.wraps.FeatureService.get_system_features", return_value=feature_flags),
|
patch("controllers.console.wraps.FeatureService.get_system_features", return_value=feature_flags),
|
||||||
):
|
):
|
||||||
@ -114,7 +107,6 @@ class TestEmailRegisterResetApi:
|
|||||||
@patch("controllers.console.auth.email_register.AccountService.reset_login_error_rate_limit")
|
@patch("controllers.console.auth.email_register.AccountService.reset_login_error_rate_limit")
|
||||||
@patch("controllers.console.auth.email_register.AccountService.login")
|
@patch("controllers.console.auth.email_register.AccountService.login")
|
||||||
@patch("controllers.console.auth.email_register.EmailRegisterResetApi._create_new_account")
|
@patch("controllers.console.auth.email_register.EmailRegisterResetApi._create_new_account")
|
||||||
@patch("controllers.console.auth.email_register.Session")
|
|
||||||
@patch("controllers.console.auth.email_register.AccountService.get_account_by_email_with_case_fallback")
|
@patch("controllers.console.auth.email_register.AccountService.get_account_by_email_with_case_fallback")
|
||||||
@patch("controllers.console.auth.email_register.AccountService.revoke_email_register_token")
|
@patch("controllers.console.auth.email_register.AccountService.revoke_email_register_token")
|
||||||
@patch("controllers.console.auth.email_register.AccountService.get_email_register_data")
|
@patch("controllers.console.auth.email_register.AccountService.get_email_register_data")
|
||||||
@ -125,7 +117,6 @@ class TestEmailRegisterResetApi:
|
|||||||
mock_get_data,
|
mock_get_data,
|
||||||
mock_revoke_token,
|
mock_revoke_token,
|
||||||
mock_get_account,
|
mock_get_account,
|
||||||
mock_session_cls,
|
|
||||||
mock_create_account,
|
mock_create_account,
|
||||||
mock_login,
|
mock_login,
|
||||||
mock_reset_login_rate,
|
mock_reset_login_rate,
|
||||||
@ -136,14 +127,10 @@ class TestEmailRegisterResetApi:
|
|||||||
token_pair = MagicMock()
|
token_pair = MagicMock()
|
||||||
token_pair.model_dump.return_value = {"access_token": "a", "refresh_token": "r"}
|
token_pair.model_dump.return_value = {"access_token": "a", "refresh_token": "r"}
|
||||||
mock_login.return_value = token_pair
|
mock_login.return_value = token_pair
|
||||||
|
|
||||||
mock_session = MagicMock()
|
|
||||||
mock_session_cls.return_value.__enter__.return_value = mock_session
|
|
||||||
mock_get_account.return_value = None
|
mock_get_account.return_value = None
|
||||||
|
|
||||||
feature_flags = SimpleNamespace(enable_email_password_login=True, is_allow_register=True)
|
feature_flags = SimpleNamespace(enable_email_password_login=True, is_allow_register=True)
|
||||||
with (
|
with (
|
||||||
patch("controllers.console.auth.email_register.db", SimpleNamespace(engine="engine")),
|
|
||||||
patch("controllers.console.wraps.dify_config", SimpleNamespace(EDITION="CLOUD")),
|
patch("controllers.console.wraps.dify_config", SimpleNamespace(EDITION="CLOUD")),
|
||||||
patch("controllers.console.wraps.FeatureService.get_system_features", return_value=feature_flags),
|
patch("controllers.console.wraps.FeatureService.get_system_features", return_value=feature_flags),
|
||||||
):
|
):
|
||||||
@ -159,19 +146,19 @@ class TestEmailRegisterResetApi:
|
|||||||
mock_reset_login_rate.assert_called_once_with("invitee@example.com")
|
mock_reset_login_rate.assert_called_once_with("invitee@example.com")
|
||||||
mock_revoke_token.assert_called_once_with("token-123")
|
mock_revoke_token.assert_called_once_with("token-123")
|
||||||
mock_extract_ip.assert_called_once()
|
mock_extract_ip.assert_called_once()
|
||||||
mock_get_account.assert_called_once_with("Invitee@Example.com", session=mock_session)
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_account_by_email_with_case_fallback_uses_lowercase_lookup():
|
def test_get_account_by_email_with_case_fallback_falls_back_to_lowercase():
|
||||||
|
"""Test that case fallback tries lowercase when exact match fails."""
|
||||||
mock_session = MagicMock()
|
mock_session = MagicMock()
|
||||||
first_query = MagicMock()
|
first_result = MagicMock()
|
||||||
first_query.scalar_one_or_none.return_value = None
|
first_result.scalar_one_or_none.return_value = None
|
||||||
expected_account = MagicMock()
|
expected_account = MagicMock()
|
||||||
second_query = MagicMock()
|
second_result = MagicMock()
|
||||||
second_query.scalar_one_or_none.return_value = expected_account
|
second_result.scalar_one_or_none.return_value = expected_account
|
||||||
mock_session.execute.side_effect = [first_query, second_query]
|
mock_session.execute.side_effect = [first_result, second_result]
|
||||||
|
|
||||||
account = AccountService.get_account_by_email_with_case_fallback("Case@Test.com", session=mock_session)
|
result = AccountService.get_account_by_email_with_case_fallback("Case@Test.com", session=mock_session)
|
||||||
|
|
||||||
assert account is expected_account
|
assert result is expected_account
|
||||||
assert mock_session.execute.call_count == 2
|
assert mock_session.execute.call_count == 2
|
||||||
Loading…
Reference in New Issue
Block a user