munch-ease-backend/tests/test_data.py

296 lines
No EOL
9.8 KiB
Python

import persons
class Persons:
jacob = persons.Person(
id=1,
name='Jacob')
ryan = persons.Person(
id=2,
name='Ryan')
ellie = persons.Person(
id=3,
name='Ellie')
chris = persons.Person(
id=4,
name='Chris')
import products
class Products:
broccoli = products.Product(
id=0,
name="Fresh Broccoli",
product_id="134681",
link="https://www.woolworths.com.au/shop/productdetails/134681/fresh-broccoli",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/134681.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/134681.jpg",
raw_data={},
)
garlic_bread = products.Product(
id=0,
name="La Famiglia Garlic Bread",
product_id="294517",
link="https://www.woolworths.com.au/shop/productdetails/294517/la-famiglia-garlic-bread",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/294517.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/294517.jpg",
raw_data={},
)
beans_round = products.Product(
id=0,
name="Beans Round",
product_id="134072",
link="https://www.woolworths.com.au/shop/productdetails/134072/beans-round",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/134072.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/134072.jpg",
raw_data={},
)
western_star_unsalted_butter_chefs_choice = products.Product(
id=0,
name="Western Star Unsalted Butter Chef's Choice",
product_id="712251",
link="https://www.woolworths.com.au/shop/productdetails/712251/western-star-unsalted-butter-chef-s-choice",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/712251.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/712251.jpg",
raw_data={},
)
saxa_iodised_table_salt_shaker = products.Product(
id=0,
name="Saxa Iodised Table Salt Shaker",
product_id="33245",
link="https://www.woolworths.com.au/shop/productdetails/33245/saxa-iodised-table-salt-shaker",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/033245.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/033245.jpg",
raw_data={},
)
mckenzies_pepper_black_ground = products.Product(
id=0,
name="Mckenzie's Pepper Black Ground",
product_id="75194",
link="https://www.woolworths.com.au/shop/productdetails/75194/mckenzie-s-pepper-black-ground",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/075194.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/075194.jpg",
raw_data={},
)
apple = products.Product(
id=0,
name="Apple",
product_id="3542",
link="https://www.woolworths.com.au/shop/productdetails/0/apple",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/0.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/0.jpg",
raw_data={},
)
banana = products.Product(
id=0,
name="Banana",
product_id="214",
link="https://www.woolworths.com.au/shop/productdetails/0/banana",
img_small="https://cdn0.woolworths.media/content/wowproductimages/small/0.jpg",
img_large="https://cdn0.woolworths.media/content/wowproductimages/large/0.jpg",
raw_data={},
)
_tags = {
apple.product_id: ['apple', 'fruit', 'fresh fruit'],
banana.product_id: ['banana', 'fruit', 'fresh fruit'],
broccoli.product_id: ['broccoli', 'fresh broccoli'],
garlic_bread.product_id: ['garlic bread', 'bread', 'garlic', 'frozen garlic bread'],
beans_round.product_id: ['beans', 'green beans', 'fresh green beans', 'fresh beans'],
western_star_unsalted_butter_chefs_choice.product_id: ['butter', 'unsalted butter', 'salted butter'],
saxa_iodised_table_salt_shaker.product_id: ['salt', 'iodised salt', 'kosher salt'],
mckenzies_pepper_black_ground.product_id: ['pepper', 'black pepper', 'ground pepper', 'fresh ground pepper'],
}
import ingredients
class Ingredients:
one_apple = ingredients.Ingredient(
id=0,
line='1 Apple',
name='Apple',
unit='Items',
quantity='1',
preparation='',
product=Products.apple,
)
broccoli_chopped_1kg = ingredients.Ingredient(
id=0,
line='1kg Broccoli, Chopped',
name='Broccoli',
unit='1kg',
quantity='1',
preparation='Chopped',
product=Products.broccoli,
)
garlic_bread_1_loaf = ingredients.Ingredient(
id=0,
line='1 Loaf Garlic Bread',
name='Garlic Bread',
unit='Loaf',
quantity='1',
preparation='',
product=Products.garlic_bread,
)
green_beans = ingredients.Ingredient(
id=0,
line="1 pound green beans (fresh)",
name="green beans",
unit="Pound",
quantity=1.0,
preparation="",
product=Products.beans_round,
)
butter = ingredients.Ingredient(
id=0,
line="1 to 2 tablespoons butter",
name="butter",
unit="Tablespoon",
quantity=1.0,
preparation="",
product=Products.western_star_unsalted_butter_chefs_choice,
)
salt = ingredients.Ingredient(
id=0,
line="Salt (to taste)",
name="Salt",
unit="Items",
quantity=1.0,
preparation="",
product=Products.saxa_iodised_table_salt_shaker,
)
freshly_ground_black_pepper = ingredients.Ingredient(
id=0,
line="Freshly ground black pepper (to taste)",
name="Freshly ground black pepper",
unit="Items",
quantity=1.0,
preparation="",
product=Products.mckenzies_pepper_black_ground,
)
import recipes
class Recipes:
broccoli_soup = recipes.Recipe(
id=0,
name='Broccoli Soup',
link='https://www.bbcgoodfood.com/recipes/broccoli-soup',
image_urls=['https://www.bbcgoodfood.com/sites/default/files/styles/recipe/public/recipe/recipe-image/2018/10/broccoli-soup.jpg'],
ingredients=[Ingredients.broccoli_chopped_1kg],
created_by_id=Persons.jacob.id,
)
how_to_steam_green_beans = recipes.Recipe(
id=0,
name="How to Steam Green Beans",
link="https://www.thespruceeats.com/steamed-green-beans-3057051",
image_urls=["https://www.thespruceeats.com/thmb/CLROdq9dlYbjKjlOlA_kmFdunTY=/1500x0/filters:no_upscale():max_bytes(150000):strip_icc()/steamed-green-beans-3057051-hero-01-b1c4f894da5b4bc0a01cd43886df0100.jpg"],
ingredients=[Ingredients.green_beans,Ingredients.butter,Ingredients.salt,Ingredients.freshly_ground_black_pepper],
created_by_id=Persons.jacob.id,
)
from meals import db as meals_db
from datetime import datetime
class Meals:
broccoli_soup_for_jacob = meals_db.Meal(
id=0,
create_date=datetime(2021, 12, 25),
created_by=Persons.jacob,
meal_date=datetime(2021, 12, 25),
chefs=[Persons.jacob],
cleanup=[Persons.ryan],
consumers=[Persons.ellie, Persons.chris],
recipes=[Recipes.broccoli_soup],
extra_ingredients=[Ingredients.garlic_bread_1_loaf],
)
def class_fields(obj):
return {k:v for k,v in obj.__dict__.items() if not k.startswith('_')}
async def create_persons(conn):
for person in class_fields(Persons).values():
await persons.insert_person(conn, person)
async def create_test_data(conn):
await create_persons(conn)
for product in class_fields(Products).values():
await products.insert_product(conn, product, {})
await products.add_missing_tags(conn, product, Products._tags[product.product_id])
for recipe in class_fields(Recipes).values():
await recipes.insert_recipe(conn, recipe)
for ingredient in recipe.ingredients:
ingredient.recipe_id = recipe.id
ingredient.product_id = ingredient.product.id
await ingredients.insert_ingredient(conn, ingredient)
for meal in class_fields(Meals).values():
await meals_db.insert_meal(conn, meal)
"""
import re
def to_name(thing):
return re.sub(r'\W', '', thing['name'].lower().replace(' ', '_'))
products_order= ['id', 'name', 'product_id', 'link', 'tags', 'img_small', 'img_large', 'raw_data']
ingredients_order = 'id line name unit quantity preparation product'.split(' ')
def stringify(k: str, v) -> str:
if k == 'id':
return '0'
if k == 'ingredients' and isinstance(v, dict):
return f'Ingredients.{to_name(v)}'
if k == 'product':
return f'Products.{to_name(v)}'
if k == 'created_by_id':
names = ['jacob', 'ryan', 'ellie', 'chris']
return f'Persons.{names[v - 1]}.id'
if v is None:
if k == 'raw_data':
return '{}'
if k == 'tags':
return '[]'
return 'None'
if isinstance(v, str):
return f'"{v}"'
if isinstance(v, list):
return f'[{",".join([stringify(k, x) for x in v])}]'
return str(v)
def to_param_list(item, order):
results = []
for k in order:
v = item[k] if k in item else None
results.append(f'{k}={stringify(k, v)}')
return results
def to_create_statements(items, type_name, order):
s = []
for item in items:
name = to_name(item)
params = to_param_list(item, order)
s.append(f'{name} = {type_name}(')
for p in params:
s.append(f'\t{p},')
s.append(')')
s.append('')
return '\n'.join(s)
"""