diff --git a/pom.xml b/pom.xml
index 184bdae890..948b946fd8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,4 +13,59 @@
11
-
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.11.4
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ 5.11.4
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ 5.17.0
+ test
+
+
+
+
+ src/main/java
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+ 11
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.12
+
+
+ prepare-agent
+ prepare-agent
+
+
+ report
+ test
+ report
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.5.4
+
+
+
+
\ No newline at end of file
diff --git a/src/test/java/BunTest.java b/src/test/java/BunTest.java
new file mode 100644
index 0000000000..5ef3be7cb1
--- /dev/null
+++ b/src/test/java/BunTest.java
@@ -0,0 +1,27 @@
+import praktikum.*;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+ class BunTest {
+ static Bun bun;
+
+ @BeforeAll
+ static void setUpAll() {
+ bun = new Bun("Bulochka", 22);
+ }
+
+ @Test
+ void getNameReturnsName() {
+ String actual = bun.getName();
+ assertEquals("Bulochka", actual);
+ }
+
+ @Test
+ void getPriceReturnPrice() {
+ float actual = bun.getPrice();
+ assertEquals(22, actual);
+ }
+}
diff --git a/src/test/java/BurgerTest.java b/src/test/java/BurgerTest.java
new file mode 100644
index 0000000000..fc1ca3649f
--- /dev/null
+++ b/src/test/java/BurgerTest.java
@@ -0,0 +1,117 @@
+import praktikum.*;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static praktikum.IngredientType.FILLING;
+import static praktikum.IngredientType.SAUCE;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+
+class BurgerTest {
+ Burger burger;
+ Bun bun;
+ Ingredient sauce;
+ Ingredient filling;
+
+ @BeforeEach
+ public void setUpAll() {
+ burger = new Burger();
+ bun = new Bun("Bulochka", 100.0f);
+ sauce = new Ingredient(SAUCE, "ketchup", 20.5f);
+ filling = new Ingredient(FILLING, "chicken", 50.0f);
+ }
+
+ @Test
+ //проверяем, что в бургере есть булка
+ void setBunsShouldSetBun() {
+ burger.setBuns(bun);
+ assertNotNull(burger.bun);
+ assertEquals("Bulochka", burger.bun.getName());
+ assertEquals(100.0f, burger.bun.getPrice());
+ }
+ @Test
+ //проверяем, что через метод addIngredient в список ingredients добавляется sauce и filling
+ void addIngredientShouldAddToList(){
+ burger.addIngredient(sauce);
+ burger.addIngredient(filling);
+ assertEquals(2, burger.ingredients.size());
+ assertSame(sauce, burger.ingredients.get(0));
+ assertSame(filling, burger.ingredients.get(1));
+ }
+ @ParameterizedTest
+ @ValueSource(ints = {0, 1, 2, 3, 4, 5})
+ void removeIngredientShouldWorkWithAnyIndex(int index) {
+ // заполняем 6 ингредиентов
+ for (int i = 0; i < 6; i++) {
+ burger.addIngredient(new Ingredient(SAUCE, "test" + i, 10f));
+ }
+
+ burger.removeIngredient(index);
+
+ assertEquals(5, burger.ingredients.size()); // всегда 5 остается
+ }
+ @Test
+ void removeFirstShouldLeaveFilling() {
+ burger.addIngredient(sauce);
+ burger.addIngredient(filling);
+ burger.removeIngredient(0); // удаляем sauce
+
+ assertSame(filling, burger.ingredients.get(0)); // ✓
+ }
+
+ @Test
+ void removeSecondShouldLeaveSauce() {
+ burger.addIngredient(sauce);
+ burger.addIngredient(filling);
+ burger.removeIngredient(1); // удаляем filling
+
+ assertSame(sauce, burger.ingredients.get(0)); // ✓
+ }
+
+ @Test
+ void moveIngredientShouldChangeOrder() {
+ Ingredient anotherSauce = new Ingredient(SAUCE, "ketchup", 15.0f);
+
+ burger.addIngredient(sauce); // index 0
+ burger.addIngredient(filling); // index 1
+ burger.addIngredient(anotherSauce); // index 2
+
+ // перенос элемент с index 0 в позицию 2
+ burger.moveIngredient(0, 2);
+
+ assertEquals(3, burger.ingredients.size());
+ assertSame(filling, burger.ingredients.get(0));
+ assertSame(anotherSauce, burger.ingredients.get(1));
+ assertSame(sauce, burger.ingredients.get(2));
+ }
+ @Test
+ void getPriceShouldReturnSumOfBunAndIngredients() {
+ burger.setBuns(bun); // 100 * 2 = 200
+ burger.addIngredient(sauce); // + 20.5
+ burger.addIngredient(filling); // + 50
+
+ float expected = 100.0f * 2 + 20.5f + 50.0f;
+
+ assertEquals(expected, burger.getPrice());
+ }
+ @Test
+ void getReceiptShouldReturnCorrectFormattedString() {
+ burger.setBuns(bun);
+ burger.addIngredient(sauce);
+ burger.addIngredient(filling);
+
+ String receipt = burger.getReceipt();
+
+ assertTrue(receipt.contains("(==== Bulochka ====)"));
+ assertTrue(receipt.contains("= sauce ketchup ="));
+ assertTrue(receipt.contains("= filling chicken ="));
+
+ float expectedPrice = 100.0f * 2 + 20.5f + 50.0f;
+ String expectedPricePart = String.format("Price: %f", expectedPrice);
+
+ assertTrue(receipt.contains(expectedPricePart));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/DatabaseTest.java b/src/test/java/DatabaseTest.java
new file mode 100644
index 0000000000..6fc2821811
--- /dev/null
+++ b/src/test/java/DatabaseTest.java
@@ -0,0 +1,34 @@
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import praktikum.*;
+import java.util.List;
+
+ class DatabaseTest {
+ private Database db;
+ @BeforeEach
+ void setUp() {
+ db = new Database();
+ }
+ @Test
+ void availableBunsShouldReturnThreeBuns() {
+ List buns = db.availableBuns();
+ assertEquals(3, buns.size());
+ // проверяем первый black bun
+ assertEquals("black bun", buns.get(0).getName());
+ assertEquals(100f, buns.get(0).getPrice());
+ }
+ @Test
+ void availableIngredientsShouldReturnSixIngredients() {
+ List ingredients = db.availableIngredients();
+ assertEquals(6, ingredients.size());
+ // 3 соуса + 3 начинки
+ long sauces = ingredients.stream()
+ .map(Ingredient::getType)
+ .filter(type -> type == IngredientType.SAUCE)
+ .count();
+ assertEquals(3, sauces);
+ }
+
+}
diff --git a/src/test/java/IngredientTest.java b/src/test/java/IngredientTest.java
new file mode 100644
index 0000000000..7c2804d664
--- /dev/null
+++ b/src/test/java/IngredientTest.java
@@ -0,0 +1,30 @@
+import praktikum.*;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static praktikum.IngredientType.SAUCE;
+
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+ class IngredientTest {
+ static Ingredient ingredient;
+ @BeforeAll
+ static void setUpAll() {
+ ingredient = new Ingredient(SAUCE, "NachinkaSauce", 10);
+ }
+ @Test
+ void getPriceReturnPrice(){
+ float actual = ingredient.getPrice();
+ assertEquals(10, actual);
+ }
+ @Test
+ void getNameReturnName(){
+ String actual = ingredient.getName();
+ assertEquals("NachinkaSauce", actual);
+ }
+ @Test
+ void getTypeReturnsType(){
+ IngredientType actual = ingredient.getType();
+ assertEquals(SAUCE, actual);
+ }
+ }