jabajke

Untitled

Jun 29th, 2023
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.87 KB | None | 0 0
  1. import asyncio
  2. from datetime import datetime, timedelta
  3.  
  4. import httpx
  5. import pytest
  6. import pytest_asyncio
  7. from passlib.hash import bcrypt
  8. from sqlalchemy.ext.asyncio import (AsyncSession, async_sessionmaker,
  9. create_async_engine)
  10.  
  11. from src.core.app import app
  12. from src.core.database import Base
  13. from src.modules.models.m2m.event_user_m2m import User
  14. from src.modules.schemas.auth import UserSchema
  15. from src.modules.schemas.event import EventSchema
  16.  
  17. engine = create_async_engine(
  18. "postgresql+asyncpg://" +
  19. "test_user:" +
  20. "test_password@" +
  21. "db_test/db_test?prepared_statement_cache_size=0",
  22. echo=False,
  23. query_cache_size=0
  24. )
  25. test_async_session = async_sessionmaker(
  26. autoflush=False,
  27. autocommit=False,
  28. bind=engine,
  29. class_=AsyncSession,
  30. expire_on_commit=False
  31. )
  32.  
  33.  
  34. @pytest.yield_fixture(scope='session')
  35. def event_loop():
  36. el = asyncio.get_event_loop_policy().new_event_loop()
  37. yield el
  38. el.close()
  39.  
  40.  
  41. @pytest_asyncio.fixture
  42. async def test_db(event_loop):
  43. async with engine.begin() as conn:
  44. await conn.run_sync(Base.metadata.create_all)
  45.  
  46. async with test_async_session() as session:
  47. yield session
  48.  
  49. async with engine.begin() as conn:
  50. await conn.run_sync(Base.metadata.drop_all)
  51. await engine.dispose()
  52.  
  53.  
  54. @pytest_asyncio.fixture
  55. async def async_client_fixture():
  56. async with httpx.AsyncClient(
  57. app=app,
  58. base_url='http://localhost/',
  59. ) as client:
  60. yield client
  61.  
  62.  
  63. @pytest.fixture
  64. def user_payload_correct_fixture():
  65. payload = dict(
  66. password='foo@pass',
  67. password_confirm='foo@pass',
  68. first_name='FirstFoo',
  69. last_name='LastFoo',
  70. birthdate='2023-06-22'
  71. )
  72. return payload
  73.  
  74.  
  75. @pytest.fixture
  76. def db_user_fixture(user_payload_correct_fixture):
  77. payload = user_payload_correct_fixture.copy()
  78. del payload['password_confirm']
  79. password = payload.pop('password')
  80. birthdate = payload.pop('birthdate')
  81. payload['birthdate'] = datetime.strptime(birthdate, "%Y-%m-%d").date()
  82. payload['hashed_password'] = bcrypt.hash(password)
  83. return payload
  84.  
  85.  
  86. @pytest.fixture
  87. def db_second_user_fixture(db_user_fixture):
  88. payload = db_user_fixture.copy()
  89. payload['email'] = '[email protected]'
  90. return payload
  91.  
  92.  
  93. @pytest.fixture
  94. def user_payload_incorrect_fixture(user_payload_correct_fixture):
  95. wrong_data = user_payload_correct_fixture.copy()
  96. wrong_data['password_confirm'] = 'wrongpass'
  97. return wrong_data
  98.  
  99.  
  100. @pytest.fixture
  101. def login_credentials_fixture():
  102. payload = dict(
  103. password='foo@pass',
  104. )
  105. return payload
  106.  
  107.  
  108. @pytest_asyncio.fixture
  109. async def verified_user_in_db_fixture(
  110. db_user_fixture,
  111. test_db,
  112. async_client_fixture,
  113. user_payload_correct_fixture
  114. ):
  115. user_instance = User(**db_user_fixture)
  116. user_instance.is_email_verified = True
  117. test_db.add(user_instance)
  118. await test_db.commit()
  119.  
  120.  
  121. @pytest_asyncio.fixture
  122. async def verified_second_user_in_db_fixture(
  123. db_second_user_fixture,
  124. test_db
  125. ):
  126. user_instance = User(**db_second_user_fixture)
  127. user_instance.is_email_verified = True
  128. test_db.add(user_instance)
  129. await test_db.commit()
  130.  
  131.  
  132. @pytest_asyncio.fixture
  133. async def not_verified_user_in_db_fixture(
  134. db_user_fixture,
  135. test_db,
  136. async_client_fixture,
  137. user_payload_correct_fixture
  138. ):
  139. user_instance = User(**db_user_fixture)
  140. test_db.add(user_instance)
  141. await test_db.commit()
  142.  
  143.  
  144. @pytest_asyncio.fixture
  145. async def logged_in_verified_user(
  146. verified_user_in_db_fixture,
  147. test_db,
  148. async_client_fixture,
  149. user_payload_correct_fixture
  150. ):
  151. response = await async_client_fixture.post(
  152. url='auth/token',
  153. json=user_payload_correct_fixture
  154. )
  155. user = UserSchema(**response.json())
  156. return user
  157.  
  158.  
  159. @pytest_asyncio.fixture
  160. async def logged_in_second_verified_user(
  161. verified_second_user_in_db_fixture,
  162. test_db,
  163. async_client_fixture,
  164. user_payload_correct_fixture
  165. ):
  166. response = await async_client_fixture.post(
  167. url='auth/token',
  168. json=user_payload_correct_fixture
  169. )
  170. user = UserSchema(**response.json())
  171. return user
  172.  
  173.  
  174. @pytest_asyncio.fixture
  175. async def logged_in_not_verified_user(
  176. not_verified_user_in_db_fixture,
  177. test_db,
  178. async_client_fixture,
  179. user_payload_correct_fixture
  180. ):
  181. response = await async_client_fixture.post(
  182. url='auth/token',
  183. json=user_payload_correct_fixture
  184. )
  185. user = UserSchema(**response.json())
  186. return user
  187.  
  188.  
  189. @pytest.fixture
  190. def event_correct_payload_fixture():
  191. payload = dict(
  192. title='Footitle',
  193. description='Foodescription',
  194. address=dict(
  195. country='Foocountry',
  196. city='Foocity',
  197. street='Foostreet',
  198. build='Foobuild'
  199. ),
  200. start_time=(
  201. datetime.now() + timedelta(days=7)
  202. ).strftime("%Y-%m-%dT%H:%M:%S.%f"),
  203. end_time=(
  204. datetime.now() + timedelta(days=10)
  205. ).strftime("%Y-%m-%dT%H:%M:%S.%f"),
  206. is_closed=False,
  207. number_of_members=10,
  208. min_age=16,
  209. max_age=20,
  210. event_type='online',
  211. notes='notes'
  212. )
  213. return payload
  214.  
  215.  
  216. @pytest_asyncio.fixture
  217. async def event_second_user_owner_fixture(
  218. event_correct_payload_fixture,
  219. logged_in_second_verified_user,
  220. test_db,
  221. async_client_fixture,
  222. ):
  223. response = await async_client_fixture.post(
  224. url='event/create-event',
  225. json=event_correct_payload_fixture
  226. )
  227. event = EventSchema(**response.json())
  228. return event
  229.  
Advertisement
Add Comment
Please, Sign In to add comment