import unittest

from brew.constants import IMPERIAL_UNITS
from brew.constants import SI_UNITS
from brew.recipes import Recipe
from fixtures import grain_additions
from fixtures import hop_additions
from fixtures import recipe


class TestRecipe(unittest.TestCase):

    def setUp(self):
        # Define Grains
        self.grain_additions = grain_additions

        # Define Hops
        self.hop_additions = hop_additions

        # Define Recipes
        self.recipe = recipe

    def test_str(self):
        out = str(self.recipe)
        self.assertEquals(out, 'pale ale')

    def test_set_units(self):
        self.assertEquals(self.recipe.units, IMPERIAL_UNITS)
        self.recipe.set_units(SI_UNITS)
        self.assertEquals(self.recipe.units, SI_UNITS)

    def test_set_raises(self):
        with self.assertRaises(Exception):
            self.recipe.set_units('bad')

    def test_validate(self):
        data = self.recipe.to_dict()
        Recipe.validate(data)

import unittest

from brew.constants import IMPERIAL_UNITS
from brew.constants import SI_UNITS
from brew.recipes import Recipe
from fixtures import grain_additions
from fixtures import hop_additions
from fixtures import recipe
from fixtures import yeast


class TestRecipe(unittest.TestCase):

    def setUp(self):
        # Define Grains
        self.grain_additions = grain_additions

        # Define Hops
        self.hop_additions = hop_additions

        # Define Yeast
        self.yeast = yeast

        # Define Recipes
        self.recipe = recipe

    def test_str(self):
        out = str(self.recipe)
        self.assertEquals(out, 'pale ale')

    def test_set_units(self):
        self.assertEquals(self.recipe.units, IMPERIAL_UNITS)
        self.recipe.set_units(SI_UNITS)
        self.assertEquals(self.recipe.units, SI_UNITS)

    def test_set_raises(self):
        with self.assertRaises(Exception):
            self.recipe.set_units('bad')

    def test_grains_units_mismatch_raises(self):
        grain_additions = [g.change_units() for g in self.grain_additions]
        with self.assertRaises(Exception):
            Recipe(name='pale ale',
                   grain_additions=grain_additions,
                   hop_additions=self.hop_additions,
                   yeast=self.yeast)

    def test_hops_units_mismatch_raises(self):
        hop_additions = [h.change_units() for h in self.hop_additions]
        with self.assertRaises(Exception):
            Recipe(name='pale ale',
                   grain_additions=self.grain_additions,
                   hop_additions=hop_additions,
                   yeast=self.yeast)

    def test_validate(self):
        data = self.recipe.to_dict()
        Recipe.validate(data)

Test units mismatch in recipe
Test units mismatch in recipe

  import unittest
  
  from brew.constants import IMPERIAL_UNITS
  from brew.constants import SI_UNITS
  from brew.recipes import Recipe
  from fixtures import grain_additions
  from fixtures import hop_additions
  from fixtures import recipe
+ from fixtures import yeast
  
  
  class TestRecipe(unittest.TestCase):
  
      def setUp(self):
          # Define Grains
          self.grain_additions = grain_additions
  
          # Define Hops
          self.hop_additions = hop_additions
+ 
+         # Define Yeast
+         self.yeast = yeast
  
          # Define Recipes
          self.recipe = recipe
  
      def test_str(self):
          out = str(self.recipe)
          self.assertEquals(out, 'pale ale')
  
      def test_set_units(self):
          self.assertEquals(self.recipe.units, IMPERIAL_UNITS)
          self.recipe.set_units(SI_UNITS)
          self.assertEquals(self.recipe.units, SI_UNITS)
  
      def test_set_raises(self):
          with self.assertRaises(Exception):
              self.recipe.set_units('bad')
  
+     def test_grains_units_mismatch_raises(self):
+         grain_additions = [g.change_units() for g in self.grain_additions]
+         with self.assertRaises(Exception):
+             Recipe(name='pale ale',
+                    grain_additions=grain_additions,
+                    hop_additions=self.hop_additions,
+                    yeast=self.yeast)
+ 
+     def test_hops_units_mismatch_raises(self):
+         hop_additions = [h.change_units() for h in self.hop_additions]
+         with self.assertRaises(Exception):
+             Recipe(name='pale ale',
+                    grain_additions=self.grain_additions,
+                    hop_additions=hop_additions,
+                    yeast=self.yeast)
+ 
      def test_validate(self):
          data = self.recipe.to_dict()
          Recipe.validate(data)
  
Test units mismatch in recipe
## Code Before:
import unittest

from brew.constants import IMPERIAL_UNITS
from brew.constants import SI_UNITS
from brew.recipes import Recipe
from fixtures import grain_additions
from fixtures import hop_additions
from fixtures import recipe


class TestRecipe(unittest.TestCase):

    def setUp(self):
        # Define Grains
        self.grain_additions = grain_additions

        # Define Hops
        self.hop_additions = hop_additions

        # Define Recipes
        self.recipe = recipe

    def test_str(self):
        out = str(self.recipe)
        self.assertEquals(out, 'pale ale')

    def test_set_units(self):
        self.assertEquals(self.recipe.units, IMPERIAL_UNITS)
        self.recipe.set_units(SI_UNITS)
        self.assertEquals(self.recipe.units, SI_UNITS)

    def test_set_raises(self):
        with self.assertRaises(Exception):
            self.recipe.set_units('bad')

    def test_validate(self):
        data = self.recipe.to_dict()
        Recipe.validate(data)

## Instruction:
Test units mismatch in recipe
## Code After:
import unittest

from brew.constants import IMPERIAL_UNITS
from brew.constants import SI_UNITS
from brew.recipes import Recipe
from fixtures import grain_additions
from fixtures import hop_additions
from fixtures import recipe
from fixtures import yeast


class TestRecipe(unittest.TestCase):

    def setUp(self):
        # Define Grains
        self.grain_additions = grain_additions

        # Define Hops
        self.hop_additions = hop_additions

        # Define Yeast
        self.yeast = yeast

        # Define Recipes
        self.recipe = recipe

    def test_str(self):
        out = str(self.recipe)
        self.assertEquals(out, 'pale ale')

    def test_set_units(self):
        self.assertEquals(self.recipe.units, IMPERIAL_UNITS)
        self.recipe.set_units(SI_UNITS)
        self.assertEquals(self.recipe.units, SI_UNITS)

    def test_set_raises(self):
        with self.assertRaises(Exception):
            self.recipe.set_units('bad')

    def test_grains_units_mismatch_raises(self):
        grain_additions = [g.change_units() for g in self.grain_additions]
        with self.assertRaises(Exception):
            Recipe(name='pale ale',
                   grain_additions=grain_additions,
                   hop_additions=self.hop_additions,
                   yeast=self.yeast)

    def test_hops_units_mismatch_raises(self):
        hop_additions = [h.change_units() for h in self.hop_additions]
        with self.assertRaises(Exception):
            Recipe(name='pale ale',
                   grain_additions=self.grain_additions,
                   hop_additions=hop_additions,
                   yeast=self.yeast)

    def test_validate(self):
        data = self.recipe.to_dict()
        Recipe.validate(data)
