diff --git a/.gitignore b/.gitignore index 40457b5..46041e6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +.idea/ # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml diff --git a/.idea/$PRODUCT_WORKSPACE_FILE$ b/.idea/$PRODUCT_WORKSPACE_FILE$ deleted file mode 100644 index 7d625f7..0000000 --- a/.idea/$PRODUCT_WORKSPACE_FILE$ +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - 1.8 - - - - - - - - 1.8 - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 7a4bf35..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 4b661a5..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 43c1af2..b36c574 100644 --- a/pom.xml +++ b/pom.xml @@ -21,5 +21,18 @@ - + + + org.junit.jupiter + junit-jupiter-engine + 5.4.2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.4.2 + test + + \ No newline at end of file diff --git a/src/main/java/App.java b/src/main/java/App.java new file mode 100644 index 0000000..3479178 --- /dev/null +++ b/src/main/java/App.java @@ -0,0 +1,112 @@ +import io.Console; +import models.Sneaker; +import services.SneakerService; + +public class App { + + private SneakerService sneakerService = new SneakerService(); + + public static void main(String... args) { + App application = new App(); + application.init(); + } + + public void init() { + Console.println("Welcome!!"); + Integer action = Console.getIntegerInput( + "1 create shoe\n" + + "2 read shoes\n" + + "3 update shoe\n" + + "4 delete shoe\n" + + "select action: "); + interpretUserAction(action); + + } + + public void interpretUserAction(Integer action) { + switch(action) { + case 1: // create + create("Shoe"); + Console.println("New Sneaker created with id %s", sneakerService.size()); + break; + case 2: // read + read("shoe"); + break; + case 3: // update + update(); + break; + case 4: // destroy + delete(); + break; + case 5: + System.exit(0); + break; + default: + init(); + } + init(); + } + + public void create(String product) { + String name = Console.getStringInput("%s name: ", product); + String brand = Console.getStringInput("%s brand: ", product); + String sport = Console.getStringInput("%s sport: ", product); + Double size = Console.getDoubleInput("%s size: ", product); + Integer quantity = Console.getIntegerInput("%s quantity: ", product); + Float price = Float.parseFloat(Console.getStringInput("%s price: ", product)); + + sneakerService.create(name, brand, sport, size, quantity, price); + + } + public void read(String product) { + Console.println(sneakerService.toString()); + } + + public void update() { + Integer id = Console.getIntegerInput("enter id of sneaker to update: "); + Sneaker toUpdate = sneakerService.findSneaker(id); + Integer action = Console.getIntegerInput("Update Sneaker:\n" + + "1 : Name\n2 : Brand\n3 : Sport\n" + + "4 : Size\n5 : Quantity\n6 : Price\n" + + "Select attribute to update: "); + toUpdate = dispatchUpdate(action, toUpdate); + sneakerService.update(id, toUpdate); + Console.println("Shoe %s has been updated", id); + } + + public Sneaker dispatchUpdate(Integer action, Sneaker sneaker) { + switch(action) { + case 1: + String name = Console.getStringInput("Change Name: "); + sneaker.setName(name); + break; + case 2: + String brand = Console.getStringInput("Change Brand: "); + sneaker.setBrand(brand); + break; + case 3: + String sport = Console.getStringInput("Change Sport: "); + sneaker.setSport(sport); + break; + case 4: + Double size = Console.getDoubleInput("Change Size: "); + sneaker.setSize(size); + break; + case 5: + Integer quantity = Console.getIntegerInput("Change Quantity: "); + sneaker.setQuantity(quantity); + break; + case 6: + Float price = Float.parseFloat(Console.getStringInput("Change Price: ")); + sneaker.setPrice(price); + break; + } + return sneaker; + } + + public void delete() { + Integer id = Console.getIntegerInput("Enter Id of Sneaker to delete: "); + if (sneakerService.delete(id)) Console.println("Sneaker %s successfully deleted", id); + else Console.println("Deletion failed"); + } +} diff --git a/src/main/java/io/Console.java b/src/main/java/io/Console.java new file mode 100644 index 0000000..9d642ed --- /dev/null +++ b/src/main/java/io/Console.java @@ -0,0 +1,48 @@ +package io; + +import java.util.Scanner; + +public class Console { + public static void print(String val, Object... args) { + System.out.print(String.format(val, args)); + } + + public static void println(String val, Object... args) { + print(val + "\n", args); + } + + public static String getStringInput(String prompt, Object... args) { + Scanner scanner = new Scanner(System.in); + print(prompt, args); + return scanner.nextLine(); + } + + public static Double getDoubleInput(String prompt, Object... args) { + String stringInput = getStringInput(prompt, args); + try { + Double doubleInput = Double.parseDouble(stringInput); + return doubleInput; + } catch (NumberFormatException nfe) { + println("[ %s ] is an invalid user input!", stringInput); + println("Try inputting a numeric value!"); + return getDoubleInput(prompt, args); + } + } + + public static Long getLongInput(String prompt, Object... args) { + String stringInput = getStringInput(prompt, args); + try { + Long longInput = Long.parseLong(stringInput); + return longInput; + } catch (NumberFormatException nfe) { + println("[ %s ] is an invalid user input!", stringInput); + println("Try inputting an integer value!"); + return getLongInput(prompt, args); + } + } + + public static Integer getIntegerInput(String prompt, Object... args) { + return getLongInput(prompt, args).intValue(); + } + +} diff --git a/src/main/java/models/Sneaker.java b/src/main/java/models/Sneaker.java new file mode 100644 index 0000000..80b71dc --- /dev/null +++ b/src/main/java/models/Sneaker.java @@ -0,0 +1,85 @@ +package models; + +public class Sneaker { + private Integer id; + private String name; + private String brand; + private String sport; + private Double size; + private Integer quantity; + private Float price; + + public Sneaker() {} + + public Sneaker(Integer id, String name, String brand, String sport, Double size, Integer quantity, Float price) { + this.id = id; + this.name = name; + this.brand = brand; + this.sport = sport; + this.size = size; + this.quantity = quantity; + this.price = price; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public String getSport() { + return sport; + } + + public void setSport(String sport) { + this.sport = sport; + } + + public Double getSize() { + return size; + } + + public void setSize(Double size) { + this.size = size; + } + + public Integer getQuantity() { + return quantity; + } + + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + public Float getPrice() { + return price; + } + + public void setPrice(Float price) { + this.price = price; + } + + public String toString() { + return String.format("\n%s %s %s %s %s %s %s", getId(), + getBrand(), getName(), getSport(), + getSize(), getQuantity(), getPrice()); + } +} \ No newline at end of file diff --git a/src/main/java/models/Whiskey.java b/src/main/java/models/Whiskey.java new file mode 100644 index 0000000..f988c26 --- /dev/null +++ b/src/main/java/models/Whiskey.java @@ -0,0 +1,54 @@ +package models; + +public class Whiskey { + private Integer id; + private String name; + private String brand; + private Integer quantity; + private Float price; + + public Whiskey() {} + + public Whiskey(Integer id, String name, String brand, Integer quantity, Float price) { + this.id = id; + this.name = name; + this.brand = brand; + this.quantity = quantity; + this.price = price; + } + + public Integer getId() { + return id; + } + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public String getBrand() { + return brand; + } + public void setBrand(String brand) { + this.brand = brand; + } + + public Integer getQuantity() { + return quantity; + } + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + public Float getPrice() { + return price; + } + public void setPrice(Float price) { + this.price = price; + } +} diff --git a/src/main/java/services/SneakerService.java b/src/main/java/services/SneakerService.java new file mode 100644 index 0000000..2c04542 --- /dev/null +++ b/src/main/java/services/SneakerService.java @@ -0,0 +1,68 @@ +package services; +import models.Sneaker; +import java.util.ArrayList; +import java.util.Arrays; + +public class SneakerService { + private static int nextId = 1; + + private ArrayList inventory = new ArrayList<>(); + + public Sneaker create(String name, String brand, String sport, Double size, Integer quantity, Float price) { + Sneaker createdSneaker = new Sneaker(nextId++, name, brand, sport, size, quantity, price); + inventory.add(createdSneaker); + return createdSneaker; + } + + public Integer size() { + return inventory.size(); + } + + //read + public Sneaker findSneaker(int id) { + // should take an int and return an object with that id, if exists + return inventory.get(id-1); + } + + //read all + public Sneaker[] findAll() { + // should return a basic array copy of the ArrayList + Integer len = inventory.size(); + Sneaker[] sneaks = new Sneaker[len]; + for (int i = 0; i < len; i++) { + sneaks[i] = inventory.get(i); + } + return sneaks; + } + + //delete + public Boolean delete(int id) { + // should remove the object with this id from the ArrayList if exits and return true. + // Otherwise return false + Boolean outcome = false; + if (id <= inventory.size()) { + inventory.remove(id-1); + outcome = true; + } + return outcome; + } + + public String toString() { + StringBuilder out = new StringBuilder(); + out.append("Sneaker Inventory:\n" + + "Id Brand Name Sport Size Qty Price"); + for (Sneaker sneaker : inventory) { + out.append(sneaker.toString()); + } + return out.toString(); + } + +// public void update(Integer id, String name, String brand, String sport, Double size, Integer quantity, Float price) { +// Sneaker updated = new Sneaker(id, name, brand, sport, size, quantity, price); +// inventory.set(id-1, updated); +// } + + public void update(Integer id, Sneaker updated) { + inventory.set(id-1, updated); + } +} \ No newline at end of file diff --git a/src/main/java/services/WhiskeyService.java b/src/main/java/services/WhiskeyService.java new file mode 100644 index 0000000..a5e5522 --- /dev/null +++ b/src/main/java/services/WhiskeyService.java @@ -0,0 +1,38 @@ +package services; + +import models.Whiskey; + +import java.util.ArrayList; + +public class WhiskeyService { + private static int nextId = 1; + private ArrayList inventory = new ArrayList<>(); + + public Whiskey create(String name, String brand, Integer quantity, Float price) { + Whiskey createdWhiskey = new Whiskey(nextId++, name, brand, quantity, price); + inventory.add(createdWhiskey); + return createdWhiskey; + } + + public Whiskey findWhiskey(int id) { + return inventory.get(id-1); + } + + public Whiskey[] findAll() { + Integer len = inventory.size(); + Whiskey[] whisks = new Whiskey[len]; + for (int i = 0; i < len; i++) { + whisks[i] = inventory.get(i); + } + return whisks; + } + + public Boolean delete(int id) { + Boolean outcome = false; + if (id <= inventory.size()) { + inventory.remove(id); + outcome = true; + } + return outcome; + } +} diff --git a/src/test/java/models/SneakerTest.java b/src/test/java/models/SneakerTest.java new file mode 100644 index 0000000..28dd6cb --- /dev/null +++ b/src/test/java/models/SneakerTest.java @@ -0,0 +1,101 @@ +package models; + +import org.junit.Assert; +import org.junit.Test; + +public class SneakerTest { + @Test + public void constructorTest() { +// (2) + Integer expectedId = 6; + String expectedName = "Stan Smith"; + String expectedBrand = "Adidas"; + String expectedSport = "Tennnis"; + Double expectedSize = 11.5; + Integer expectedQty = 10; + Float expectedPrice = 80.00f; + + // (3) + Sneaker testSneaker = new Sneaker(expectedId, expectedName, expectedBrand, expectedSport, expectedSize, expectedQty,expectedPrice); + + // (4) + Assert.assertEquals(expectedId, testSneaker.getId()); + Assert.assertEquals(expectedName, testSneaker.getName()); + Assert.assertEquals(expectedBrand, testSneaker.getBrand()); + Assert.assertEquals(expectedSport, testSneaker.getSport()); + Assert.assertEquals(expectedSize, testSneaker.getSize()); + Assert.assertEquals(expectedQty, testSneaker.getQuantity()); + Assert.assertEquals(expectedPrice, testSneaker.getPrice()); + } + + @Test + public void setIdTest() { + Integer expected = 78; + + Sneaker testSneaker = new Sneaker(); + testSneaker.setId(expected); + + Assert.assertEquals(expected, testSneaker.getId()); + } + + @Test + public void setNameTest() { + String expected = "Shoename"; + + Sneaker testSneaker = new Sneaker(); + testSneaker.setName(expected); + + Assert.assertEquals(expected, testSneaker.getName()); + } + + @Test + public void setBrandTest() { + String expected = "Nike"; + + Sneaker testSneaker = new Sneaker(); + testSneaker.setBrand(expected); + + Assert.assertEquals(expected, testSneaker.getBrand()); + } + + @Test + public void setSportTest() { + String expected = "Climbing"; + + Sneaker testSneaker = new Sneaker(); + testSneaker.setSport(expected); + + Assert.assertEquals(expected, testSneaker.getSport()); + } + + @Test + public void setSizeTest() { + Double expected = 12.5; + + Sneaker testSneaker = new Sneaker(); + testSneaker.setSize(expected); + + Assert.assertEquals(expected, testSneaker.getSize()); + } + + @Test + public void setQuantityTest() { + Integer expected = 1300; + + Sneaker testSneaker = new Sneaker(); + testSneaker.setQuantity(expected); + + Assert.assertEquals(expected, testSneaker.getQuantity()); + } + + @Test + public void setPriceTest() { + Float expected = 98.78f; + + Sneaker testSneaker = new Sneaker(); + testSneaker.setPrice(expected); + + Assert.assertEquals(expected, testSneaker.getPrice()); + + } +} \ No newline at end of file diff --git a/src/test/java/models/WhiskeyTest.java b/src/test/java/models/WhiskeyTest.java new file mode 100644 index 0000000..2a83610 --- /dev/null +++ b/src/test/java/models/WhiskeyTest.java @@ -0,0 +1,77 @@ +package models; + +import org.junit.Assert; +import org.junit.Test; + +public class WhiskeyTest { + @Test + public void constructorTest() { +// (2) + Integer expectedId = 6; + String expectedName = "Delishkey"; + String expectedBrand = "FancyWhiskey"; + Integer expectedQty = 10; + Float expectedPrice = 80.00f; + + // (3) + Whiskey testWhiskey = new Whiskey(expectedId, expectedName, expectedBrand, expectedQty,expectedPrice); + + // (4) + Assert.assertEquals(expectedId, testWhiskey.getId()); + Assert.assertEquals(expectedName, testWhiskey.getName()); + Assert.assertEquals(expectedBrand, testWhiskey.getBrand()); + Assert.assertEquals(expectedQty, testWhiskey.getQuantity()); + Assert.assertEquals(expectedPrice, testWhiskey.getPrice()); + } + + @Test + public void setIdTest() { + Integer expected = 78; + + Whiskey testWhiskey = new Whiskey(); + testWhiskey.setId(expected); + + Assert.assertEquals(expected, testWhiskey.getId()); + } + + @Test + public void setNameTest() { + String expected = "whiskeyname"; + + Whiskey testWhiskey = new Whiskey(); + testWhiskey.setName(expected); + + Assert.assertEquals(expected, testWhiskey.getName()); + } + + @Test + public void setBrandTest() { + String expected = "whiskeybrand"; + + Whiskey testWhiskey = new Whiskey(); + testWhiskey.setBrand(expected); + + Assert.assertEquals(expected, testWhiskey.getBrand()); + } + + @Test + public void setQuantityTest() { + Integer expected = 1300; + + Whiskey testWhiskey = new Whiskey(); + testWhiskey.setQuantity(expected); + + Assert.assertEquals(expected, testWhiskey.getQuantity()); + } + + @Test + public void setPriceTest() { + Float expected = 98.78f; + + Whiskey testWhiskey = new Whiskey(); + testWhiskey.setPrice(expected); + + Assert.assertEquals(expected, testWhiskey.getPrice()); + + } +} \ No newline at end of file diff --git a/src/test/java/services/SneakerServiceTest.java b/src/test/java/services/SneakerServiceTest.java new file mode 100644 index 0000000..08cc38e --- /dev/null +++ b/src/test/java/services/SneakerServiceTest.java @@ -0,0 +1,92 @@ +package services; + +import models.Sneaker; + +import org.junit.Test; +import org.junit.Assert; + +public class SneakerServiceTest { + @Test + public void createTest(){ + + // (1) + String expectedName = "Stan Smith"; + String expectedBrand = "Adidas"; + String expectedSport = "Tennis"; + Double expectedSize = 10.5; + Integer expectedQty = 10; + Float expectedPrice = 80.00f; + + // (2) + SneakerService sneakerService = new SneakerService(); + Sneaker testSneaker = sneakerService.create(expectedName, expectedBrand, + expectedSport, expectedSize, expectedQty, expectedPrice); + + // (3) + Integer actualId = testSneaker.getId(); + String actualName = testSneaker.getName(); + String actualBrand = testSneaker.getBrand(); + String actualSport = testSneaker.getSport(); + Double actualSize = testSneaker.getSize(); + Integer actualQty = testSneaker.getQuantity(); + Float actualPrice = testSneaker.getPrice(); + + // (4) + Assert.assertEquals(Integer.class.getName(), new Integer(actualId).getClass().getName()); + Assert.assertEquals(expectedName, actualName); + Assert.assertEquals(expectedBrand, actualBrand); + Assert.assertEquals(expectedSport, actualSport); + Assert.assertEquals(expectedSize, actualSize); + Assert.assertEquals(expectedQty, actualQty); + Assert.assertEquals(expectedPrice, actualPrice); + + } + + @Test + public void findSneakerTest() { + SneakerService sneakerService = new SneakerService(); + for (int i = 0; i < 5; i++) { + sneakerService.create("name"+i, "brand"+i, "sport"+i, 1.1, 34, 45.44f); + } + Sneaker actual = sneakerService.findSneaker(4); + Sneaker expected = new Sneaker(4, "name3", "brand3", "sport3", 1.1, 34, 45.44f); +// Assert.assertEquals(expected.getId(), actual.getId()); + Assert.assertEquals(expected.getName(), actual.getName()); + Assert.assertEquals(expected.getBrand(), actual.getBrand()); + Assert.assertEquals(expected.getQuantity(), actual.getQuantity()); + Assert.assertEquals(expected.getPrice(), actual.getPrice()); + } + + @Test + public void findAllTest() { + Sneaker[] expected = new Sneaker[5]; + SneakerService sneakerService = new SneakerService(); + for (int i = 0; i < 5; i++) { + expected[i] = sneakerService.create("name"+i, "brand"+i, "sport"+i, 1.1, 34, 45.44f); + } + Sneaker[] actual = sneakerService.findAll(); + Assert.assertEquals(expected, actual); + } + + @Test + public void deleteTest1() { + Sneaker[] expected = new Sneaker[5]; + SneakerService sneakerService = new SneakerService(); + for (int i = 0; i < 5; i++) { + expected[i] = sneakerService.create("name"+i, "brand"+i, "sport"+i, 1.1, 34, 45.44f); + } + Boolean actual = sneakerService.delete(4); + Assert.assertTrue(actual); + } + @Test + public void deleteTest2() { + Sneaker[] expected = new Sneaker[5]; + SneakerService sneakerService = new SneakerService(); + for (int i = 0; i < 5; i++) { + expected[i] = sneakerService.create("name"+i, "brand"+i, "sport"+i, 1.1, 34, 45.44f); + } + sneakerService.delete(4); + Sneaker[] actual = sneakerService.findAll(); + Assert.assertNotEquals(expected, actual); + } +} \ No newline at end of file diff --git a/src/test/java/services/WhiskeyServiceTest.java b/src/test/java/services/WhiskeyServiceTest.java new file mode 100644 index 0000000..6545f6a --- /dev/null +++ b/src/test/java/services/WhiskeyServiceTest.java @@ -0,0 +1,73 @@ +package services; + +import models.Whiskey; +import org.junit.Assert; +import org.junit.Test; + +public class WhiskeyServiceTest { + @Test + public void createTest(){ + + String expectedName = "Delishkey"; + String expectedBrand = "FancyWhiskey"; + Integer expectedQty = 10; + Float expectedPrice = 80.00f; + + // (3) + WhiskeyService whiskeyService = new WhiskeyService(); + Whiskey testWhiskey = whiskeyService.create(expectedName, expectedBrand, expectedQty, expectedPrice); + // (4) + Assert.assertEquals(expectedName, testWhiskey.getName()); + Assert.assertEquals(expectedBrand, testWhiskey.getBrand()); + Assert.assertEquals(expectedQty, testWhiskey.getQuantity()); + Assert.assertEquals(expectedPrice, testWhiskey.getPrice()); + } + + @Test + public void findWhiskeyTest() { + WhiskeyService whiskeyService = new WhiskeyService(); + for (int i = 0; i < 5; i++) { + whiskeyService.create("name"+i, "brand"+i, 34, 45.44f); + } + Whiskey actual = whiskeyService.findWhiskey(4); + Whiskey expected = new Whiskey(4, "name3", "brand3",34, 45.44f); +// Assert.assertEquals(expected.getId(), actual.getId()); + Assert.assertEquals(expected.getName(), actual.getName()); + Assert.assertEquals(expected.getBrand(), actual.getBrand()); + Assert.assertEquals(expected.getQuantity(), actual.getQuantity()); + Assert.assertEquals(expected.getPrice(), actual.getPrice()); + } + + @Test + public void findAllTest() { + Whiskey[] expected = new Whiskey[5]; + WhiskeyService whiskeyService = new WhiskeyService(); + for (int i = 0; i < 5; i++) { + expected[i] = whiskeyService.create("name"+i, "brand"+i, 34, 45.44f); + } + Whiskey[] actual = whiskeyService.findAll(); + Assert.assertEquals(expected, actual); + } + + @Test + public void deleteTest1() { + Whiskey[] expected = new Whiskey[5]; + WhiskeyService whiskeyService = new WhiskeyService(); + for (int i = 0; i < 5; i++) { + expected[i] = whiskeyService.create("name"+i, "brand"+i, 34, 45.44f); + } + Boolean actual = whiskeyService.delete(4); + Assert.assertTrue(actual); + } + @Test + public void deleteTest2() { + Whiskey[] expected = new Whiskey[5]; + WhiskeyService whiskeyService = new WhiskeyService(); + for (int i = 0; i < 5; i++) { + expected[i] = whiskeyService.create("name"+i, "brand"+i, 34, 45.44f); + } + whiskeyService.delete(4); + Whiskey[] actual = whiskeyService.findAll(); + Assert.assertNotEquals(expected, actual); + } +}