def create_base_users(): household = Household.create(name=fake.street_name()) test_user = User.create( username="******", email="*****@*****.**", password="******", gender="male", birthday=fake.date_between(start_date="-40y", end_date="-21y"), first_name="test", last_name="user", household_id=household.id, ) admin_user = User.create( username="******", password="******", email="*****@*****.**", gender="male", birthday=fake.date_between(start_date="-40y", end_date="-21y"), first_name="admin", last_name="user", household_id=household.id, ) admin_role = Role.query.filter(Role.name == "Admin").one_or_none() if admin_role is not None: admin_user.roles.append(admin_role) admin_user.save() else: print(f"Warning - no Admin role detected! Admin user only has the User role") print(f"Successfully created 'testuser' and 'admin' in house '{household.name}'")
def test_all_house_users_can_see_meals(db): household = Household.create(name="test") user1 = User.create( username="******", email="*****@*****.**", password="******", household_id=household.id, ) user2 = User.create( username="******", email="*****@*****.**", password="******", household_id=household.id, ) recipe = Recipe.create(name="test") meal = Meal.create(date=dt.date.today(), household_id=household.id) meal.recipes.append(recipe) # make sure household -> meals -> recipes are all tied together assert len(meal.recipes) == 1 assert len(household.meals) == 1 # make sure both users can see the meal assert len(user1.household.meals) == 1 assert len(user2.household.meals) == 1 assert user1.household.meals[0].recipes[0] == user2.household.meals[ 0].recipes[0]
def test_user_creation_without_household(db, user_factory): try: User.create(username="******", email="*****@*****.**", password="******") except IntegrityError as ie: assert ie is not None
def create_and_populate_household(user_count=2): household = Household.create(name=fake.street_name()) print(f"Created household '{household.name}'") for i in range(user_count): profile = fake.simple_profile() first_name: str = (fake.first_name_male() if profile["sex"] == "M" else fake.first_name_female()) last_name: str = profile["name"].split(" ").pop() username: str = f"{first_name[0].lower()}{last_name.lower()}" height = fake.pyint(min_value=59, max_value=76) bmi = fake.pyfloat(min_value=19, max_value=32) weight = (bmi / 703) * height * height user = User.create( username=username, email=f"{username}@{fake.free_email_domain()}", gender="male" if profile["sex"] == "M" else "female", birthday=fake.date_between(start_date="-60y", end_date="-21y"), first_name=first_name, last_name=last_name, password=fake.password(), household_id=household.id, height_inches=height, weight_lbs=weight, time_created=fake.date_between(start_date="-2y", end_date="-30d"), ) print( f"\tAdded user {user.first_name} {user.last_name} ({user.age}, {user.gender}): {user.username} / {user.email} / {user.birthday} / {user.height_inches}in / {user.weight_lbs}lbs" )
def send_password_reset_email(user: User): msg = Message( "Password Reset Request on Housechef", recipients=[user.email], sender="*****@*****.**", body=render_template( "email_templates/reset_password.txt.j2", user=user, token=user.get_password_reset_token(), ), html=render_template( "email_templates/reset_password.html.j2", user=user, token=user.get_password_reset_token(), ), ) mail.send(msg)
def setup(self): self.login_url = url_for("api_v1.auth_login") self.user = User.create( username="******", email="*****@*****.**", password="******", household_id=1, )
def create_test_user(): household = Household.create(name="Test Household") user = User.create( username="******", email="*****@*****.**", password="******", household_id=household.id, ) click.echo(f"Created used 'testuser' with password 'testuser' successfully!")
def test_user_creation_with_household(db): household = Household.create(name="test house") user = User.create( username="******", email="*****@*****.**", password="******", household_id=household.id, ) assert user.active == True assert user.household.name == "test house"
def setup(self): self.household = Household.create(name="TestHousehold") self.user = User.create( username="******", email="*****@*****.**", password="******", household_id=self.household.id, ) self.access_token = create_access_token(identity=self.user) self.headers = { "Authorization": f"Bearer {self.access_token}", }
def test_user(db): household = Household.create(name="test") user = User.create( username="******", email="*****@*****.**", password="******", household_id=household.id, ) # user_role = Role.create(name="User") # user.roles.append(user_role) # user.save() return user
def init(): """Create a new admin user""" from housechef.extensions import db from housechef.database.models import User click.echo("create user") user = User( username="******", email="*****@*****.**", password="******", active=True ) db.session.add(user) db.session.commit() click.echo("created user admin")
def admin_user(db): household = Household.create(name="AdminHouse") user = User.create( username="******", email="*****@*****.**", password="******", household_id=household.id, ) # admin_role = Role.create(name="Admin") # user_admin_role = UserRole(user_id=user.id, role_id=admin_role.id) # user.roles.append(admin_role) # user.save() return user
def gen_test_data(): fake = Faker() db.create_all() # generate common chefs to pull from chefs = _generate_chefs(5, fake) for i in range(3): household = Household.create(name=fake.street_name()) click.echo(f'\nCreated household #{household.id} "{household.name}"') # create users for each house user_count = 2 if fake.boolean(chance_of_getting_true=80) is True else 1 for u in range(user_count): user = User.create( username=fake.simple_profile().get("username"), email=fake.email(), password=fake.password(length=12), household_id=household.id, ) click.echo(f'Created user "{user.username}"') # create a couple recipes for each user recipe_count = fake.pyint(max_value=10) for r in range(recipe_count): try: recipe = Recipe.create( name=_generate_recipe_name(fake), recipe_url=f"{fake.url()}recipes/recipe.html", image_url=fake.image_url(), thumbnail_url=fake.image_url(), author=fake.random_element(elements=chefs), rating=fake.pyint(min_value=1, max_value=5), servings=fake.pyint(min_value=1, max_value=10), prep_time=fake.pyint(min_value=5, max_value=60), cook_time=fake.pyint(min_value=5, max_value=360), user_id=user.id, ) # potentially add a note to the recipe if fake.boolean(): note = Note.create(text=fake.text(), recipe_id=recipe.id) except IntegrityError as ie: db.session.rollback() household.save()
def test_get_refresh_token(client, db): household = Household.create(name="house") user = User.create( username="******", email="*****@*****.**", password="******", household_id=household.id, ) refresh_token = create_refresh_token(identity=user) resp = client.post( url_for("api_v1.auth_refresh"), headers={ "Authorization": f"Bearer {refresh_token}", "Content-Type": "application/json", }, ) assert resp.status_code == 200 assert "access_token" in resp.json
def test_create_user(self, client, db, test_user): users_url = url_for("api_v1.list_users") user_data = { "username": "******", "password": "******", "email": "*****@*****.**", "household_id": test_user.household_id, } rep = client.post(users_url, json=user_data, headers={"Content-Type": "application/json"}) assert rep.status_code == 201 data = rep.get_json()["data"] user = User.get_by_id(data["id"]) assert user.username == "created" assert user.email == "*****@*****.**"
def post(self): user_identity = get_jwt_identity() user = User.get_by_id(user_identity["id"]) access_token = user.get_refresh_token() return {"access_token": access_token}, HTTPStatus.OK