diff --git a/my-app.iml b/my-app.iml index f4fe990..b15298a 100644 --- a/my-app.iml +++ b/my-app.iml @@ -11,12 +11,7 @@ - - - - - - + diff --git a/pom.xml b/pom.xml index 18e4c80..919aaf5 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,11 @@ + + org.junit.jupiter + junit-jupiter-params + 5.0.0-M4 + org.postgresql postgresql diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 6994c90..5f86c00 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -18,7 +18,6 @@ public class Main { - public static void main(String[] args) { TemplateEngine templateEngine = new ThymeleafTemplateEngine(); @@ -32,36 +31,34 @@ public static void main(String[] args) { port(8888); // populate some data for the memory storage - //populateData(); - // Always add generic routes to the end get("/", productController::renderProducts, templateEngine); // Equivalent with above get("/index", (Request req, Response res) -> - productController.renderProducts(req, res), templateEngine); + productController.renderProducts(req, res), templateEngine); get("/cartview", (Request req, Response res) -> - templateEngine.render(cartController.renderCart(req, res)) + templateEngine.render(cartController.renderCart(req, res)) ); get("/category/:id", (Request req, Response res) -> - templateEngine.render(productController.renderProductsbyCategory(req, res)) + templateEngine.render(productController.renderProductsbyCategory(req, res)) ); get("/supplier/:id", (Request req, Response res) -> - templateEngine.render(productController.renderProductsbySupplier(req, res)) + templateEngine.render(productController.renderProductsbySupplier(req, res)) ); get("/addtocart/:id", (Request req, Response res) -> - cartController.addItemToCart(req, res) + cartController.addItemToCart(req, res) ); get("/login", (Request req, Response res) -> - templateEngine.render(loginController.renderLogin(req, res)) + templateEngine.render(loginController.renderLogin(req, res)) ); @@ -74,7 +71,7 @@ public static void main(String[] args) { // Add this line to your project to enable the debug screen enableDebugScreen(); } - +} // private static void populateData() { // ProductDao productDataStore = new ProductDaoJdbc(); @@ -120,4 +117,4 @@ public static void main(String[] args) { // User admin2 = new User("admin2", "admin2", 1); // userDataStore.add(admin2); // -} + diff --git a/src/main/java/com/codecool/shop/dao/UserDao.java b/src/main/java/com/codecool/shop/dao/UserDao.java index ca1f950..e06fdbd 100644 --- a/src/main/java/com/codecool/shop/dao/UserDao.java +++ b/src/main/java/com/codecool/shop/dao/UserDao.java @@ -7,6 +7,7 @@ public interface UserDao { void add(User user); User find(int id); + User find(String name); void remove(int id); List getAll(); diff --git a/src/main/java/com/codecool/shop/dao/implementation/UserDaoMem.java b/src/main/java/com/codecool/shop/dao/implementation/UserDaoMem.java index e661227..e333cbc 100644 --- a/src/main/java/com/codecool/shop/dao/implementation/UserDaoMem.java +++ b/src/main/java/com/codecool/shop/dao/implementation/UserDaoMem.java @@ -29,7 +29,7 @@ public void add(User user) { DATA.add(user); } - + @Override public User find(String name) { return DATA.stream().filter(t -> t.getName().equals(name)).findFirst().orElse(null); } diff --git a/src/main/java/com/codecool/shop/dao/jdbc/UserDaoJdbc.java b/src/main/java/com/codecool/shop/dao/jdbc/UserDaoJdbc.java index 5e8d1dc..dc4cbfb 100644 --- a/src/main/java/com/codecool/shop/dao/jdbc/UserDaoJdbc.java +++ b/src/main/java/com/codecool/shop/dao/jdbc/UserDaoJdbc.java @@ -30,6 +30,7 @@ public static UserDaoJdbc getInstance() { public void add(User user) { //get the highest ID in the user DB. //propably not needed as the primary key is incrementing itself. + /* String query = "SELECT id FROM users ORDER BY id DESC LIMIT 1"; try (Connection conn = connection.getConnection(); @@ -45,17 +46,23 @@ public void add(User user) { } catch (IOException e) { e.printStackTrace(); } - + */ //insert the new user into the DB. final String INSERT_QUERY = "INSERT INTO users (name, password, rank) VALUES (?,?,?);"; - + String[] columnsToReturn = {"id"}; try { - PreparedStatement pstmt = connection.getConnection().prepareStatement(INSERT_QUERY); + PreparedStatement pstmt = connection.getConnection().prepareStatement(INSERT_QUERY, columnsToReturn); pstmt.setString(1, user.getName()); pstmt.setString(2, user.getPassword()); pstmt.setInt(3, user.getRank()); pstmt.executeUpdate(); + + // to get id of created row + ResultSet generatedKeys = pstmt.getGeneratedKeys(); + generatedKeys.next(); + user.setId(generatedKeys.getInt("id")); + } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { @@ -75,6 +82,7 @@ public User find(int id) { User result = new User(resultSet.getString("name"), resultSet.getString("password"), resultSet.getInt("rank")); + result.setId(id); return result; } else { return null; @@ -88,6 +96,7 @@ public User find(int id) { return null; } + @Override public User find(String name) { String query = "SELECT * FROM users WHERE name ='" + name + "';"; try (Connection conn = connection.getConnection(); @@ -146,18 +155,21 @@ public List getAll() { try (Connection conn = connection.getConnection(); Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery(query)) { - if (resultSet.first()){ - resultSet.beforeFirst(); +// if (resultSet.first()){ + // resultSet.beforeFirst(); List result = new ArrayList<>(); - while (resultSet.next()){ - result.add(new User(resultSet.getString("name"), + while (resultSet.next()) { + User tempuser = new User(resultSet.getString("name"), resultSet.getString("password"), - resultSet.getInt("rank"))); - return result; + resultSet.getInt("rank")); + tempuser.setId(resultSet.getInt("id")); + result.add(tempuser); } - } else { - return null; - } + return result; + + // } else { + // return null; + // } } catch (SQLException e) { e.printStackTrace(); diff --git a/src/main/resources/connection.properties b/src/main/resources/connection.properties index 1e7357a..6d33c16 100644 --- a/src/main/resources/connection.properties +++ b/src/main/resources/connection.properties @@ -1,2 +1,4 @@ localhost:5432 codecoolshop +kroki +Loler01+ \ No newline at end of file diff --git a/test/com/codecool/shop/dao/UserDaoTest.java b/test/com/codecool/shop/dao/UserDaoTest.java new file mode 100644 index 0000000..3c6f032 --- /dev/null +++ b/test/com/codecool/shop/dao/UserDaoTest.java @@ -0,0 +1,73 @@ +package com.codecool.shop.dao; + +import com.codecool.shop.dao.implementation.UserDaoMem; +import com.codecool.shop.dao.jdbc.UserDaoJdbc; +import com.codecool.shop.model.ProductCategory; +import com.codecool.shop.model.User; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ObjectArrayArguments; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; + +class UserDaoTest { + + + static Stream arguments(){ + return Stream.of( + ObjectArrayArguments.create(UserDaoJdbc.getInstance()), + ObjectArrayArguments.create(UserDaoMem.getInstance()) + ); + } + + @ParameterizedTest + @MethodSource(names = { "arguments" }) + void testAddNewUser(UserDao userDataStore){ + User admin = new User("admin", "admin", 1); + admin.setId(1); + userDataStore.add(admin); + int tempsize = userDataStore.getAll().size(); + assertEquals(admin.toString(), userDataStore.getAll().get(tempsize-1).toString()); + } + + + @ParameterizedTest + @MethodSource(names = { "arguments" }) + public void testFindUserById(UserDao userDataStore){ + User user = new User("admin", "admin", 1); + user.setId(1); + assertEquals(user.toString(), userDataStore.find(1).toString()); + } + + @ParameterizedTest + @MethodSource(names = { "arguments" }) + public void testFindUserByName(UserDao userDataStore){ + User user = new User("user", "user", 2); + user.setId(2); + assertEquals(user.toString(), userDataStore.find("user").toString()); + } + + @ParameterizedTest + @MethodSource(names = { "arguments" }) + public void testRemoveUser(UserDao userDataStore){ + int firstsize = userDataStore.getAll().size(); + userDataStore.remove(firstsize - 1); + int secondsize = userDataStore.getAll().size(); + assertEquals(1, firstsize - secondsize); + } + + @ParameterizedTest + @MethodSource(names = { "arguments" }) + public void testGetAllUser(UserDao userDataStore){ + List user = new ArrayList<>(); + assertEquals(user, userDataStore.getAll()); + } +} \ No newline at end of file