diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 000000000..b7106c4ad --- /dev/null +++ b/.coveragerc @@ -0,0 +1,4 @@ +[run] +omit = + praktikum/praktikum.py + praktikum/tests/* \ No newline at end of file diff --git a/__init__.py b/praktikum/__init__.py similarity index 100% rename from __init__.py rename to praktikum/__init__.py diff --git a/bun.py b/praktikum/bun.py similarity index 100% rename from bun.py rename to praktikum/bun.py diff --git a/burger.py b/praktikum/burger.py similarity index 100% rename from burger.py rename to praktikum/burger.py diff --git a/database.py b/praktikum/database.py similarity index 100% rename from database.py rename to praktikum/database.py diff --git a/ingredient.py b/praktikum/ingredient.py similarity index 100% rename from ingredient.py rename to praktikum/ingredient.py diff --git a/ingredient_types.py b/praktikum/ingredient_types.py similarity index 100% rename from ingredient_types.py rename to praktikum/ingredient_types.py diff --git a/praktikum.py b/praktikum/praktikum.py similarity index 100% rename from praktikum.py rename to praktikum/praktikum.py diff --git a/praktikum/tests/__init__.py b/praktikum/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/praktikum/tests/conftest.py b/praktikum/tests/conftest.py new file mode 100644 index 000000000..81e5f64f6 --- /dev/null +++ b/praktikum/tests/conftest.py @@ -0,0 +1,38 @@ +import pytest +from unittest.mock import Mock + +from praktikum.burger import Burger +from praktikum.bun import Bun +from praktikum.ingredient import Ingredient + + +@pytest.fixture +def burger(): + return Burger() + + +@pytest.fixture +def bun(): + return Bun("black bun", 100) + + +@pytest.fixture +def ingredient(): + return Ingredient("SAUCE", "hot sauce", 100) + + +@pytest.fixture +def mock_bun(): + bun = Mock() + bun.get_name.return_value = "black bun" + bun.get_price.return_value = 100 + return bun + + +@pytest.fixture +def mock_ingredient(): + ingredient = Mock() + ingredient.get_type.return_value = "SAUCE" + ingredient.get_name.return_value = "hot sauce" + ingredient.get_price.return_value = 100 + return ingredient \ No newline at end of file diff --git a/praktikum/tests/test_bun.py b/praktikum/tests/test_bun.py new file mode 100644 index 000000000..057ee794a --- /dev/null +++ b/praktikum/tests/test_bun.py @@ -0,0 +1,6 @@ +def test_bun_get_name(bun): + assert bun.get_name() == "black bun" + + +def test_bun_get_price(bun): + assert bun.get_price() == 100 \ No newline at end of file diff --git a/praktikum/tests/test_burger.py b/praktikum/tests/test_burger.py new file mode 100644 index 000000000..4ea57a411 --- /dev/null +++ b/praktikum/tests/test_burger.py @@ -0,0 +1,86 @@ +import pytest +from unittest.mock import Mock + + +def make_ingredient(ingredient_type, name, price): + ingredient = Mock() + ingredient.get_type.return_value = ingredient_type + ingredient.get_name.return_value = name + ingredient.get_price.return_value = price + return ingredient + + +def test_set_buns_sets_bun(burger, mock_bun): + burger.set_buns(mock_bun) + + assert burger.bun == mock_bun + + +def test_add_ingredient_adds_ingredient(burger, mock_ingredient): + burger.add_ingredient(mock_ingredient) + + assert burger.ingredients == [mock_ingredient] + + +def test_remove_ingredient_removes_ingredient(burger): + ingredient1 = make_ingredient("SAUCE", "hot sauce", 100) + ingredient2 = make_ingredient("FILLING", "cutlet", 200) + + burger.ingredients = [ingredient1, ingredient2] + burger.remove_ingredient(0) + + assert burger.ingredients == [ingredient2] + + +@pytest.mark.parametrize( + "index,new_index,expected", + [ + (0, 2, ["cutlet", "sour cream", "hot sauce"]), + (2, 0, ["sour cream", "hot sauce", "cutlet"]), + ] +) +def test_move_ingredient(burger, index, new_index, expected): + burger.ingredients = [ + make_ingredient("SAUCE", "hot sauce", 100), + make_ingredient("FILLING", "cutlet", 200), + make_ingredient("SAUCE", "sour cream", 300), + ] + + burger.move_ingredient(index, new_index) + + result = [item.get_name() for item in burger.ingredients] + + assert result == expected + + +@pytest.mark.parametrize( + "bun_price, ingredients, expected", + [ + (100, [100, 200], 500), + (200, [], 400), + ] +) +def test_get_price(burger, mock_bun, bun_price, ingredients, expected): + mock_bun.get_price.return_value = bun_price + burger.set_buns(mock_bun) + + for price in ingredients: + burger.add_ingredient(make_ingredient("SAUCE", "test", price)) + + assert burger.get_price() == expected + + +def test_get_receipt(burger, mock_bun): + burger.set_buns(mock_bun) + burger.add_ingredient(make_ingredient("SAUCE", "hot sauce", 100)) + burger.add_ingredient(make_ingredient("FILLING", "cutlet", 200)) + + expected = ( + "(==== black bun ====)\n" + "= sauce hot sauce =\n" + "= filling cutlet =\n" + "(==== black bun ====)\n\n" + "Price: 500" + ) + + assert burger.get_receipt() == expected \ No newline at end of file diff --git a/praktikum/tests/test_database.py b/praktikum/tests/test_database.py new file mode 100644 index 000000000..bd915c7be --- /dev/null +++ b/praktikum/tests/test_database.py @@ -0,0 +1,15 @@ +from praktikum.database import Database + + +def test_available_buns_returns_buns(): + db = Database() + buns = db.available_buns() + + assert len(buns) == 3 + + +def test_available_ingredients_returns_ingredients(): + db = Database() + ingredients = db.available_ingredients() + + assert len(ingredients) == 6 \ No newline at end of file diff --git a/praktikum/tests/test_ingredient.py b/praktikum/tests/test_ingredient.py new file mode 100644 index 000000000..ee2460d56 --- /dev/null +++ b/praktikum/tests/test_ingredient.py @@ -0,0 +1,10 @@ +def test_ingredient_get_name(ingredient): + assert ingredient.get_name() == "hot sauce" + + +def test_ingredient_get_price(ingredient): + assert ingredient.get_price() == 100 + + +def test_ingredient_get_type(ingredient): + assert ingredient.get_type() == "SAUCE" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..cd50952d8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pytest==8.3.2 +pytest-cov==7.1.0 \ No newline at end of file