Beispiel #1
0
class TestInterpreterPut(object):
    def setup_method(self, method):
        global_ingredients = Ingredients([Ingredient("bananas", IngredientProperties(180, True, False))])
        first_mixing_bowl = Ingredients(
            [
                Ingredient("milk", IngredientProperties(200, False, True)),
                Ingredient("baking powder", IngredientProperties(50, True, False)),
            ]
        )
        second_mixing_bowl = Ingredients(
            [
                Ingredient("orange juice", IngredientProperties(100, False, True)),
                Ingredient("cinnamon", IngredientProperties(15, True, False)),
            ]
        )
        self.interpreter = Interpreter(global_ingredients, [first_mixing_bowl, second_mixing_bowl])

    def test_undefined_ingredient(self):
        with pytest.raises(UndefinedIngredientError) as e:
            self.interpreter.put("olive oil")
        assert e.value.ingredient == "olive oil"
        assert e.value.lineno is None

    def test_without_mixing_bowl(self):
        self.interpreter.put("bananas")
        assert self.interpreter.first_mixing_bowl.top == Ingredient("bananas", IngredientProperties(180, True, False))

    def test_with_mixing_bowl(self):
        self.interpreter.put("bananas", 2)
        assert self.interpreter.mixing_bowls[1].top == Ingredient("bananas", IngredientProperties(180, True, False))

    def test_into_nonexisting_mixing_bowl(self):
        self.interpreter.put("bananas", 3)
        assert self.interpreter.last_mixing_bowl == Ingredients(
            [Ingredient("bananas", IngredientProperties(180, True, False))]
        )
        assert self.interpreter.last_mixing_bowl.top == Ingredient("bananas", IngredientProperties(180, True, False))

    def test_same_item_multiple_times(self):
        self.interpreter.put("bananas")
        assert self.interpreter.first_mixing_bowl == Ingredients(
            [
                Ingredient("milk", IngredientProperties(200, False, True)),
                Ingredient("baking powder", IngredientProperties(50, True, False)),
                Ingredient("bananas", IngredientProperties(180, True, False)),
            ]
        )
        self.interpreter.put("bananas")
        assert self.interpreter.first_mixing_bowl == Ingredients(
            [
                Ingredient("milk", IngredientProperties(200, False, True)),
                Ingredient("baking powder", IngredientProperties(50, True, False)),
                Ingredient("bananas", IngredientProperties(180, True, False)),
                Ingredient("bananas", IngredientProperties(180, True, False)),
            ]
        )

    def test_invalid_mixing_bowl(self):
        with pytest.raises(InvalidContainerIDError) as e:
            self.interpreter.put("bananas", 4)
        assert e.value.id == 4