Skip to content

Commit 34e492a

Browse files
committed
test: Fix test failures related to tpep recipe
1 parent 0834fe5 commit 34e492a

File tree

6 files changed

+87
-41
lines changed

6 files changed

+87
-41
lines changed

supertokens_python/recipe/emailpassword/recipe.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,7 @@ def __init__(
117117
def callback():
118118
ev_recipe = EmailVerificationRecipe.get_instance_optional()
119119
if ev_recipe:
120-
ev_recipe.add_get_email_for_user_id_func(
121-
self.get_email_for_user_id
122-
)
120+
ev_recipe.add_get_email_for_user_id_func(self.get_email_for_user_id)
123121

124122
PostSTInitCallbacks.add_post_init_callback(callback)
125123

supertokens_python/recipe/emailverification/recipe.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
)
2424
from supertokens_python.recipe.emailverification.types import (
2525
EmailVerificationIngredients,
26-
VerificationEmailTemplateVars, VerificationEmailTemplateVarsUser,
26+
VerificationEmailTemplateVars,
27+
VerificationEmailTemplateVarsUser,
2728
)
2829
from supertokens_python.recipe_module import APIHandled, RecipeModule
2930
from .ev_claim import EmailVerificationClaimValidators
@@ -33,9 +34,15 @@
3334
UnknownUserIdError,
3435
TypeGetEmailForUserIdFunction,
3536
GetEmailForUserIdOkResult,
36-
EmailDoesnotExistError, APIInterface, EmailVerifyPostOkResult, EmailVerifyPostInvalidTokenError,
37-
VerifyEmailUsingTokenOkResult, IsEmailVerifiedGetOkResult, GenerateEmailVerifyTokenPostOkResult,
38-
GenerateEmailVerifyTokenPostEmailAlreadyVerifiedError, CreateEmailVerificationTokenEmailAlreadyVerifiedError,
37+
EmailDoesnotExistError,
38+
APIInterface,
39+
EmailVerifyPostOkResult,
40+
EmailVerifyPostInvalidTokenError,
41+
VerifyEmailUsingTokenOkResult,
42+
IsEmailVerifiedGetOkResult,
43+
GenerateEmailVerifyTokenPostOkResult,
44+
GenerateEmailVerifyTokenPostEmailAlreadyVerifiedError,
45+
CreateEmailVerificationTokenEmailAlreadyVerifiedError,
3946
)
4047
from .recipe_implementation import RecipeImplementation
4148
from ..session import SessionRecipe
@@ -367,6 +374,9 @@ async def generate_email_verify_token_post(
367374
)
368375
return GenerateEmailVerifyTokenPostOkResult()
369376

377+
if isinstance(email_info, UnknownUserIdError):
378+
pass
379+
370380
raise Exception(
371381
"Should never come here: UNKNOWN_USER_ID or invalid result from get_email_for_user_id"
372382
)

supertokens_python/recipe/thirdparty/recipe.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from .api.implementation import APIImplementation
2424
from .interfaces import APIInterface, APIOptions, RecipeInterface
2525
from .recipe_implementation import RecipeImplementation
26+
from ..emailverification.interfaces import GetEmailForUserIdOkResult, UnknownUserIdError
2627
from ...post_init_callbacks import PostSTInitCallbacks
2728

2829
if TYPE_CHECKING:
@@ -188,12 +189,11 @@ def reset():
188189

189190
# instance functions below...............
190191

191-
async def get_email_for_user_id(
192-
self, user_id: str, user_context: Dict[str, Any]
193-
) -> str:
192+
async def get_email_for_user_id(self, user_id: str, user_context: Dict[str, Any]):
194193
user_info = await self.recipe_implementation.get_user_by_id(
195194
user_id, user_context
196195
)
197-
if user_info is None:
198-
raise Exception("Unknown User ID provided")
199-
return user_info.email
196+
if user_info is not None:
197+
return GetEmailForUserIdOkResult(user_info.email)
198+
199+
return UnknownUserIdError()

supertokens_python/recipe/thirdpartyemailpassword/recipe.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
from .recipeimplementation.third_party_recipe_implementation import (
4848
RecipeImplementation as ThirdPartyRecipeImplementation,
4949
)
50+
from ..emailverification.interfaces import GetEmailForUserIdOkResult, UnknownUserIdError
5051

5152
if TYPE_CHECKING:
5253
from supertokens_python.framework.request import BaseRequest
@@ -296,12 +297,11 @@ def reset():
296297
raise Exception(None, "calling testing function in non testing env")
297298
ThirdPartyEmailPasswordRecipe.__instance = None
298299

