Coverage for apps/inners/use_cases/authentications/register_authentication.py: 67%

21 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-09-22 19:03 +0000

1from starlette.datastructures import State 

2 

3from apps.inners.exceptions import repository_exception 

4from apps.inners.exceptions import use_case_exception 

5from apps.inners.models.daos.account import Account 

6from apps.inners.models.dtos.contracts.requests.authentications.registers.register_by_email_and_password_body import \ 

7 RegisterByEmailAndPasswordBody 

8from apps.inners.models.dtos.contracts.requests.managements.accounts.create_one_body import CreateOneBody 

9from apps.inners.models.dtos.contracts.responses.authentications.registers.register_response import \ 

10 RegisterResponse 

11from apps.inners.use_cases.managements.account_management import AccountManagement 

12 

13 

14class RegisterAuthentication: 

15 def __init__( 

16 self, 

17 account_management: AccountManagement 

18 ): 

19 self.account_management = account_management 

20 

21 async def register_by_email_and_password( 

22 self, 

23 state: State, 

24 body: RegisterByEmailAndPasswordBody 

25 ) -> RegisterResponse: 

26 try: 

27 await self.account_management.find_one_by_email( 

28 state=state, 

29 email=body.email 

30 ) 

31 except repository_exception.NotFound: 

32 pass 

33 else: 

34 raise use_case_exception.EmailAlreadyExists() 

35 

36 account_creator_body: CreateOneBody = CreateOneBody( 

37 email=body.email, 

38 password=body.password 

39 ) 

40 created_account: Account = await self.account_management.create_one( 

41 state=state, 

42 body=account_creator_body 

43 ) 

44 register_response: RegisterResponse = RegisterResponse( 

45 account=created_account 

46 ) 

47 return register_response