diff --git a/.coverage b/.coverage new file mode 100644 index 000000000..bbff4ce10 Binary files /dev/null and b/.coverage differ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..9b388533a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "python.testing.pytestArgs": [ + "tests" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true +} \ No newline at end of file diff --git a/burger.py b/burger.py index 2b3b6a88b..3f71aaa29 100644 --- a/burger.py +++ b/burger.py @@ -1,7 +1,7 @@ from typing import List -from praktikum.bun import Bun -from praktikum.ingredient import Ingredient +from bun import Bun +from ingredient import Ingredient class Burger: diff --git a/database.py b/database.py index 4c75baf71..84d3685d0 100644 --- a/database.py +++ b/database.py @@ -1,8 +1,8 @@ from typing import List -from praktikum.bun import Bun -from praktikum.ingredient import Ingredient -from praktikum.ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING +from bun import Bun +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING class Database: diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..cffeec658 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest +pytest-cov \ No newline at end of file diff --git a/tests/test_bun.py b/tests/test_bun.py new file mode 100644 index 000000000..17aa45417 --- /dev/null +++ b/tests/test_bun.py @@ -0,0 +1,18 @@ +from bun import Bun + +class TestBun: + def test_initialization_sets_name_attribute(self): + bun = Bun('Black Bun', 100) + assert bun.name == 'Black Bun' + + def test_initialization_sets_price_attribute(self): + bun = Bun('White Bun', 200) + assert bun.price == 200 + + def test_get_name_returns_correct_value(self): + bun = Bun('Red Bun', 150) + assert bun.get_name() == 'Red Bun' + + def test_get_price_returns_correct_value(self): + bun = Bun('Golden Bun', 300) + assert bun.get_price() == 300 \ No newline at end of file diff --git a/tests/test_burger.py b/tests/test_burger.py new file mode 100644 index 000000000..92546597e --- /dev/null +++ b/tests/test_burger.py @@ -0,0 +1,91 @@ +from burger import Burger +from unittest.mock import Mock + +class TestBurger: + + def test_set_buns_assigns_correct_bun(self): + burger = Burger() + mock_bun = Mock() + burger.set_buns(mock_bun) + assert burger.bun == mock_bun + + def test_add_ingredient_increases_count(self): + burger = Burger() + mock_ingredient = Mock() + burger.add_ingredient(mock_ingredient) + assert len(burger.ingredients) == 1 + + def test_add_ingredient_contains_correct_object(self): + burger = Burger() + mock_ingredient = Mock() + burger.add_ingredient(mock_ingredient) + assert burger.ingredients[0] == mock_ingredient + + def test_remove_ingredient_decreases_count(self): + burger = Burger() + mock_ingredient = Mock() + burger.add_ingredient(mock_ingredient) + burger.remove_ingredient(0) + assert len(burger.ingredients) == 0 + + def test_move_ingredient_changes_first_element(self): + burger = Burger() + ingred_1, ingred_2 = Mock(), Mock() + burger.add_ingredient(ingred_1) + burger.add_ingredient(ingred_2) + burger.move_ingredient(0, 1) + assert burger.ingredients[0] == ingred_2 + + def test_move_ingredient_changes_second_element(self): + burger = Burger() + ingred_1, ingred_2 = Mock(), Mock() + burger.add_ingredient(ingred_1) + burger.add_ingredient(ingred_2) + burger.move_ingredient(0, 1) + assert burger.ingredients[1] == ingred_1 + + def test_get_price_calculates_correct_sum(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_price.return_value = 100 + burger.set_buns(mock_bun) + + mock_ingredient = Mock() + mock_ingredient.get_price.return_value = 50 + burger.add_ingredient(mock_ingredient) + + assert burger.get_price() == 250 + + def test_get_receipt_contains_bun_name(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_name.return_value = "Black Bun" + mock_bun.get_price.return_value = 100 + burger.set_buns(mock_bun) + + receipt = burger.get_receipt() + assert "Black Bun" in receipt + + def test_get_receipt_contains_ingredient_name(self): + burger = Burger() + mock_ingredient = Mock() + mock_ingredient.get_name.return_value = "Cutlet" + mock_ingredient.get_price.return_value = 50 + mock_ingredient.get_type.return_value = "FILLING" + burger.add_ingredient(mock_ingredient) + + mock_bun = Mock() + mock_bun.get_price.return_value = 100 + burger.set_buns(mock_bun) + + receipt = burger.get_receipt() + assert "Cutlet" in receipt + + def test_get_receipt_contains_total_price(self): + burger = Burger() + mock_bun = Mock() + mock_bun.get_price.return_value = 100 + burger.set_buns(mock_bun) + + receipt = burger.get_receipt() + assert "200" in receipt \ No newline at end of file diff --git a/tests/test_database.py b/tests/test_database.py new file mode 100644 index 000000000..632008b9e --- /dev/null +++ b/tests/test_database.py @@ -0,0 +1,29 @@ +from database import Database + +class TestDatabase: + + def test_available_buns_returns_correct_count(self): + db = Database() + buns = db.available_buns() + + assert len(buns) == 3 + + def test_available_ingredients_returns_correct_count(self): + db = Database() + ingredients = db.available_ingredients() + + assert len(ingredients) == 6 + + def test_database_has_specific_bun(self): + db = Database() + buns = db.available_buns() + + names = [bun.get_name() for bun in buns] + assert "white bun" in names + + def test_database_has_specific_ingredient(self): + db = Database() + ingredients = db.available_ingredients() + + names = [ing.get_name() for ing in ingredients] + assert "hot sauce" in names \ No newline at end of file diff --git a/tests/test_ingredient.py b/tests/test_ingredient.py new file mode 100644 index 000000000..609216b10 --- /dev/null +++ b/tests/test_ingredient.py @@ -0,0 +1,32 @@ +import pytest +from ingredient import Ingredient +from ingredient_types import INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING + +class TestIngredient: + + @pytest.mark.parametrize("ing_type", [INGREDIENT_TYPE_SAUCE, INGREDIENT_TYPE_FILLING]) + def test_get_type_returns_correct_value(self, ing_type): + ingredient = Ingredient(ing_type, "sour cream", 100) + assert ingredient.get_type() == ing_type + + @pytest.mark.parametrize("name", ["sour cream", "cutlet"]) + def test_get_name_returns_correct_value(self, name): + ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, name, 100) + assert ingredient.get_name() == name + + @pytest.mark.parametrize("price", [100, 200]) + def test_get_price_returns_correct_value(self, price): + ingredient = Ingredient(INGREDIENT_TYPE_SAUCE, "sour cream", price) + assert ingredient.get_price() == price + + def test_initialization_sets_type_attribute(self): + ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "chicken", 150) + assert ingredient.type == INGREDIENT_TYPE_FILLING + + def test_initialization_sets_name_attribute(self): + ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "chicken", 150) + assert ingredient.name == "chicken" + + def test_initialization_sets_price_attribute(self): + ingredient = Ingredient(INGREDIENT_TYPE_FILLING, "chicken", 150) + assert ingredient.price == 150 \ No newline at end of file