299-
async def get_email_for_user_id(
300-
self, user_id: str, user_context: Dict[str, Any]
301-
) -> str:
300+
async def get_email_for_user_id(self, user_id: str, user_context: Dict[str, Any]):
302301
user_info = await self.recipe_implementation.get_user_by_id(
303302
user_id, user_context
304303
)
305-
if user_info is None:
306-
raise Exception("Unknown User ID provided")
307-
return user_info.email
304+
if user_info is not None:
305+
return GetEmailForUserIdOkResult(user_info.email)
306+
307+
return UnknownUserIdError()

tests/emailpassword/test_emaildelivery.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@
3636
InputResetPasswordUsingTokenFeature,
3737
)
3838
from supertokens_python.recipe.emailpassword.emaildelivery.services import SMTPService
39-
from supertokens_python.recipe.emailverification.emaildelivery.services import SMTPService as EVSMTPService
39+
from supertokens_python.recipe.emailverification.emaildelivery.services import (
40+
SMTPService as EVSMTPService,
41+
)
4042
from supertokens_python.recipe.emailpassword.types import (
4143
EmailTemplateVars,
4244
PasswordResetEmailTemplateVars,
@@ -528,9 +530,11 @@ async def test_email_verification_default_backward_compatibility(
528530
),
529531
framework="fastapi",
530532
recipe_list=[
531-
emailverification.init(ParentRecipeEmailVerificationConfig(mode="OPTIONAL")),
533+
emailverification.init(
534+
ParentRecipeEmailVerificationConfig(mode="OPTIONAL")
535+
),
532536
emailpassword.init(),
533-
session.init()
537+
session.init(),
534538
],
535539
)
536540
start_st()
@@ -593,9 +597,11 @@ async def test_email_verification_default_backward_compatibility_suppress_error(
593597
),
594598
framework="fastapi",
595599
recipe_list=[
596-
emailverification.init(ParentRecipeEmailVerificationConfig(mode="OPTIONAL")),
600+
emailverification.init(
601+
ParentRecipeEmailVerificationConfig(mode="OPTIONAL")
602+
),
597603
emailpassword.init(),
598-
session.init()
604+
session.init(),
599605
],
600606
)
601607
start_st()
@@ -707,7 +713,9 @@ async def test_email_verification_custom_override(driver_config_client: TestClie
707713
email = ""
708714
email_verify_url = ""
709715

710-
def email_delivery_override(oi: EmailDeliveryInterface[VerificationEmailTemplateVars]):
716+
def email_delivery_override(
717+
oi: EmailDeliveryInterface[VerificationEmailTemplateVars],
718+
):
711719
oi_send_email = oi.send_email
712720

713721
async def send_email(
@@ -738,7 +746,7 @@ async def send_email(
738746
email_delivery=EmailDeliveryConfig(
739747
service=None,
740748
override=email_delivery_override,
741-
)
749+
),
742750
)
743751
),
744752
emailpassword.init(),
@@ -871,7 +879,7 @@ async def send_email_override(
871879
email_delivery=EmailDeliveryConfig(
872880
service=email_delivery_service,
873881
override=email_delivery_override,
874-
)
882+
),
875883
)
876884
),
877885
emailpassword.init(),

tests/thirdpartyemailpassword/test_email_delivery.py

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,17 @@
4747
from supertokens_python.recipe.session.session_functions import create_new_session
4848
from supertokens_python.recipe.thirdpartyemailpassword import (
4949
InputResetPasswordUsingTokenFeature,
50+
Github,
5051
)
5152
from supertokens_python.recipe.thirdpartyemailpassword.asyncio import (
5253
thirdparty_sign_in_up,
5354
)
5455
from supertokens_python.recipe.thirdpartyemailpassword.emaildelivery.services import (
5556
SMTPService,
5657
)
58+
from supertokens_python.recipe.emailverification.emaildelivery.services import (
59+
SMTPService as EVSMTPService,
60+
)
5761
from supertokens_python.recipe.thirdpartyemailpassword.types import (
5862
EmailTemplateVars,
5963
PasswordResetEmailTemplateVars,
@@ -477,7 +481,13 @@ async def test_email_verification_default_backward_compatibility(
477481
api_base_path="/auth",
478482
),
479483
framework="fastapi",
480-
recipe_list=[thirdpartyemailpassword.init(), session.init()],
484+
recipe_list=[
485+
emailverification.init(
486+
ParentRecipeEmailVerificationConfig(mode="OPTIONAL")
487+
),
488+
thirdpartyemailpassword.init(),
489+
session.init(),
490+
],
481491
)
482492
start_st()
483493

