Example #1
0
    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
Example #2
0
    def test_yeast_ingredient(self):
        addition = model.RecipeAddition()
        yeast = model.Yeast()

        addition.yeast = yeast

        assert addition.ingredient == yeast
Example #3
0
    def test_yeast(self):
        model.Recipe(name='American IPA', author=model.User.get(1))
        model.Yeast(name='Wyeast 1056 - American Ale',
                    form='LIQUID',
                    attenuation=.75)
        model.commit()

        data = {
            u'mash': {
                u'additions': [{
                    u'use': u'MASH',
                    u'amount': 1,
                    u'use': 'PRIMARY',
                    u'ingredient': {
                        u'id': 1,
                        u'class': u'Yeast'
                    }
                }]
            }
        }

        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 == 1
        assert a.use == 'PRIMARY'
        assert a.yeast == model.Yeast.get(1)
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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()
Example #7
0
    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'
Example #8
0
    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()
Example #9
0
    def test_yeast_step(self):
        model.Yeast(name='Wyeast 1056 - American Ale',
                    type='ALE',
                    form='LIQUID',
                    attenuation=.75,
                    flocculation='MEDIUM/HIGH')
        model.commit()
        self.b.refresh()

        self.b.find_element_by_link_text('Ferment').click()
        self.b.find_element_by_link_text('Add Yeast...').click()
        self.b.find_element_by_link_text('Wyeast 1056 - American Ale').click()

        Select(self.b.find_element_by_css_selector(
            '.ferment .addition select')).select_by_visible_text('Secondary')
        time.sleep(2)

        self.b.refresh()

        assert self.b.find_element_by_css_selector(
            '.ferment .addition select').get_attribute('value') == 'SECONDARY'
Example #10
0
    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