diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..6a344d060a Binary files /dev/null and b/.gitignore differ diff --git a/pom.xml b/pom.xml index 184bdae890..b9f4dc7ff0 100644 --- a/pom.xml +++ b/pom.xml @@ -1,16 +1,83 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - org.example - praktikum + praktikum + Task_1 1.0-SNAPSHOT 11 11 + UTF-8 - + + + junit + junit + 4.13.2 + test + + + + org.mockito + mockito-core + 5.12.0 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 11 + 11 + UTF-8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + prepare-agent + + prepare-agent + + + + report + verify + + report + + + + + + praktikum/Database* + praktikum/Praktikum* + + + + + + + \ No newline at end of file diff --git a/src/main/java/praktikum/Database.java b/src/main/java/praktikum/Database.java index a7cb7e4585..576bb8f600 100644 --- a/src/main/java/praktikum/Database.java +++ b/src/main/java/praktikum/Database.java @@ -1,36 +1,36 @@ -package praktikum; - -import java.util.ArrayList; -import java.util.List; - -/** - * Класс с методами по работе с базой данных. - */ -public class Database { - - private final List buns = new ArrayList<>(); - private final List ingredients = new ArrayList<>(); - - public Database() { - buns.add(new Bun("black bun", 100)); - buns.add(new Bun("white bun", 200)); - buns.add(new Bun("red bun", 300)); - - ingredients.add(new Ingredient(IngredientType.SAUCE, "hot sauce", 100)); - ingredients.add(new Ingredient(IngredientType.SAUCE, "sour cream", 200)); - ingredients.add(new Ingredient(IngredientType.SAUCE, "chili sauce", 300)); - - ingredients.add(new Ingredient(IngredientType.FILLING, "cutlet", 100)); - ingredients.add(new Ingredient(IngredientType.FILLING, "dinosaur", 200)); - ingredients.add(new Ingredient(IngredientType.FILLING, "sausage", 300)); - } - - public List availableBuns() { - return buns; - } - - public List availableIngredients() { - return ingredients; - } - +package praktikum; + +import java.util.ArrayList; +import java.util.List; + +/** + * Класс с методами по работе с базой данных. + */ +public class Database { + + private final List buns = new ArrayList<>(); + private final List ingredients = new ArrayList<>(); + + public Database() { + buns.add(new Bun("black bun", 100)); + buns.add(new Bun("white bun", 200)); + buns.add(new Bun("red bun", 300)); + + ingredients.add(new Ingredient(IngredientType.SAUCE, "hot sauce", 100)); + ingredients.add(new Ingredient(IngredientType.SAUCE, "sour cream", 200)); + ingredients.add(new Ingredient(IngredientType.SAUCE, "chili sauce", 300)); + + ingredients.add(new Ingredient(IngredientType.FILLING, "cutlet", 100)); + ingredients.add(new Ingredient(IngredientType.FILLING, "dinosaur", 200)); + ingredients.add(new Ingredient(IngredientType.FILLING, "sausage", 300)); + } + + public List availableBuns() { + return buns; + } + + public List availableIngredients() { + return ingredients; + } + } \ No newline at end of file diff --git a/src/main/java/praktikum/Praktikum.java b/src/main/java/praktikum/Praktikum.java index ce661ccf36..745d26fdd4 100644 --- a/src/main/java/praktikum/Praktikum.java +++ b/src/main/java/praktikum/Praktikum.java @@ -1,38 +1,38 @@ -package praktikum; - -import java.util.List; - -public class Praktikum { - - public static void main(String[] args) { - // Инициализируем базу данных - Database database = new Database(); - - // Создадим новый бургер - Burger burger = new Burger(); - - // Считаем список доступных булок из базы данных - List buns = database.availableBuns(); - - // Считаем список доступных ингредиентов из базы данных - List ingredients = database.availableIngredients(); - - // Соберём бургер - burger.setBuns(buns.get(0)); - - burger.addIngredient(ingredients.get(1)); - burger.addIngredient(ingredients.get(4)); - burger.addIngredient(ingredients.get(3)); - burger.addIngredient(ingredients.get(5)); - - // Переместим слой с ингредиентом - burger.moveIngredient(2, 1); - - // Удалим ингредиент - burger.removeIngredient(3); - - // Распечатаем рецепт бургера - System.out.println(burger.getReceipt()); - } - +package praktikum; + +import java.util.List; + +public class Praktikum { + + public static void main(String[] args) { + // Инициализируем базу данных + Database database = new Database(); + + // Создадим новый бургер + Burger burger = new Burger(); + + // Считаем список доступных булок из базы данных + List buns = database.availableBuns(); + + // Считаем список доступных ингредиентов из базы данных + List ingredients = database.availableIngredients(); + + // Соберём бургер + burger.setBuns(buns.get(0)); + + burger.addIngredient(ingredients.get(1)); + burger.addIngredient(ingredients.get(4)); + burger.addIngredient(ingredients.get(3)); + burger.addIngredient(ingredients.get(5)); + + // Переместим слой с ингредиентом + burger.moveIngredient(2, 1); + + // Удалим ингредиент + burger.removeIngredient(3); + + // Распечатаем рецепт бургера + System.out.println(burger.getReceipt()); + } + } \ No newline at end of file diff --git a/src/test/java/praktikum/BunTest.java b/src/test/java/praktikum/BunTest.java new file mode 100644 index 0000000000..80a2a00d54 --- /dev/null +++ b/src/test/java/praktikum/BunTest.java @@ -0,0 +1,41 @@ +package praktikum; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; + +@RunWith(Parameterized.class) +public class BunTest { + + private final String name; + private final float price; + + public BunTest(String name, float price) { + this.name = name; + this.price = price; + } + + @Parameterized.Parameters + public static Object[][] getBunData() { + return new Object[][]{ + {"black bun", 100f}, + {"white bun", 200f} + }; + } + + @Test + public void getNameShouldReturnCorrectName() { + Bun bun = new Bun(name, price); + + assertEquals(name, bun.getName()); + } + + @Test + public void getPriceShouldReturnCorrectPrice() { + Bun bun = new Bun(name, price); + + assertEquals(price, bun.getPrice(), 0); + } +} \ No newline at end of file diff --git a/src/test/java/praktikum/BurgerTest.java b/src/test/java/praktikum/BurgerTest.java new file mode 100644 index 0000000000..f532828a47 --- /dev/null +++ b/src/test/java/praktikum/BurgerTest.java @@ -0,0 +1,117 @@ +package praktikum; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class BurgerTest { + + private Burger burger; + + @Mock + private Ingredient mockedIngredient; + + @Before + public void setUp() { + burger = new Burger(); + } + + @Test + public void setBunsShouldSetBun() { + Bun bun = new Bun("black bun", 100f); + burger.setBuns(bun); + assertSame(bun, burger.bun); + } + + @Test + public void addIngredientShouldAddIngredientToList() { + burger.addIngredient(mockedIngredient); + assertEquals(1, burger.ingredients.size()); + assertSame(mockedIngredient, burger.ingredients.get(0)); + } + + @Test + public void removeIngredientShouldRemoveIngredientFromList() { + Ingredient first = new Ingredient(IngredientType.SAUCE, "sauce", 50f); + Ingredient second = new Ingredient(IngredientType.FILLING, "meat", 100f); + + burger.addIngredient(first); + burger.addIngredient(second); + burger.removeIngredient(0); + + assertEquals(1, burger.ingredients.size()); + assertSame(second, burger.ingredients.get(0)); + } + + @Test + public void moveIngredientShouldMoveIngredientToNewIndex() { + Ingredient first = new Ingredient(IngredientType.SAUCE, "sauce", 50f); + Ingredient second = new Ingredient(IngredientType.FILLING, "meat", 100f); + + burger.addIngredient(first); + burger.addIngredient(second); + burger.moveIngredient(0, 1); + + assertSame(second, burger.ingredients.get(0)); + assertSame(first, burger.ingredients.get(1)); + } + + @Test + public void getPriceShouldReturnCorrectPriceWithMock() { + Bun bun = new Bun("bun", 100f); + burger.setBuns(bun); + burger.addIngredient(mockedIngredient); + + when(mockedIngredient.getPrice()).thenReturn(50f); + + assertEquals(250f, burger.getPrice(), 0); + } + + @Test + public void getPriceShouldReturnCorrectPriceWithoutIngredients() { + burger.setBuns(new Bun("bun", 100f)); + assertEquals(200f, burger.getPrice(), 0); + } + + @Test + public void getPriceShouldReturnCorrectPriceWithSeveralIngredients() { + burger.setBuns(new Bun("bun", 100f)); + burger.addIngredient(new Ingredient(IngredientType.SAUCE, "sauce", 50f)); + burger.addIngredient(new Ingredient(IngredientType.FILLING, "meat", 150f)); + + assertEquals(400f, burger.getPrice(), 0); + } + + @Test + public void getReceiptShouldReturnCorrectReceipt() { + Bun bun = new Bun("bun", 100f); + + burger.setBuns(bun); + burger.addIngredient(mockedIngredient); + + when(mockedIngredient.getType()).thenReturn(IngredientType.SAUCE); + when(mockedIngredient.getName()).thenReturn("sauce"); + when(mockedIngredient.getPrice()).thenReturn(50f); + + String expected = String.format( + "(==== %s ====)%n" + + "= %s %s =%n" + + "(==== %s ====)%n" + + "%nPrice: %f%n", + "bun", + "sauce", + "sauce", + "bun", + 250f + ); + + assertEquals(expected, burger.getReceipt()); + } +} \ No newline at end of file diff --git a/src/test/java/praktikum/IngredientTest.java b/src/test/java/praktikum/IngredientTest.java new file mode 100644 index 0000000000..44385b947a --- /dev/null +++ b/src/test/java/praktikum/IngredientTest.java @@ -0,0 +1,50 @@ +package praktikum; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; + +@RunWith(Parameterized.class) +public class IngredientTest { + + private final IngredientType type; + private final String name; + private final float price; + + public IngredientTest(IngredientType type, String name, float price) { + this.type = type; + this.name = name; + this.price = price; + } + + @Parameterized.Parameters + public static Object[][] getIngredientData() { + return new Object[][]{ + {IngredientType.SAUCE, "hot sauce", 100f}, + {IngredientType.FILLING, "cutlet", 300f} + }; + } + + @Test + public void getTypeShouldReturnCorrectType() { + Ingredient ingredient = new Ingredient(type, name, price); + + assertEquals(type, ingredient.getType()); + } + + @Test + public void getNameShouldReturnCorrectName() { + Ingredient ingredient = new Ingredient(type, name, price); + + assertEquals(name, ingredient.getName()); + } + + @Test + public void getPriceShouldReturnCorrectPrice() { + Ingredient ingredient = new Ingredient(type, name, price); + + assertEquals(price, ingredient.getPrice(), 0); + } +} \ No newline at end of file diff --git a/src/test/java/praktikum/IngredientTypeTest.java b/src/test/java/praktikum/IngredientTypeTest.java new file mode 100644 index 0000000000..c2b295a0ab --- /dev/null +++ b/src/test/java/praktikum/IngredientTypeTest.java @@ -0,0 +1,18 @@ +package praktikum; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class IngredientTypeTest { + + @Test + public void ingredientTypeShouldContainSauce() { + assertEquals("SAUCE", IngredientType.SAUCE.name()); + } + + @Test + public void ingredientTypeShouldContainFilling() { + assertEquals("FILLING", IngredientType.FILLING.name()); + } +} \ No newline at end of file