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