diff --git a/backend/todo/utils/fakery.py b/backend/todo/utils/fakery.py index 8ffd5dc..32db390 100644 --- a/backend/todo/utils/fakery.py +++ b/backend/todo/utils/fakery.py @@ -6,9 +6,10 @@ from faker import Faker from sqlalchemy.orm import Session from todo.schemas.users import UserCreate, User -from todo.crud.users import create_user +from todo.crud.users import hash_password +from todo.models.users import User as UserModel from todo.schemas.todos import TodoItemCreate, TodoItem -from todo.crud.todos import create_todo +from todo.models.todos import TodoItem as TodoItemModel from todo.database.engine import get_db @@ -48,6 +49,7 @@ def get_fake_todo_details() -> TodoItemCreate: description_sentences = [fk.sentence(nb_words=randint(4, 6)) for i in range(randint(1, 5))] if randint(0, 1): delimiter = '\n- ' + description_sentences[0] = "- " + description_sentences[0] elif randint(0, 1): delimiter = '\n' else: @@ -63,16 +65,69 @@ def get_fake_todo_details() -> TodoItemCreate: def create_fake_user(db: Session = next(get_db())) -> User: """Creates a fake user and saves them to the database.""" - return create_user(db=db, user=get_fake_user_details()) + user = get_fake_user_details() + + fk = _get_faker() + created = fk.date_time_between('-2y', 'now') + updated = fk.date_time_between(created, 'now') + + db_user = UserModel( + email=user.email, + first_name=user.first_name, + last_name=user.last_name, + password=hash_password(user.password), + created=created, + updated=updated, + ) + + db.add(db_user) + db.commit() + db.refresh(db_user) + return User.from_orm(db_user) def create_fake_todo(user_id: int, db: Session = next(get_db())) -> TodoItem: """Creates a fake todo-item for the specified user and saves it to the database.""" - return create_todo(db=db, todo=get_fake_todo_details(), user_id=user_id) + todo = get_fake_todo_details() + + db_user = db.query(UserModel).filter(UserModel.id == user_id).first() + if not db_user: + raise RuntimeError('User not found.') + + fk = _get_faker() + created = fk.date_time_between(db_user.created, 'now') + if randint(1, 4) == 1: + updated = fk.date_time_between(created, 'now') + else: + updated = created + + if randint(1, 4) == 1: + finished = fk.date_time_between(created, 'now') + updated = finished + done = True + else: + finished = None + done = False -def populate_database(num_users: int = 100, max_todos_per_user: int = 100) -> None: + db_todo = TodoItemModel( + user_id=user_id, + title=todo.title, + description=todo.description, + done=done, + created=created, + updated=updated, + finished=finished + ) + + db.add(db_todo) + db.commit() + db.refresh(db_todo) + return TodoItem.from_orm(db_todo) + + +def populate_database(num_users: int = randint(50, 150), max_todos_per_user: int = randint(50, 150)) -> None: """Creates the specified number of users, each with between 0 and max_todos_per_user todo-items.""" db = next(get_db())