def test_ingredient_percent(self): recipe = model.Recipe() a1 = model.RecipeAddition(use='MASH', amount=6, unit='POUND', fermentable=model.Fermentable()) a2 = model.RecipeAddition(use='MASH', amount=2, unit='POUND', fermentable=model.Fermentable()) a3 = model.RecipeAddition( use='MASH', amount=.046875, # .75 oz unit='POUND', hop=model.Hop()) a4 = model.RecipeAddition( use='MASH', amount=.015625, # .25 oz unit='POUND', hop=model.Hop()) percent = recipe._percent({'Fermentable': [a1, a2], 'Hop': [a3, a4]}) assert percent[a1] == .75 assert percent[a2] == .25 assert percent[a3] == .75 assert percent[a4] == .25
def test_percentage(self): recipe = model.Recipe() a1 = model.RecipeAddition(use='MASH', amount=6, unit='POUND', fermentable=model.Fermentable()) a2 = model.RecipeAddition(use='MASH', amount=2, unit='POUND', fermentable=model.Fermentable()) a3 = model.RecipeAddition( use='BOIL', amount=.046875, # .75 oz unit='POUND', hop=model.Hop()) a4 = model.RecipeAddition( use='BOIL', amount=.015625, # .25 oz unit='POUND', hop=model.Hop()) recipe.additions = [a1, a2, a3, a4] assert a1.percentage == .75 assert a2.percentage == .25 assert a3.percentage == .75 assert a4.percentage == .25
def test_printed_name(self): assert model.Fermentable(name='2-Row', origin='US').printed_name == u'2-Row (US)' assert model.Fermentable( name='2-Row', origin='BELGIAN').printed_name == u'2-Row (Belgian)' assert model.Hop(name='Cascade', origin='US').printed_name == u'Cascade (US)' assert model.Hop(name='Cascade', origin='BELGIAN').printed_name == u'Cascade (Belgian)' assert model.Yeast(name='Wyeast 1056 - American Ale' ).printed_name == u'Wyeast 1056 - American Ale'
def test_zero_percentage(self): recipe = model.Recipe() a1 = model.RecipeAddition(use='MASH', amount=0, unit='POUND', fermentable=model.Fermentable()) a2 = model.RecipeAddition(use='MASH', amount=0, unit='POUND', fermentable=model.Fermentable()) recipe.additions = [a1, a2] assert a1.percentage == 0 assert a2.percentage == 0
def test_metric_ingredient_amount(self): model.Fermentable(name='2-Row', type='MALT', origin='US', ppg=36, lovibond=2, description='Sample Description') model.commit() self.b.refresh() for step in ('Mash', 'Boil'): self.b.find_element_by_link_text(step).click() self.b.find_element_by_link_text( "Add Malt/Fermentables...").click() self.b.find_element_by_link_text("2-Row (US)").click() i = self.b.find_element_by_css_selector( '.%s .addition .amount input' % step.lower()) i.clear() i.send_keys('1 kg') self.blur() time.sleep(2) self.b.refresh() i = self.b.find_element_by_css_selector( '.%s .addition .amount input' % step.lower()) assert i.get_attribute('value') == '1 kg'
def test_add_extract(self): model.Fermentable(name="Cooper's Amber LME", type='EXTRACT', origin='AUSTRALIAN', ppg=36, lovibond=13.3, description='Sample Description') model.commit() self.b.refresh() for step in ('Mash', 'Boil'): self.b.find_element_by_link_text(step).click() assert len( self.b.find_elements_by_css_selector( '.%s .ingredient-list .addition' % step.lower())) == 0 self.b.find_element_by_link_text("Add Malt Extract...").click() self.b.find_element_by_link_text( "Cooper's Amber LME (Australian)").click() assert len( self.b.find_elements_by_css_selector( '.%s .ingredient-list .addition:not(:empty)' % step.lower())) == 1
def test_add_malt(self): model.Fermentable(name='2-Row', type='MALT', origin='US', ppg=36, lovibond=2, description='Sample Description') model.commit() self.b.refresh() for step in ('Mash', 'Boil'): self.b.find_element_by_link_text(step).click() assert len( self.b.find_elements_by_css_selector( '.%s .ingredient-list .addition' % step.lower())) == 0 self.b.find_element_by_link_text( "Add Malt/Fermentables...").click() self.b.find_element_by_link_text("2-Row (US)").click() assert len( self.b.find_elements_by_css_selector( '.%s .ingredient-list .addition:not(:empty)' % step.lower())) == 1
def test_fermentable_ingredient(self): addition = model.RecipeAddition() fermentable = model.Fermentable() addition.fermentable = fermentable assert addition.ingredient == fermentable
def test_fermentable(self): model.Recipe(name='American IPA', author=model.User.get(1)) model.Fermentable(name='2-Row', origin='US', ppg=36, lovibond=2) model.commit() data = { u'boil': { u'additions': [{ u'amount': 5, u'use': 'BOIL', u'duration': 15, u'unit': u'POUND', u'ingredient': { u'id': 1, u'class': 'Fermentable' } }] } } self.post('/recipes/1/american-ipa/builder?_method=PUT', params={'recipe': dumps(data)}) assert model.RecipeAddition.query.count() == 1 a = model.RecipeAddition.get(1) assert a.recipe == model.Recipe.get(1) assert a.amount == 5 assert a.use == 'BOIL' assert a.duration == timedelta(minutes=15) assert a.unit == 'POUND' assert a.fermentable == model.Fermentable.get(1)
def test_ingredient_partition(self): recipe = model.Recipe() recipe.additions = [ model.RecipeAddition(use='MASH', fermentable=model.Fermentable()), model.RecipeAddition(use='MASH', hop=model.Hop()) ] partitions = recipe._partition(recipe.additions) assert len(partitions[model.Fermentable]) == 1 assert len(partitions[model.Hop]) == 1 recipe.additions = [ model.RecipeAddition(use='FIRST WORT', hop=model.Hop()), model.RecipeAddition(use='BOIL', hop=model.Hop()), model.RecipeAddition(use='POST-BOIL', hop=model.Hop()), model.RecipeAddition(use='FLAME OUT', hop=model.Hop()) ] partitions = recipe._partition(recipe.additions) assert len(partitions[model.Hop]) == 4 recipe.additions = [ model.RecipeAddition(use='PRIMARY', yeast=model.Yeast()), model.RecipeAddition(use='SECONDARY', yeast=model.Yeast()) ] partitions = recipe._partition(recipe.additions) assert len(partitions[model.Yeast]) == 2
def test_simple_publish(self): model.Recipe(name='Rocky Mountain River IPA', author=model.User.get(1)) model.Fermentable(name='2-Row', origin='US', ppg=36, lovibond=2) model.commit() assert model.Recipe.query.first().state == "DRAFT" self.post('/recipes/1/rocky-mountain-river-ipa/builder/publish/') assert model.Recipe.query.first().state == "PUBLISHED"
def test_additions_copy(self): recipe = model.Recipe(name=u'Sample Recipe') grain = model.Fermentable() primary_hop = model.Hop() bittering_hop = model.Hop() yeast = model.Yeast() recipe.additions = [ model.RecipeAddition(use='MASH', fermentable=grain), model.RecipeAddition(use='MASH', hop=primary_hop), model.RecipeAddition(use='FIRST WORT', hop=primary_hop), model.RecipeAddition( use='BOIL', hop=primary_hop, ), model.RecipeAddition(use='POST-BOIL', hop=primary_hop), model.RecipeAddition(use='FLAME OUT', hop=bittering_hop), model.RecipeAddition(use='PRIMARY', yeast=yeast), model.RecipeAddition(use='SECONDARY', yeast=yeast) ] model.commit() assert model.Recipe.query.count() == 1 assert model.RecipeAddition.query.count() == 8 assert model.Fermentable.query.count() == 1 assert model.Hop.query.count() == 2 assert model.Yeast.query.count() == 1 recipe = model.Recipe.query.first() recipe.duplicate() model.commit() assert model.Recipe.query.count() == 2 assert model.RecipeAddition.query.count() == 16 assert model.Fermentable.query.count() == 1 assert model.Hop.query.count() == 2 assert model.Yeast.query.count() == 1 r1, r2 = model.Recipe.get(1), model.Recipe.get(2) assert len(r1.additions) == len(r2.additions) == 8 for f in model.Fermentable.query.all(): assert f in [a.ingredient for a in r1.additions] assert f in [a.ingredient for a in r2.additions] assert len(set([a.recipe for a in f.additions])) == 2 for h in model.Hop.query.all(): assert h in [a.ingredient for a in r1.additions] assert h in [a.ingredient for a in r2.additions] assert len(set([a.recipe for a in h.additions])) == 2 for y in model.Yeast.query.all(): assert y in [a.ingredient for a in r1.additions] assert y in [a.ingredient for a in r2.additions] assert len(set([a.recipe for a in y.additions])) == 2
def test_lookup(self): model.Fermentable(name='2-Row', type='MALT', origin='US', ppg=36, lovibond=2, description='Sample Description') model.commit() assert self.get('/ingredients/1').status_int == 200 assert self.get('/ingredients/2', status=404).status_int == 404
def test_draft_merge_additions(self): recipe = model.Recipe(name='Rocky Mountain River IPA', state=u'PUBLISHED') # Add some ingredients grain = model.Fermentable() primary_hop = model.Hop() bittering_hop = model.Hop() yeast = model.Yeast() recipe.additions = [ model.RecipeAddition(use='MASH', fermentable=grain), model.RecipeAddition(use='MASH', hop=primary_hop), model.RecipeAddition(use='FIRST WORT', hop=primary_hop), model.RecipeAddition( use='BOIL', hop=primary_hop, ), model.RecipeAddition(use='POST-BOIL', hop=primary_hop), model.RecipeAddition(use='FLAME OUT', hop=bittering_hop), model.RecipeAddition(use='PRIMARY', yeast=yeast), model.RecipeAddition(use='SECONDARY', yeast=yeast) ] model.commit() # Make a new draft of the recipe model.Recipe.query.first().draft() model.commit() assert model.Recipe.query.count() == 2 # Change the ingredients of the draft draft = model.Recipe.query.filter( model.Recipe.state == 'DRAFT').first() draft.additions = [ model.RecipeAddition(use='MASH', fermentable=model.Fermentable.query.first()) ] model.commit() # Merge the draft back into its origin recipe. draft = model.Recipe.query.filter( model.Recipe.state == 'DRAFT').first() draft.publish() model.commit() # Make sure the remaining version is the (newly saved) draft assert model.Recipe.query.count() == 1 assert model.RecipeAddition.query.count() == 1 published = model.Recipe.query.first() assert published.additions[ 0].fermentable == model.Fermentable.query.first()
def test_additions_copy_with_overrides(self): recipe = model.Recipe(name=u'Sample Recipe') grain = model.Fermentable() primary_hop = model.Hop() bittering_hop = model.Hop() yeast = model.Yeast() recipe.additions = [ model.RecipeAddition(use='MASH', fermentable=grain), model.RecipeAddition(use='MASH', hop=primary_hop), model.RecipeAddition(use='FIRST WORT', hop=primary_hop), model.RecipeAddition( use='BOIL', hop=primary_hop, ), model.RecipeAddition(use='POST-BOIL', hop=primary_hop), model.RecipeAddition(use='FLAME OUT', hop=bittering_hop), model.RecipeAddition(use='PRIMARY', yeast=yeast), model.RecipeAddition(use='SECONDARY', yeast=yeast) ] model.commit() assert model.Recipe.query.count() == 1 assert model.RecipeAddition.query.count() == 8 assert model.Fermentable.query.count() == 1 assert model.Hop.query.count() == 2 assert model.Yeast.query.count() == 1 recipe = model.Recipe.query.first() recipe.duplicate({ 'additions': [ model.RecipeAddition( use='MASH', fermentable=model.Fermentable.query.first()) ] }) model.commit() assert model.Recipe.query.count() == 2 assert model.RecipeAddition.query.count() == 9 assert model.Fermentable.query.count() == 1 assert model.Hop.query.count() == 2 assert model.Yeast.query.count() == 1 r1, r2 = model.Recipe.get(1), model.Recipe.get(2) assert len(r1.additions) == 8 assert len(r2.additions) == 1 assert r2.additions[0].fermentable == model.Fermentable.query.first()
def test_recipe_components(self): recipe = model.Recipe() recipe.additions = [ model.RecipeAddition(use='MASH', fermentable=model.Fermentable()), model.RecipeAddition(use='MASH', hop=model.Hop()), model.RecipeAddition(use='FIRST WORT', hop=model.Hop()), model.RecipeAddition(use='BOIL', hop=model.Hop()), model.RecipeAddition(use='POST-BOIL', hop=model.Hop()), model.RecipeAddition(use='FLAME OUT', hop=model.Hop()), model.RecipeAddition(use='PRIMARY', yeast=model.Yeast()), model.RecipeAddition(use='SECONDARY', yeast=model.Yeast()) ] assert len(recipe.mash[model.Fermentable]) == 1 assert len(recipe.mash[model.Hop]) == 1 assert len(recipe.boil[model.Hop]) == 4 assert len(recipe.fermentation[model.Yeast]) == 2
def test_printed_type(self): assert model.Fermentable().printed_type == 'Grain' assert model.Fermentable(type='SUGAR').printed_type == 'Sugar' assert model.Fermentable(type='MALT').printed_type == 'Grain'
def test_recipe_contains(self): recipe = model.Recipe() f1 = model.Fermentable() h1 = model.Hop() h2 = model.Hop() h3 = model.Hop() h4 = model.Hop() h5 = model.Hop() y1 = model.Yeast() y2 = model.Yeast() recipe.additions = [ model.RecipeAddition(use='MASH', fermentable=f1), model.RecipeAddition(use='MASH', hop=h1), model.RecipeAddition(use='FIRST WORT', hop=h2), model.RecipeAddition(use='BOIL', hop=h3), model.RecipeAddition(use='POST-BOIL', hop=h4), model.RecipeAddition(use='FLAME OUT', hop=h5), model.RecipeAddition(use='PRIMARY', yeast=y1), model.RecipeAddition(use='SECONDARY', yeast=y2) ] assert recipe.contains(f1, 'mash') assert recipe.contains(f1, 'boil') is False assert recipe.contains(f1, 'fermentation') is False assert recipe.contains(h1, 'mash') assert recipe.contains(h1, 'boil') is False assert recipe.contains(h1, 'fermentation') is False assert recipe.contains(h2, 'mash') is False assert recipe.contains(h2, 'boil') assert recipe.contains(h2, 'fermentation') is False assert recipe.contains(h3, 'mash') is False assert recipe.contains(h3, 'boil') assert recipe.contains(h3, 'fermentation') is False assert recipe.contains(h4, 'mash') is False assert recipe.contains(h4, 'boil') assert recipe.contains(h4, 'fermentation') is False assert recipe.contains(h5, 'mash') is False assert recipe.contains(h5, 'boil') assert recipe.contains(h5, 'fermentation') is False assert recipe.contains(y1, 'mash') is False assert recipe.contains(y1, 'boil') is False assert recipe.contains(y1, 'fermentation') assert recipe.contains(y2, 'mash') is False assert recipe.contains(y2, 'boil') is False assert recipe.contains(y2, 'fermentation') assert recipe.contains(f1, 'invalid') is False assert recipe.contains(h1, 'invalid') is False assert recipe.contains(h2, 'invalid') is False assert recipe.contains(h3, 'invalid') is False assert recipe.contains(h4, 'invalid') is False assert recipe.contains(h5, 'invalid') is False assert recipe.contains(y1, 'invalid') is False assert recipe.contains(y2, 'invalid') is False