@@ -538,7 +548,13 @@ async def test_email_verification_default_backward_compatibility_suppress_error(
538548
api_base_path="/auth",
539549
),
540550
framework="fastapi",
541-
recipe_list=[thirdpartyemailpassword.init(), session.init()],
551+
recipe_list=[
552+
emailverification.init(
553+
ParentRecipeEmailVerificationConfig(mode="OPTIONAL")
554+
),
555+
thirdpartyemailpassword.init(),
556+
session.init(),
557+
],
542558
)
543559
start_st()
544560

@@ -739,7 +755,7 @@ async def test_email_verification_smtp_service(driver_config_client: TestClient)
739755
False,
740756
)
741757

742-
def smtp_service_override(oi: SMTPServiceInterface[EmailTemplateVars]):
758+
def smtp_service_override(oi: SMTPServiceInterface[VerificationEmailTemplateVars]):
743759
async def send_raw_email_override(
744760
content: EmailContent, _user_context: Dict[str, Any]
745761
):
@@ -753,7 +769,7 @@ async def send_raw_email_override(
753769
# Note that we aren't calling oi.send_raw_email. So Transporter won't be used.
754770

755771
async def get_content_override(
756-
template_vars: EmailTemplateVars, _user_context: Dict[str, Any]
772+
template_vars: VerificationEmailTemplateVars, _user_context: Dict[str, Any]
757773
) -> EmailContent:
758774
nonlocal get_content_called, email_verify_url
759775
get_content_called = True
@@ -773,7 +789,7 @@ async def get_content_override(
773789

774790
return oi
775791

776-
email_delivery_service = SMTPService(
792+
email_delivery_service = EVSMTPService(
777793
smtp_settings=SMTPSettings(
778794
host="",
779795
from_=SMTPSettingsFrom("", ""),
@@ -785,12 +801,12 @@ async def get_content_override(
785801
)
786802

787803
def email_delivery_override(
788-
oi: EmailDeliveryInterface[EmailTemplateVars],
789-
) -> EmailDeliveryInterface[EmailTemplateVars]:
804+
oi: EmailDeliveryInterface[VerificationEmailTemplateVars],
805+
) -> EmailDeliveryInterface[VerificationEmailTemplateVars]:
790806
oi_send_email = oi.send_email
791807

792808
async def send_email_override(
793-
template_vars: EmailTemplateVars, user_context: Dict[str, Any]
809+
template_vars: VerificationEmailTemplateVars, user_context: Dict[str, Any]
794810
):
795811
nonlocal outer_override_called
796812
outer_override_called = True
@@ -809,12 +825,16 @@ async def send_email_override(
809825
),
810826
framework="fastapi",
811827
recipe_list=[
812-
thirdpartyemailpassword.init(
813-
email_delivery=EmailDeliveryConfig(
814-
service=email_delivery_service,
815-
override=email_delivery_override,
828+
emailverification.init(
829+
ParentRecipeEmailVerificationConfig(
830+
mode="OPTIONAL",
831+
email_delivery=EmailDeliveryConfig(
832+
service=email_delivery_service,
833+
override=email_delivery_override,
834+
),
816835
)
817836
),
837+
thirdpartyemailpassword.init(),
818838
session.init(),
819839
],
820840
)
@@ -870,10 +890,16 @@ async def custom_create_and_send_custom_email(
870890
),
871891
framework="fastapi",
872892
recipe_list=[
893+
emailverification.init(
894+
ParentRecipeEmailVerificationConfig(mode="OPTIONAL")
895+
),
873896
thirdpartyemailpassword.init(
897+
providers=[
898+
Github(client_id="", client_secret="")
899+
], # Note: Provider must be passed to init TP recipe
874900
reset_password_using_token_feature=InputResetPasswordUsingTokenFeature(
875901
create_and_send_custom_email=custom_create_and_send_custom_email,
876-
)
902+
),
877903
),
878904
session.init(),
879905
],
@@ -936,7 +962,11 @@ async def custom_create_and_send_custom_email(
936962
create_and_send_custom_email=custom_create_and_send_custom_email,
937963
)
938964
),
939-
thirdpartyemailpassword.init(),
965+
thirdpartyemailpassword.init(
966+
providers=[
967+
Github(client_id="", client_secret="")
968+
], # Note: Provider must be passed to init TP recipe
969+
),
940970
session.init(),
941971
],
942972
)

0 commit comments

Comments
 (0)