aboutsummaryrefslogtreecommitdiff
path: root/ufund-api/src
diff options
context:
space:
mode:
authorbenal01 <bja4245@rit.edu>2025-04-01 09:34:36 -0400
committerbenal01 <bja4245@rit.edu>2025-04-01 09:34:36 -0400
commit7ed26c5ee7171a502f6f8527fc55de2bb77eab3b (patch)
tree2046e58c146097aac21c9e352771420c31df6589 /ufund-api/src
parentef46ddd082bb91d0262363536d46fe3eb4da47be (diff)
parentd8330f1ac85b26d08ca4df5ce3875078d7b4f47f (diff)
downloadJellySolutions-7ed26c5ee7171a502f6f8527fc55de2bb77eab3b.tar.gz
JellySolutions-7ed26c5ee7171a502f6f8527fc55de2bb77eab3b.tar.bz2
JellySolutions-7ed26c5ee7171a502f6f8527fc55de2bb77eab3b.zip
Merge branch 'main' of https://github.com/RIT-SWEN-261-02/team-project-2245-swen-261-02-2b-jellysolutions
Diffstat (limited to 'ufund-api/src')
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/controller/AuthController.java18
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/controller/CupboardController.java143
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java68
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/model/Need.java34
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/model/User.java46
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/model/UserAuth.java7
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/CupboardFileDAO.java31
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserAuthFIleDAO.java16
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java22
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/service/AuthService.java58
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java35
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java11
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/controller/AuthControllerTest.java7
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/controller/CupboardControllerTest.java323
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/controller/UserControllerTest.java42
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/model/NeedTest.java63
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/model/UserTest.java11
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/CupboardFileDAOTest.java76
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserAuthFileDAOTest.java18
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserFileDAOTest.java18
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/service/AuthServiceTest.java37
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/service/CupboardServiceTest.java124
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/service/UserServiceTest.java13
23 files changed, 867 insertions, 354 deletions
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/AuthController.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/AuthController.java
index b46d4ee..82b2c67 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/AuthController.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/AuthController.java
@@ -2,6 +2,8 @@ package com.ufund.api.ufundapi.controller;
import java.io.IOException;
import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -17,6 +19,7 @@ import com.ufund.api.ufundapi.service.AuthService;
@RestController
@RequestMapping("auth")
public class AuthController {
+ private static final Logger LOG = Logger.getLogger(AuthController.class.getName());
private final AuthService authService;
public AuthController(AuthService authService) {
@@ -32,15 +35,18 @@ public class AuthController {
*/
@PostMapping("")
public ResponseEntity<String> login(@RequestBody Map<String, String> params) {
+ LOG.log(Level.INFO, "POST /auth body={0}", params);
String username = params.get("username");
String password = params.get("password");
try {
String key = authService.login(username, password);
return new ResponseEntity<>(key, HttpStatus.OK);
- } catch (IllegalAccessException e) {
- return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
+ } catch (IllegalAccessException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
} catch (IOException ex) {
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -52,11 +58,13 @@ public class AuthController {
*/
@DeleteMapping("")
public ResponseEntity<Object> logout(@RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO, "DELETE /auth key={0}", key);
try {
authService.logout(key);
return new ResponseEntity<>(HttpStatus.OK);
- } catch (IOException e) {
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ } catch (IOException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/CupboardController.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/CupboardController.java
index 36ae341..12fb0a9 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/CupboardController.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/CupboardController.java
@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@@ -20,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.ufund.api.ufundapi.DuplicateKeyException;
import com.ufund.api.ufundapi.model.Need;
import com.ufund.api.ufundapi.model.Need.GoalType;
+import com.ufund.api.ufundapi.service.AuthService;
import com.ufund.api.ufundapi.service.CupboardService;
@RestController
@@ -27,14 +29,16 @@ import com.ufund.api.ufundapi.service.CupboardService;
public class CupboardController {
private static final Logger LOG = Logger.getLogger(CupboardController.class.getName());
private final CupboardService cupboardService;
+ private final AuthService authService;
/**
* Create a cupboard controller to receive REST signals
*
* @param cupboardService The Data Access Object
*/
- public CupboardController(CupboardService cupboardService) {
+ public CupboardController(CupboardService cupboardService, AuthService authService) {
this.cupboardService = cupboardService;
+ this.authService = authService;
}
/**
@@ -47,21 +51,33 @@ public class CupboardController {
* INTERNAL_SERVER_ERROR otherwise
*/
@PostMapping("")
- public ResponseEntity<Need> createNeed(@RequestBody Map<String, Object> params) {
- System.out.println(params);
+ public ResponseEntity<Object> createNeed(@RequestBody Map<String, Object> params, @RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO, "POST /cupboard body={0}", params);
+
String name = (String) params.get("name");
- double maxGoal = (double) params.get("maxGoal");
+ String image = (String) params.get("image");
+ String location = (String) params.get("location");
+ double maxGoal = ((Number) params.get("maxGoal")).doubleValue();
+ boolean urgent = (Boolean) params.get("urgent");
+ String description = (String) params.get("description");
Need.GoalType goalType = GoalType.valueOf((String) params.get("type"));
try {
- Need need = cupboardService.createNeed(name, maxGoal, goalType);
+ authService.keyHasAccessToCupboard(key);
+ Need need = cupboardService.createNeed(name, image, location, maxGoal, goalType, urgent, description);
return new ResponseEntity<>(need, HttpStatus.OK);
} catch (DuplicateKeyException ex) {
- return new ResponseEntity<>(HttpStatus.CONFLICT);
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.CONFLICT);
} catch (IllegalArgumentException ex) {
- return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
+ } catch (IllegalAccessException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
} catch (IOException ex) {
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -74,39 +90,39 @@ public class CupboardController {
* ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise
*/
@GetMapping("")
- public ResponseEntity<Need[]> getNeeds() {
- LOG.info("GET /needs");
+ public ResponseEntity<Object> getNeeds() {
+ LOG.info("GET /cupboard");
try {
Need[] needs = cupboardService.getNeeds();
return new ResponseEntity<>(needs, HttpStatus.OK);
- } catch (IOException e) {
- LOG.log(Level.SEVERE, e.getLocalizedMessage());
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
/**
- * Responds to the GET request for all {@linkplain Need need} whose name contains
- * the text in name
- *
- * @param name The name parameter which contains the text used to find the {@link Need need}
- *
- * @return ResponseEntity with array of {@link Need need} objects (may be empty) and
- * HTTP status of OK<br>
- * ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise
- * <p>
- */
+ * Responds to the GET request for all {@linkplain Need need} whose name contains
+ * the text in name
+ *
+ * @param name The name parameter which contains the text used to find the {@link Need need}
+ *
+ * @return ResponseEntity with array of {@link Need need} objects (may be empty) and
+ * HTTP status of OK<br>
+ * ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise
+ * <p>
+ */
@GetMapping("/")
- public ResponseEntity<Need[]> searchNeeds(@RequestParam String name) {
- LOG.info("GET /need/?name="+name);
+ public ResponseEntity<Object> searchNeeds(@RequestParam String name) {
+ LOG.info("GET /cupboard/?name="+name);
try {
Need[] needs = cupboardService.searchNeeds(name);
return new ResponseEntity<>(needs, HttpStatus.OK);
- } catch (IOException e) {
- LOG.log(Level.SEVERE,e.getLocalizedMessage());
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE,ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -119,8 +135,8 @@ public class CupboardController {
* ResponseEntity with HTTP status of NOT_FOUND if not found<br>
*/
@GetMapping("/{id}")
- public ResponseEntity<Need> getNeed(@PathVariable int id) {
- LOG.log(Level.INFO, "GET /need/{0}", id);
+ public ResponseEntity<Object> getNeed(@PathVariable int id) {
+ LOG.log(Level.INFO, "GET /cupboard/{0}", id);
try {
Need need = cupboardService.getNeed(id);
@@ -129,9 +145,9 @@ public class CupboardController {
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
- } catch (IOException e) {
- LOG.log(Level.SEVERE, e.getLocalizedMessage());
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -143,9 +159,10 @@ public class CupboardController {
* @return OK response and the need if it was successful, or INTERNAL_SERVER_ERROR if there was an issue
*/
@PutMapping("/{id}")
- public ResponseEntity<Need> updateNeed(@RequestBody Need need, @PathVariable int id) {
- LOG.log(Level.INFO, "Updating need: " + need);
+ public ResponseEntity<Object> updateNeed(@RequestBody Need need, @PathVariable int id, @RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO, "PUT /cupboard/{0} body={1}", of(id, need));
try {
+ authService.keyHasAccessToCupboard(key);
Need updatedNeed = cupboardService.updateNeed(need, id);
if (updatedNeed != null) {
return new ResponseEntity<>(need, HttpStatus.OK);
@@ -153,11 +170,41 @@ public class CupboardController {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
} catch (IllegalArgumentException ex) {
- ex.printStackTrace();
- return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
+ } catch (IllegalAccessException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ /**
+ * Checks out a need by checkoutAmount
+ *
+ * @param data JSON object with parameters needID and amount
+ * @param key Key used to authenticate user
+ * @return OK if successful, other statuses if failure
+ */
+ @PutMapping("/checkout")
+ public ResponseEntity<Object> checkoutNeeds(@RequestBody Map<String, Integer> data, @RequestHeader("jelly-api-key") String key) {
+ int needID = data.get("needID");
+ int checkoutAmount = data.get("amount");
+ LOG.log(Level.INFO, "PUT /need/checkout body={0}", data);
+ try {
+ cupboardService.checkoutNeed(needID, checkoutAmount, key);
+ return new ResponseEntity<>(HttpStatus.OK);
+ } catch (IllegalArgumentException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
+ } catch (IllegalAccessException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
} catch (IOException ex) {
- ex.printStackTrace();
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -168,17 +215,27 @@ public class CupboardController {
* @return OK if the need was deleted, NOT_FOUND if the need was not found, or INTERNAL_SERVER_ERROR if an error occurred
*/
@DeleteMapping("/{id}")
- public ResponseEntity<Need> deleteNeed(@PathVariable int id) {
+ public ResponseEntity<Object> deleteNeed(@PathVariable int id, @RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO, "DELETE /cupboard/{0}", id);
try {
+ authService.keyHasAccessToCupboard(key);
Need need = cupboardService.getNeed(id);
if (cupboardService.deleteNeed(id)) {
return new ResponseEntity<>(need, HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
- }
- } catch (IOException e) {
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ } catch (IllegalAccessException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
+ private Object[] of(Object ...params) {
+ return params;
+ }
+
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java
index dfaad3a..a34e891 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java
@@ -1,7 +1,6 @@
package com.ufund.api.ufundapi.controller;
import java.io.IOException;
-import java.security.InvalidParameterException;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -42,7 +41,8 @@ public class UserController {
* otherwise
*/
@PostMapping("")
- public ResponseEntity<User> createUser(@RequestBody Map<String, String> params) {
+ public ResponseEntity<Object> createUser(@RequestBody Map<String, String> params) {
+ LOG.log(Level.INFO, "POST /users body={0}", params);
String username = params.get("username");
String password = params.get("password");
@@ -54,9 +54,11 @@ public class UserController {
return new ResponseEntity<>(HttpStatus.CONFLICT);
}
} catch (DuplicateKeyException ex) {
- return new ResponseEntity<>(HttpStatus.CONFLICT);
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.CONFLICT);
} catch (IOException ex) {
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -71,11 +73,11 @@ public class UserController {
* ResponseEntity with HTTP status of INTERNAL_SERVER_ERROR otherwise
*/
@GetMapping("/{username}")
- public ResponseEntity<User> getUser(@PathVariable String username, @RequestHeader("jelly-api-key") String key) {
- LOG.log(Level.INFO, "GET /user/{0}", username);
+ public ResponseEntity<Object> getUser(@PathVariable String username, @RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO, "GET /user/{0} key={1}", of(username, key));
try {
- authService.authenticate(username, key);
+ authService.keyHasAccessToUser(username, key);
User user = userService.getUser(username);
if (user != null) {
return new ResponseEntity<>(user.withoutPasswordHash(), HttpStatus.OK);
@@ -83,10 +85,11 @@ public class UserController {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
} catch (IllegalAccessException ex) {
- return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
- } catch (IOException e) {
- LOG.log(Level.SEVERE, e.getLocalizedMessage());
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@@ -101,24 +104,26 @@ public class UserController {
* INTERNAL_SERVER_ERROR if there was an issue
*/
@PutMapping("/{username}")
- public ResponseEntity<User> updateUser(@RequestBody User user, @PathVariable String username, @RequestHeader("jelly-api-key") String key) {
- LOG.log(Level.INFO,"PUT: " + user + " " + username + " " + key.toString());
+ public ResponseEntity<Object> updateUser(@RequestBody User user, @PathVariable String username, @RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO,"PUT /users/{0} body={1} key={2}", of(username, user, key));
try {
- //authService.authenticate(username, key);
+ authService.keyHasAccessToUser(username, key);
user = userService.updateUser(user, username);
if (user != null) {
return new ResponseEntity<>(user, HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
- } catch (InvalidParameterException ex) {
- return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
- } catch (IOException e) {
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
- }
- // catch (IllegalAccessException e) {
- // return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
- // }
+ } catch (IllegalArgumentException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
+ } catch (IllegalAccessException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+ }
}
/**
@@ -130,20 +135,27 @@ public class UserController {
* INTERNAL_SERVER_ERROR if an error occurred
*/
@DeleteMapping("/{username}")
- public ResponseEntity<Boolean> deleteUser(@PathVariable String username, @RequestHeader("jelly-api-key") String key) {
+ public ResponseEntity<Object> deleteUser(@PathVariable String username, @RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO, "DELETE /users/{0} id={1}", of(username, key));
try {
- authService.authenticate(username, key);
+ authService.keyHasAccessToUser(username, key);
if (userService.deleteUser(username)) {
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
- } catch (IOException e) {
- return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
- } catch (IllegalAccessException e) {
- return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
+ } catch (IllegalAccessException ex) {
+ LOG.log(Level.WARNING, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.UNAUTHORIZED);
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, ex.getLocalizedMessage());
+ return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
+ private Object[] of(Object ...params) {
+ return params;
+ }
+
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/model/Need.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/model/Need.java
index c0e9214..9b6170b 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/model/Need.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/model/Need.java
@@ -10,38 +10,57 @@ public class Need {
}
@JsonProperty("name") private String name;
+ @JsonProperty("image") private String image;
+ @JsonProperty("location") private String location;
@JsonProperty("id") private int id;
@JsonProperty("filterAttributes") private String[] filterAttributes;
@JsonProperty("type") final private GoalType type;
@JsonProperty("maxGoal") private double maxGoal;
+ @JsonProperty("urgent") private boolean urgent;
@JsonProperty("current") private double current;
+ @JsonProperty("description") private String description;
/**
- * Create a new need
+ * Create a new need, used by the controller
*
* @param name The name of the need
+ * @param location The physical location of the need
* @param id The unique ID of the need
* @param maxGoal The maximum goal for this need
* @param type The type of need (monetary, physical)
+ * @param urgent The urgency of the need
+ * @param description The description of the need
*/
- public Need(@JsonProperty("name") String name, @JsonProperty("id") int id, @JsonProperty("maxGoal") double maxGoal, GoalType type) {
+ public Need(@JsonProperty("name") String name, @JsonProperty("image") String image, @JsonProperty("location") String location, @JsonProperty("id") int id, @JsonProperty("maxGoal") double maxGoal, @JsonProperty("type") GoalType type, @JsonProperty("urgent") boolean urgent, @JsonProperty("Description") String description) {
this.id = id;
+ this.image = image;
+ this.location = location;
this.name = name;
this.maxGoal = maxGoal;
this.type = type;
+ this.urgent = urgent;
+ this.description = description;
}
/**
* Create a new need
*
* @param name The name of the need
+ * @param image The image representation of the need
+ * @param location The location of the need
* @param maxGoal The maximum goal for this need
* @param type The type of need (monetary, physical)
+ * @param urgent The urgency of the need
+ * @param description The description of the need
*/
- public Need(String name, GoalType type, double maxGoal) {
+ public Need(String name, String image, String location, double maxGoal, GoalType type, boolean urgent, String description) {
this.name = name;
+ this.image = image;
+ this.location = location;
this.type = type;
this.maxGoal = maxGoal;
+ this.urgent = urgent;
+ this.description = description;
}
/**
@@ -51,11 +70,15 @@ public class Need {
*/
public Need(Need other) {
this.name = other.name;
+ this.image = other.image;
+ this.location = other.location;
this.id = other.id;
this.filterAttributes = other.filterAttributes;
this.type = other.type;
this.maxGoal = other.maxGoal;
this.current = other.current;
+ this.urgent = other.urgent;
+ this.description = other.description;
}
public String getName() {
@@ -82,10 +105,15 @@ public class Need {
return current;
}
+
public void setCurrent(double current) {
this.current = current;
}
+ public void incrementCurrent(double incrementAmount) {
+ this.current += incrementAmount;
+ }
+
public void setFilterAttributes(String[] filterAttributes) {
this.filterAttributes = filterAttributes;
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/model/User.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/model/User.java
index 6de1a8a..58b62df 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/model/User.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/model/User.java
@@ -12,18 +12,23 @@ public class User {
MANAGER
}
- @JsonProperty("username") private final String username;
- @JsonProperty("passwordHash") private int passwordHash;
- @JsonProperty("basket") private final List<Integer> basket;
- @JsonProperty("type") private final UserType type;
+ @JsonProperty("username")
+ private final String username;
+ @JsonProperty("passwordHash")
+ private int passwordHash;
+ @JsonProperty("basket")
+ private final List<Integer> basket;
+ @JsonProperty("type")
+ private final UserType type;
/**
* Create a new user
*
- * @param username The name of the user
- * @param basket A basket to copy from
+ * @param username The name of the user
+ * @param basket A basket to copy from
*/
- public User(@JsonProperty("username") String username, @JsonProperty("passwordHash") int passwordHash, @JsonProperty("basket") List<Integer> basket, @JsonProperty("type") UserType userType) {
+ public User(@JsonProperty("username") String username, @JsonProperty("passwordHash") int passwordHash,
+ @JsonProperty("basket") List<Integer> basket, @JsonProperty("type") UserType userType) {
this.username = username;
this.basket = basket;
this.passwordHash = passwordHash;
@@ -35,30 +40,46 @@ public class User {
username,
password.hashCode(),
new ArrayList<>(),
- UserType.HELPER
- );
+ UserType.HELPER);
}
public String getUsername() {
return username;
}
+ /**
+ * Verifies if the provided password's hash is the same as the user's actual
+ * hash
+ *
+ * @param password The password to check if valid
+ * @return True or false depending on if it's equal
+ */
public boolean verifyPassword(String password) {
return password.hashCode() == passwordHash;
}
+ /**
+ * Adds a need's ID to a user's basket
+ *
+ * @param need The need to add
+ */
public void addToBasket(Need need) {
basket.add(need.getId());
}
- public Integer[] getNeeds() {
+ public Integer[] getBasket() {
return basket.toArray(Integer[]::new);
}
- public boolean removeBasketNeed(Integer needID) {
- return basket.remove(needID);
+ public void removeBasketNeed(Integer needID) {
+ basket.remove(needID);
}
+ /**
+ * Returns a user without a password hash for security purposes
+ *
+ * @return new User with empty password hash
+ */
public User withoutPasswordHash() {
return new User(this.username, 0, this.basket, this.type);
}
@@ -71,6 +92,7 @@ public class User {
this.passwordHash = other.passwordHash;
}
+ @Override
public String toString() {
return this.username + "; basket: " + this.basket + "; type:" + this.type + "; hash: " + this.passwordHash;
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/model/UserAuth.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/model/UserAuth.java
index 1c11a28..78dccec 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/model/UserAuth.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/model/UserAuth.java
@@ -1,10 +1,10 @@
package com.ufund.api.ufundapi.model;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
import java.time.LocalDateTime;
import java.util.UUID;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public class UserAuth {
@JsonProperty("key") String key;
@JsonProperty("username") String username;
@@ -12,12 +12,13 @@ public class UserAuth {
public UserAuth(@JsonProperty("key") String key, @JsonProperty("username") String username, @JsonProperty("expiration") LocalDateTime expiration) {
this.key = key;
- this.expiration = expiration;
this.username = username;
+ this.expiration = expiration;
}
/**
* Generate a new user authentication profile
+ *
* @param username the username the key will belong to
* @return The new user authentication profile
*/
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/CupboardFileDAO.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/CupboardFileDAO.java
index 521acae..7efda83 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/CupboardFileDAO.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/CupboardFileDAO.java
@@ -1,15 +1,16 @@
package com.ufund.api.ufundapi.persistence;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ufund.api.ufundapi.model.Need;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ufund.api.ufundapi.model.Need;
+
@Component
public class CupboardFileDAO implements CupboardDAO {
@@ -52,31 +53,20 @@ public class CupboardFileDAO implements CupboardDAO {
}
/**
- * Return an array of the needs
- *
- * @return An array of all the needs
- */
- private Need[] getNeedsArray() {
- return needs.values().toArray(Need[]::new);
- }
-
- /**
* Saves the needs to json
*
- * @return True if the save was successful, false otherwise
* @throws IOException If there was an IO issue saving the file
*/
- private boolean save() throws IOException {
- Need[] needArray = getNeedsArray();
+ private void save() throws IOException {
+ Need[] needArray = needs.values().toArray(Need[]::new);
objectMapper.writeValue(new File(filename), needArray);
- return true;
}
@Override
public Need[] getNeeds() {
synchronized (needs) {
- return getNeedsArray();
+ return needs.values().toArray(Need[]::new);
}
}
@@ -117,7 +107,8 @@ public class CupboardFileDAO implements CupboardDAO {
synchronized (needs) {
if (needs.containsKey(id)) {
needs.remove(id);
- return save();
+ save();
+ return true;
} else {
return false;
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserAuthFIleDAO.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserAuthFIleDAO.java
index 1fc1e92..24a426b 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserAuthFIleDAO.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserAuthFIleDAO.java
@@ -1,15 +1,17 @@
package com.ufund.api.ufundapi.persistence;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ufund.api.ufundapi.model.UserAuth;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
import java.io.File;
import java.io.IOException;
+import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ufund.api.ufundapi.model.UserAuth;
+
@Component
public class UserAuthFIleDAO implements UserAuthDAO {
@@ -35,7 +37,9 @@ public class UserAuthFIleDAO implements UserAuthDAO {
UserAuth[] userAuthKeysArray = objectMapper.readValue(new File(filename), UserAuth[].class);
for (UserAuth userAuth : userAuthKeysArray) {
- userAuthMap.put(userAuth.getKey(), userAuth);
+ if (userAuth.getExpiration().isAfter(LocalDateTime.now())) {
+ userAuthMap.put(userAuth.getKey(), userAuth);
+ }
}
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java
index 6e900aa..ec94da8 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/persistence/UserFileDAO.java
@@ -2,9 +2,9 @@ package com.ufund.api.ufundapi.persistence;
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@@ -44,12 +44,10 @@ public class UserFileDAO implements UserDAO {
/**
* Saves the needs to json
*
- * @return True if the save was successful, false otherwise
* @throws IOException If there was an IO issue saving the file
*/
- private boolean save() throws IOException {
+ private void save() throws IOException {
objectMapper.writeValue(new File(filename), users.values());
- return true;
}
@Override
@@ -82,17 +80,8 @@ public class UserFileDAO implements UserDAO {
public User updateUser(User user) throws IOException {
synchronized (users) {
if (users.containsKey(user.getUsername())) {
- // var old = users.put(user.getUsername(), user);
- // user.copyPassword(old);
- if (user.getNeeds() == null || user.getType() == null) {
- User oldData = users.get(user.getUsername());
- User crutch = new User(oldData.getUsername(), 0, new ArrayList<Integer>(), oldData.getType());
- crutch.copyPassword(oldData);
- users.put(user.getUsername(), crutch);
- } else {
- var old = users.put(user.getUsername(), user);
- user.copyPassword(old);
- }
+ var old = users.put(user.getUsername(), user);
+ user.copyPassword(Objects.requireNonNull(old));
save();
return user;
} else {
@@ -106,7 +95,8 @@ public class UserFileDAO implements UserDAO {
synchronized (users) {
if (users.containsKey(username)) {
users.remove(username);
- return save();
+ save();
+ return true;
} else {
return false;
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/AuthService.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/AuthService.java
index 87a16a6..cdce80d 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/AuthService.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/AuthService.java
@@ -1,11 +1,12 @@
package com.ufund.api.ufundapi.service;
+import java.io.IOException;
+
+import org.springframework.stereotype.Component;
+
import com.ufund.api.ufundapi.model.User;
import com.ufund.api.ufundapi.model.UserAuth;
import com.ufund.api.ufundapi.persistence.UserAuthDAO;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
@Component
public class AuthService {
@@ -24,18 +25,51 @@ public class AuthService {
* @param targetUsername The targetUsername of the user trying to be accessed.
* @param key The api key obtained by the client from logging in.
* @throws IllegalAccessException Thrown if access was denied to the user.
+ * @throws IOException Thrown on a file writing issue
+ */
+ public void keyHasAccessToUser(String targetUsername, String key) throws IllegalAccessException, IOException {
+ var userAuth = userAuthDAO.getUserAuth(key);
+ if (userAuth == null) {
+ throw new IllegalAccessException("Invalid authentication key");
+ }
+
+ var username = userAuth.getUsername();
+ var userType = userService.getUser(username).getType();
+ if (!username.equals(targetUsername) && userType != User.UserType.MANAGER) {
+ throw new IllegalAccessException("Provided key does not grant access to perform the requested operation");
+ }
+ }
+
+ /**
+ * Check if the provided key is valid
+ * @param key The api key obtained by the client from logging in.
+ * @throws IllegalAccessException Thrown if access was denied to the user.
+ * @throws IOException Thrown on a file writing issue
+ */
+ public void keyIsValid(String key) throws IOException, IllegalAccessException {
+ var userAuth = userAuthDAO.getUserAuth(key);
+ if (userAuth == null) {
+ throw new IllegalAccessException("Invalid authentication key");
+ }
+ }
+
+ /**
+ * Check if the provided key has access to edit the cupboard
+ * @param key The api key obtained by the client from logging in.
+ * @throws IllegalAccessException Thrown if access was denied to the user.
+ * @throws IOException Thrown on a file writing issue
*/
- public void authenticate(String targetUsername, String key) throws IllegalAccessException, IOException {
+ public void keyHasAccessToCupboard(String key) throws IOException, IllegalAccessException {
var userAuth = userAuthDAO.getUserAuth(key);
if (userAuth == null) {
- throw new IllegalAccessException("Unauthenticated");
+ throw new IllegalAccessException("Invalid authentication key");
+ }
+
+ var username = userAuth.getUsername();
+ var userType = userService.getUser(username).getType();
+ if (userType != User.UserType.MANAGER) {
+ throw new IllegalAccessException("Provided key does not grant access to perform the requested operation");
}
-//
-// var username = userAuth.getUsername();
-// var userType = userService.getUser(username).getType();
-// if (!username.equals(targetUsername) && userType != User.UserType.MANAGER) {
-// throw new IllegalAccessException("Unauthorized");
-// }
}
/**
@@ -50,7 +84,7 @@ public class AuthService {
public String login(String username, String password) throws IllegalAccessException, IOException {
var usr = userService.getUser(username);
if (usr == null || !usr.verifyPassword(password)) {
- throw new IllegalAccessException("Unauthorized");
+ throw new IllegalAccessException("Incorrect username or password");
}
var userAuth = UserAuth.generate(username);
userAuthDAO.addUserAuth(userAuth);
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java
index 2398745..993e7c1 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/CupboardService.java
@@ -3,6 +3,7 @@ package com.ufund.api.ufundapi.service;
import java.io.IOException;
import java.util.Arrays;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import com.ufund.api.ufundapi.DuplicateKeyException;
@@ -13,8 +14,10 @@ import com.ufund.api.ufundapi.persistence.CupboardDAO;
public class CupboardService {
private final CupboardDAO cupboardDAO;
+ final AuthService authService;
- public CupboardService(CupboardDAO cupboardDAO) {
+ public CupboardService(@Lazy AuthService authService, CupboardDAO cupboardDAO) {
+ this.authService = authService;
this.cupboardDAO = cupboardDAO;
}
@@ -22,16 +25,22 @@ public class CupboardService {
* Creates a new Need
*
* @param name The name of the need to create
+ * @param image The image representation of the need to create
+ * @param location The location of the new need
* @param maxGoal The max goal of the new need
* @param goalType The goal type of the new need
+ * @param urgent The urgency of the new need
+ * @param description The description of the new need
* @return The need that was created
* @throws IOException Thrown if there was any issue saving the data
* @throws DuplicateKeyException If there already exists a need with the same name
*/
- public Need createNeed(String name, double maxGoal, Need.GoalType goalType) throws IOException, DuplicateKeyException {
+ public Need createNeed(String name, String image, String location, double maxGoal, Need.GoalType goalType, boolean urgent, String description) throws IOException, DuplicateKeyException {
if (maxGoal <= 0) {
throw new IllegalArgumentException("Max Goal must be greater than zero");
+ } else if (goalType.equals(Need.GoalType.PHYSICAL) && maxGoal % 1 != 0) {
+ throw new IllegalArgumentException("Cannot have non whole number value for physical goal");
}
for (Need searchNeed : cupboardDAO.getNeeds()) {
@@ -40,7 +49,7 @@ public class CupboardService {
}
}
- Need need = new Need(name, goalType, maxGoal);
+ Need need = new Need(name, image, location, maxGoal, goalType, urgent, description);
return cupboardDAO.addNeed(need);
}
@@ -92,11 +101,30 @@ public class CupboardService {
}
if (need.getMaxGoal() <= 0) {
throw new IllegalArgumentException("Goal must be greater than 0");
+ } else if (need.getType().equals(Need.GoalType.PHYSICAL) && need.getMaxGoal() % 1 != 0) {
+ throw new IllegalArgumentException("Cannot have non whole number value for physical goal");
}
return cupboardDAO.updateNeed(need);
}
/**
+ * Checks out a need with the desired amount
+ *
+ * @param id The ID of the need to update
+ * @param checkoutAmount The amount to update the need by
+ * @throws IOException If there is an error reading the file
+ * @throws IllegalAccessException If the user has insufficient permission
+ */
+ public void checkoutNeed(int id, double checkoutAmount, String key) throws IOException, IllegalAccessException {
+ if (checkoutAmount <= 0) {
+ throw new IllegalArgumentException("Amount must be greater than 0");
+ }
+ authService.keyIsValid(key);
+ Need need = cupboardDAO.getNeed(id);
+ need.incrementCurrent(checkoutAmount);
+ }
+
+ /**
* Delete a need from the cupboard
*
* @param id the ID of the need
@@ -104,6 +132,7 @@ public class CupboardService {
* @throws IOException Thrown on any problem removing the need
*/
public boolean deleteNeed(int id) throws IOException {
+
return cupboardDAO.deleteNeed(id);
}
}
diff --git a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java
index caf9f4c..6e27f50 100644
--- a/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java
+++ b/ufund-api/src/main/java/com/ufund/api/ufundapi/service/UserService.java
@@ -12,7 +12,7 @@ import com.ufund.api.ufundapi.persistence.UserDAO;
public class UserService {
private final UserDAO userDAO;
- private final CupboardService cupboardService;
+ final CupboardService cupboardService;
public UserService(UserDAO userDao, CupboardService cupboardService) {
this.userDAO = userDao;
@@ -44,7 +44,10 @@ public class UserService {
*/
public User getUser(String username) throws IOException {
User user = userDAO.getUser(username);
- for (int needId : user.getNeeds()) {
+ if (user == null) {
+ return null;
+ }
+ for (int needId : user.getBasket()) {
if (cupboardService.getNeed(needId) == null) {
user.removeBasketNeed(needId);
}
@@ -55,7 +58,7 @@ public class UserService {
/**
* Updates a user
*
- * @param user The ID of the user to update
+ * @param user The ID of the user to update
* @param username The user object to set (note: the ID is ignored)
* @return The updated user object
* @throws IOException Thrown if there was any issue saving the data
@@ -77,5 +80,5 @@ public class UserService {
public boolean deleteUser(String username) throws IOException {
return userDAO.deleteUser(username);
}
-
+
}
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/AuthControllerTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/AuthControllerTest.java
index 3d4637d..f4b5980 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/AuthControllerTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/AuthControllerTest.java
@@ -8,7 +8,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.mockito.ArgumentMatchers.any;
-import org.mockito.Mockito;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -26,7 +25,7 @@ public class AuthControllerTest {
private Map<String, String> authMap;
@BeforeEach
- private void setupAuthController() {
+ public void setupAuthController() {
mockAuthService = mock(AuthService.class);
authController = new AuthController(mockAuthService);
@@ -76,7 +75,7 @@ public class AuthControllerTest {
}
@Test
- public void testLogout() throws IllegalAccessException, IOException {
+ public void testLogout() {
// Setup
String key = "123";
@@ -88,7 +87,7 @@ public class AuthControllerTest {
}
@Test
- public void testLogoutIOException() throws IllegalAccessException, IOException {
+ public void testLogoutIOException() throws IOException {
// Setup
String key = "123";
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/CupboardControllerTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/CupboardControllerTest.java
index 6ef6710..8572ec6 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/CupboardControllerTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/CupboardControllerTest.java
@@ -7,10 +7,11 @@ import static java.util.Map.entry;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.Mockito.*;
+
+import com.ufund.api.ufundapi.service.AuthService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
import org.springframework.http.HttpStatus;
import com.ufund.api.ufundapi.DuplicateKeyException;
@@ -21,29 +22,44 @@ import com.ufund.api.ufundapi.service.CupboardService;
public class CupboardControllerTest {
private CupboardController cupboardController;
private CupboardService mockCupboardService;
+ private final String key = "dummyKey";
+ private AuthService mockAuthService;
@BeforeEach
public void setupCupboardDAO() {
+ mockAuthService = mock(AuthService.class);
mockCupboardService = mock(CupboardService.class);
- cupboardController = new CupboardController(mockCupboardService);
+ cupboardController = new CupboardController(mockCupboardService, mockAuthService);
+
+ try {
+ doThrow().when(mockAuthService).keyHasAccessToCupboard(key);
+ } catch (Exception ignored) {}
}
@Test
public void createNeed() throws IOException, DuplicateKeyException {
String name = "Test";
+ String location = "Atlantis";
int maxGoal = 100;
GoalType type = Need.GoalType.MONETARY;
- var need = new Need(name, type, maxGoal);
- when(mockCupboardService.createNeed(name, maxGoal, type)).thenReturn(need);
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
+ when(mockCupboardService.createNeed(name, image, location, maxGoal, type, urgent, description)).thenReturn(need);
Map<String, Object> needMap = Map.ofEntries(
entry("name", "Test"),
- entry("maxGoal", 100.0),
- entry("type", "MONETARY")
+ entry("image", ""),
+ entry("location", "Atlantis"),
+ entry("maxGoal", 100),
+ entry("type", "MONETARY"),
+ entry("urgent", false),
+ entry("description", "")
);
- var res = cupboardController.createNeed(needMap);
+ var res = cupboardController.createNeed(needMap, key);
assertEquals(HttpStatus.OK, res.getStatusCode());
assertEquals(need, res.getBody());
@@ -51,41 +67,94 @@ public class CupboardControllerTest {
@Test
public void createNeedBadMaxGoal() throws IOException, DuplicateKeyException {
- when(mockCupboardService.createNeed("Name", -100, Need.GoalType.MONETARY)).thenThrow(new IllegalArgumentException());
+ when(mockCupboardService.createNeed("Test", "", "Atlantis", -100, Need.GoalType.MONETARY, false, "")).thenThrow(new IllegalArgumentException());
Map<String, Object> needMap = Map.ofEntries(
- entry("name", "Name"),
- entry("maxGoal", -100.0),
- entry("type", "MONETARY"));
+ entry("name", "Test"),
+ entry("image", ""),
+ entry("location", "Atlantis"),
+ entry("maxGoal", -100),
+ entry("type", "MONETARY"),
+ entry("urgent", false),
+ entry("description", "")
+ );
- var res = cupboardController.createNeed(needMap);
+ var res = cupboardController.createNeed(needMap, key);
assertEquals(HttpStatus.BAD_REQUEST, res.getStatusCode());
}
@Test
public void createNeedIOException() throws IOException, DuplicateKeyException {
- when(mockCupboardService.createNeed("Name", 100, Need.GoalType.MONETARY)).thenThrow(new IOException());
+ when(mockCupboardService.createNeed("Test", "", "Atlantis", 100, Need.GoalType.MONETARY, false, "")).thenThrow(new IOException());
Map<String, Object> needMap = Map.ofEntries(
- entry("name", "Name"),
- entry("maxGoal", 100.0),
- entry("type", "MONETARY"));
+ entry("name", "Test"),
+ entry("image", ""),
+ entry("location", "Atlantis"),
+ entry("maxGoal", 100),
+ entry("type", "MONETARY"),
+ entry("urgent", false),
+ entry("description", "")
+ );
- var res = cupboardController.createNeed(needMap);
+ var res = cupboardController.createNeed(needMap, key);
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, res.getStatusCode());
}
@Test
+ public void createNeedConflict() throws IOException, DuplicateKeyException {
+ when(mockCupboardService.createNeed("Test", "", "Atlantis", 100, Need.GoalType.MONETARY, false, "")).thenThrow(new DuplicateKeyException(""));
+
+ Map<String, Object> needMap = Map.ofEntries(
+ entry("name", "Test"),
+ entry("image", ""),
+ entry("location", "Atlantis"),
+ entry("maxGoal", 100),
+ entry("type", "MONETARY"),
+ entry("urgent", false),
+ entry("description", "")
+ );
+
+ var res = cupboardController.createNeed(needMap, key);
+
+ assertEquals(HttpStatus.CONFLICT, res.getStatusCode());
+ }
+
+ @Test
+ public void createNeedUnauthorized() throws IOException, IllegalAccessException {
+ doThrow(new IllegalAccessException()).when(mockAuthService).keyHasAccessToCupboard(key);
+
+ Map<String, Object> needMap = Map.ofEntries(
+ entry("name", "Test"),
+ entry("location", "Atlantis"),
+ entry("maxGoal", 100),
+ entry("type", "MONETARY"),
+ entry("urgent", false)
+ );
+
+ var res = cupboardController.createNeed(needMap, key);
+
+ assertEquals(HttpStatus.UNAUTHORIZED, res.getStatusCode());
+ }
+
+ @Test
public void getNeeds() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.getNeeds()).thenReturn(new Need[]{need});
var res = cupboardController.getNeeds();
assertEquals(HttpStatus.OK, res.getStatusCode());
- assertArrayEquals(new Need[]{need}, res.getBody());
+ assertArrayEquals(new Need[]{need}, (Need[]) res.getBody());
}
@Test
@@ -104,18 +173,25 @@ public class CupboardControllerTest {
var res = cupboardController.getNeeds();
assertEquals(HttpStatus.OK, res.getStatusCode());
- assertArrayEquals(new Need[]{}, res.getBody());
+ assertArrayEquals(new Need[]{}, (Need[]) res.getBody());
}
@Test
public void searchNeeds() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.searchNeeds("Na")).thenReturn(new Need[]{need});
var res = cupboardController.searchNeeds("Na");
assertEquals(HttpStatus.OK, res.getStatusCode());
- assertArrayEquals(new Need[]{need}, res.getBody());
+ assertArrayEquals(new Need[]{need}, (Need[]) res.getBody());
}
@Test
@@ -134,12 +210,19 @@ public class CupboardControllerTest {
var res = cupboardController.searchNeeds("Na");
assertEquals(HttpStatus.OK, res.getStatusCode());
- assertArrayEquals(new Need[]{}, res.getBody());
+ assertArrayEquals(new Need[]{}, (Need[]) res.getBody());
}
@Test
public void getNeed() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.getNeed(need.getId())).thenReturn(need);
var res = cupboardController.getNeed(need.getId());
@@ -150,7 +233,14 @@ public class CupboardControllerTest {
@Test
public void getNeedIOException() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.getNeed(need.getId())).thenThrow(new IOException());
var res = cupboardController.getNeed(need.getId());
@@ -160,7 +250,14 @@ public class CupboardControllerTest {
@Test
public void getNeedFail() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.getNeed(need.getId())).thenReturn(null);
var res = cupboardController.getNeed(need.getId());
@@ -171,10 +268,17 @@ public class CupboardControllerTest {
@Test
public void updateNeeds() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.updateNeed(need, 1)).thenReturn(need);
- var res = cupboardController.updateNeed(need, 1);
+ var res = cupboardController.updateNeed(need, 1, key);
assertEquals(HttpStatus.OK, res.getStatusCode());
assertEquals(need, res.getBody());
@@ -182,21 +286,86 @@ public class CupboardControllerTest {
@Test
public void updateNeedsIOException() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.updateNeed(need, 1)).thenThrow(new IOException());
- var res = cupboardController.updateNeed(need, 1);
+ var res = cupboardController.updateNeed(need, 1, key);
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, res.getStatusCode());
}
@Test
+ public void updateNeedMissing() throws IOException {
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
+ when(mockCupboardService.updateNeed(need, 1)).thenReturn(null);
+
+ var res = cupboardController.updateNeed(need, 1, key);
+
+ assertEquals(HttpStatus.NOT_FOUND, res.getStatusCode());
+ }
+
+ @Test
+ public void updateNeedBadRequest() throws IOException {
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
+ when(mockCupboardService.updateNeed(need, 1)).thenThrow(new IllegalArgumentException());
+
+ var res = cupboardController.updateNeed(need, 1, key);
+
+ assertEquals(HttpStatus.BAD_REQUEST, res.getStatusCode());
+ }
+
+ @Test
+ public void updateNeedUnauthorized() throws IOException, IllegalAccessException {
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
+ doThrow(new IllegalAccessException()).when(mockAuthService).keyHasAccessToCupboard(key);
+
+ var res = cupboardController.updateNeed(need, 1, key);
+
+ assertEquals(HttpStatus.UNAUTHORIZED, res.getStatusCode());
+ }
+
+ @Test
public void deleteNeed() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.getNeed(1)).thenReturn(need);
when(mockCupboardService.deleteNeed(1)).thenReturn(true);
- var res = cupboardController.deleteNeed(1);
+ var res = cupboardController.deleteNeed(1, key);
assertEquals(HttpStatus.OK, res.getStatusCode());
}
@@ -206,18 +375,100 @@ public class CupboardControllerTest {
when(mockCupboardService.getNeed(1)).thenReturn(null);
when(mockCupboardService.deleteNeed(1)).thenReturn(false);
- var res = cupboardController.deleteNeed(1);
+ var res = cupboardController.deleteNeed(1, key);
assertEquals(HttpStatus.NOT_FOUND, res.getStatusCode());
}
@Test
+ public void deleteNeedUnauthorized() throws IOException, IllegalAccessException {
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
+ when(mockCupboardService.getNeed(1)).thenReturn(need);
+ doThrow(new IllegalAccessException()).when(mockAuthService).keyHasAccessToCupboard(key);
+
+ var res = cupboardController.deleteNeed(1, key);
+
+ assertEquals(HttpStatus.UNAUTHORIZED, res.getStatusCode());
+ }
+
+ @Test
public void deleteNeedIOException() throws IOException {
- var need = new Need("Name", 1, 100, Need.GoalType.MONETARY);
+ String name = "Test";
+ String location = "Atlantis";
+ int maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
when(mockCupboardService.getNeed(1)).thenReturn(need);
when(mockCupboardService.deleteNeed(1)).thenThrow(new IOException());
- var res = cupboardController.deleteNeed(1);
+ var res = cupboardController.deleteNeed(1, key);
+
+ assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, res.getStatusCode());
+ }
+
+ @Test
+ public void checkoutNeeds() throws IOException, IllegalAccessException {
+ doNothing().when(mockCupboardService).checkoutNeed(0, 20, key);
+
+
+ Map<String, Integer> needMap = Map.ofEntries(
+ entry("needID", 0),
+ entry("amount", 20)
+ );
+
+ var res = cupboardController.checkoutNeeds(needMap, key);
+
+ assertEquals(HttpStatus.OK, res.getStatusCode());
+ }
+
+ @Test
+ public void checkoutNeedsBadRequest() throws IOException, IllegalAccessException {
+ doThrow(new IllegalArgumentException()).when(mockCupboardService).checkoutNeed(0, 20, key);
+
+ Map<String, Integer> needMap = Map.ofEntries(
+ entry("needID", 0),
+ entry("amount", 20)
+ );
+
+ var res = cupboardController.checkoutNeeds(needMap, key);
+
+ assertEquals(HttpStatus.BAD_REQUEST, res.getStatusCode());
+ }
+
+ @Test
+ public void checkoutNeedsUnauthorized() throws IOException, IllegalAccessException {
+ doThrow(new IllegalAccessException()).when(mockCupboardService).checkoutNeed(0, 20, key);
+
+ Map<String, Integer> needMap = Map.ofEntries(
+ entry("needID", 0),
+ entry("amount", 20)
+ );
+
+ var res = cupboardController.checkoutNeeds(needMap, key);
+
+ assertEquals(HttpStatus.UNAUTHORIZED, res.getStatusCode());
+ }
+
+ @Test
+ public void checkoutNeedsInternalError() throws IOException, IllegalAccessException {
+ doThrow(new IOException()).when(mockCupboardService).checkoutNeed(0, 20, key);
+
+ Map<String, Integer> needMap = Map.ofEntries(
+ entry("needID", 0),
+ entry("amount", 20)
+ );
+
+ var res = cupboardController.checkoutNeeds(needMap, key);
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, res.getStatusCode());
}
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/UserControllerTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/UserControllerTest.java
index 5542f49..5870a93 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/UserControllerTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/controller/UserControllerTest.java
@@ -50,12 +50,12 @@ public class UserControllerTest {
// Invoke
- ResponseEntity<User> response = userController.getUser(username, key);
+ ResponseEntity<Object> response = userController.getUser(username, key);
// Analyze
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
- assertEquals(user.getUsername(), response.getBody().getUsername());
+ assertEquals(user.getUsername(), ((User) response.getBody()).getUsername());
}
@Test
@@ -69,7 +69,7 @@ public class UserControllerTest {
// Invoke
- ResponseEntity<User> response = userController.getUser(username, key);
+ ResponseEntity<Object> response = userController.getUser(username, key);
// Analyze
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
@@ -82,10 +82,10 @@ public class UserControllerTest {
String key = UserAuth.generate(username).getKey();
// When getUser is called on the Mock User service, throw an IOException
// doThrow(new IllegalAccessException()).when(mockUserService).getUser(username);
- doThrow(new IllegalAccessException()).when(mockAuthService).authenticate(username, key);
+ doThrow(new IllegalAccessException()).when(mockAuthService).keyHasAccessToUser(username, key);
// Invoke
- ResponseEntity<User> response = userController.getUser(username, key);
+ ResponseEntity<Object> response = userController.getUser(username, key);
// Analyze
assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
@@ -100,7 +100,7 @@ public class UserControllerTest {
doThrow(new IOException()).when(mockUserService).getUser(username);
// Invoke
- ResponseEntity<User> response = userController.getUser(username, key);
+ ResponseEntity<Object> response = userController.getUser(username, key);
// Analyze
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
@@ -119,7 +119,7 @@ public class UserControllerTest {
// Invoke
- ResponseEntity<User> response = userController.createUser(userMap);
+ ResponseEntity<Object> response = userController.createUser(userMap);
// Analyze
assertEquals(HttpStatus.CREATED, response.getStatusCode());
@@ -138,7 +138,7 @@ public class UserControllerTest {
// Invoke
- ResponseEntity<User> response = userController.createUser(userMap);
+ ResponseEntity<Object> response = userController.createUser(userMap);
// Analyze
assertEquals(HttpStatus.CONFLICT, response.getStatusCode());
@@ -154,7 +154,7 @@ public class UserControllerTest {
when(mockUserService.createUser(username, password)).thenThrow(DuplicateKeyException.class);
// Invoke
- ResponseEntity<User> response = userController.createUser(userMap);
+ ResponseEntity<Object> response = userController.createUser(userMap);
// Analyze
assertEquals(HttpStatus.CONFLICT, response.getStatusCode());
@@ -172,7 +172,7 @@ public class UserControllerTest {
// Invoke
- ResponseEntity<User> response = userController.createUser(userMap);
+ ResponseEntity<Object> response = userController.createUser(userMap);
// Analyze
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
@@ -189,7 +189,7 @@ public class UserControllerTest {
when(mockUserService.updateUser(user, username)).thenReturn(user);
// Invoke
- ResponseEntity<User> response = userController.updateUser(user, username, key);
+ ResponseEntity<Object> response = userController.updateUser(user, username, key);
// Analyze
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -207,7 +207,7 @@ public class UserControllerTest {
when(mockUserService.updateUser(user, username)).thenReturn(null);
// Invoke
- ResponseEntity<User> response = userController.updateUser(user, username, key);
+ ResponseEntity<Object> response = userController.updateUser(user, username, key);
// Analyze
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
@@ -223,7 +223,7 @@ public class UserControllerTest {
doThrow(new IOException()).when(mockUserService).updateUser(user, username);
// Invoke
- ResponseEntity<User> response = userController.updateUser(user, username, key);
+ ResponseEntity<Object> response = userController.updateUser(user, username, key);
// Analyze
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
@@ -237,14 +237,14 @@ public class UserControllerTest {
String key = UserAuth.generate(username).getKey();
// When updateUser is called on the Mock User service, throw a Invalid Parameter exception
// exception
- doThrow(new IllegalAccessException()).when(mockAuthService).authenticate(username, key);
+ doThrow(new IllegalAccessException()).when(mockAuthService).keyHasAccessToUser(username, key);
// Invoke
- ResponseEntity<User> response = userController.updateUser(user, username, key);
+ ResponseEntity<Object> response = userController.updateUser(user, username, key);
// Analyze
- assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
+ assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
}
@Test
@@ -256,7 +256,7 @@ public class UserControllerTest {
when(mockUserService.deleteUser(username)).thenReturn(true);
// Invoke
- ResponseEntity<Boolean> response = userController.deleteUser(username, key);
+ ResponseEntity<Object> response = userController.deleteUser(username, key);
// Analyze
assertEquals(HttpStatus.OK, response.getStatusCode());
@@ -271,7 +271,7 @@ public class UserControllerTest {
when(mockUserService.deleteUser(username)).thenReturn(false);
// Invoke
- ResponseEntity<Boolean> response = userController.deleteUser(username, key);
+ ResponseEntity<Object> response = userController.deleteUser(username, key);
// Analyze
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
@@ -286,7 +286,7 @@ public class UserControllerTest {
doThrow(new IOException()).when(mockUserService).deleteUser(username);
// Invoke
- ResponseEntity<Boolean> response = userController.deleteUser(username, key);
+ ResponseEntity<Object> response = userController.deleteUser(username, key);
// Analyze
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode());
@@ -298,10 +298,10 @@ public class UserControllerTest {
String username = "Test";
String key = UserAuth.generate(username).getKey();
// When deleteUser is called on the Mock User service, throw an IOException
- doThrow(new IllegalAccessException()).when(mockAuthService).authenticate(username, key);
+ doThrow(new IllegalAccessException()).when(mockAuthService).keyHasAccessToUser(username, key);
// Invoke
- ResponseEntity<Boolean> response = userController.deleteUser(username, key);
+ ResponseEntity<Object> response = userController.deleteUser(username, key);
// Analyze
assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/model/NeedTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/model/NeedTest.java
index 6b4ddfc..67d2b8f 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/model/NeedTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/model/NeedTest.java
@@ -14,23 +14,30 @@ public class NeedTest {
public void createNeed() {
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
assertNotNull(need);
}
@Test
public void testFields() {
String name = "Jellyfish";
- int id = 0;
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
assertEquals(name, need.getName());
- assertEquals(id, need.getId());
+ assertEquals(0, need.getId());
assertEquals(maxGoal, need.getMaxGoal());
assertEquals(type, need.getType());
}
@@ -38,9 +45,13 @@ public class NeedTest {
@Test
public void testCurrentGoal() {
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
double current = 0.00;
need.setCurrent(current);
@@ -60,9 +71,13 @@ public class NeedTest {
public void testFilterAttributes() {
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
String[] filterAttributes = {"seaweed", "divers", "pacific", "plankton"};
@@ -75,9 +90,13 @@ public class NeedTest {
public void testSetMaxGoal() {
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
double newGoal = 200.00;
need.setMaxGoal(newGoal);
@@ -90,9 +109,13 @@ public class NeedTest {
public void testSetName() {
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, location, image, maxGoal, type, urgent, description);
String newName = "TESTINGFUN";
need.setName(newName);
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/model/UserTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/model/UserTest.java
index 55b7f07..ed48f54 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/model/UserTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/model/UserTest.java
@@ -52,14 +52,14 @@ public class UserTest {
String expectedName = "Bob";
User user = User.create(expectedName, "pass");
- Need need = new Need("Test", 0, 100, Need.GoalType.MONETARY);
+ Need need = new Need("Test", "", "Atlantis", 0, 100, Need.GoalType.MONETARY, false, "");
Need[] needs = { need };
when(cupboardService.getNeed(0)).thenReturn(need);
user.addToBasket(need);
- Need getNeed = cupboardService.getNeed(user.getNeeds()[0]);
+ Need getNeed = cupboardService.getNeed(user.getBasket()[0]);
assertEquals(needs[0], getNeed);
@@ -71,16 +71,15 @@ public class UserTest {
String expectedName = "Bob";
User user = User.create(expectedName, "pass");
- Need need = new Need("Test", 0, 100, Need.GoalType.MONETARY);
- Need need2 = new Need("Test2", 0, 100, Need.GoalType.MONETARY);
-
+ Need need = new Need("Test", "", "Atlantis", 0, 100, Need.GoalType.MONETARY, false, "");
+ Need need2 = new Need("Test2", "", "Atlantis", 0, 100, Need.GoalType.MONETARY, false, "");
when(cupboardService.getNeed(0)).thenReturn(need2);
user.addToBasket(need);
user.removeBasketNeed(need.getId());
user.addToBasket(need2);
- Need getNeed = cupboardService.getNeed(user.getNeeds()[0]);
+ Need getNeed = cupboardService.getNeed(user.getBasket()[0]);
assertEquals(need2, getNeed);
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/CupboardFileDAOTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/CupboardFileDAOTest.java
index f786a8c..76a8b40 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/CupboardFileDAOTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/CupboardFileDAOTest.java
@@ -4,6 +4,7 @@ import java.io.File;
import java.io.IOException;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
@@ -20,44 +21,40 @@ import com.ufund.api.ufundapi.model.Need.GoalType;
@Tag("Persistence-tier")
public class CupboardFileDAOTest {
- private CupboardFileDAO cupboardFileDao;
- private Need[] testNeeds;
- private ObjectMapper mockObjectMapper;
+ private CupboardFileDAO cupboardFileDao;
+ private Need[] testNeeds;
@BeforeEach
- public void setupCupboardFileDao() throws IOException {
- mockObjectMapper = mock(ObjectMapper.class);
- testNeeds = new Need[]{
- new Need("one", 0, 100, Need.GoalType.MONETARY),
- new Need("two", 1, 100, Need.GoalType.MONETARY),
- new Need("three", 2, 100, Need.GoalType.MONETARY)
+ public void setupCupboardFileDao() throws IOException {
+ ObjectMapper mockObjectMapper = mock(ObjectMapper.class);
+ testNeeds = new Need[] {
+ new Need("one", "", "Atlantis", 0, 100, Need.GoalType.MONETARY, false, ""),
+ new Need("two", "", "Atlantis", 1, 100, Need.GoalType.MONETARY, false, ""),
+ new Need("three", "", "Atlantis", 2, 100, Need.GoalType.MONETARY, false, "")
};
- // When the object mapper is supposed to read from the file
- // the mock object mapper will return the hero array above
- when(mockObjectMapper
- .readValue(new File("doesnt_matter.txt"),Need[].class))
- .thenReturn(testNeeds);
- cupboardFileDao = new CupboardFileDAO("doesnt_matter.txt",mockObjectMapper);
- }
-
- @Test
- public void getNeedsTest() {
- Need[] needs = cupboardFileDao.getNeeds();
- assertEquals(needs.length,testNeeds.length);
+ // When the object mapper is supposed to read from the file
+ // the mock object mapper will return the hero array above
+ when(mockObjectMapper.readValue(new File("doesnt_matter.txt"), Need[].class)).thenReturn(testNeeds);
+ cupboardFileDao = new CupboardFileDAO("doesnt_matter.txt", mockObjectMapper);
+ }
+
+ @Test
+ public void getNeedsTest() {
+ Need[] needs = cupboardFileDao.getNeeds();
+ assertEquals(needs.length, testNeeds.length);
assertEquals(needs[0].getName(), testNeeds[0].getName());
- }
+ }
- @Test
- public void getNeedTest() {
+ @Test
+ public void getNeedTest() {
Need need1 = cupboardFileDao.getNeed(0);
-
+
assertEquals(testNeeds[0], need1);
- }
+ }
@Test
public void createNeedTest() throws IOException {
- Need newNeed = new Need("sea urchin hats", 3, 100, GoalType.PHYSICAL);
-
+ Need newNeed = new Need("sea urchin hats", "", "Atlantis", 100, GoalType.PHYSICAL, false, "");
Need actualNeed = cupboardFileDao.addNeed(newNeed);
@@ -79,16 +76,37 @@ public class CupboardFileDAOTest {
}
@Test
+ public void deleteNeedTestFail() throws IOException {
+ Need undeletedNeed = cupboardFileDao.getNeed(0);
+ assertNotNull(undeletedNeed);
+
+ boolean nullNeed = cupboardFileDao.deleteNeed(20);
+ assertFalse(nullNeed);
+ }
+
+ @Test
public void updateNeedTest() throws IOException {
Need[] needs = cupboardFileDao.getNeeds();
Need unupdatedNeed = needs[needs.length - 1];
assertNotNull(unupdatedNeed);
- Need updatedNeed = new Need("sequin sea urchin hats", 2, 100, GoalType.PHYSICAL);
+ Need updatedNeed = new Need("sequin sea urchin hats", "", "Atlantis", 100, GoalType.PHYSICAL, false, "");
Need actualNeed = cupboardFileDao.updateNeed(updatedNeed);
assertEquals(actualNeed, updatedNeed);
assertNotEquals(actualNeed, unupdatedNeed);
}
+ @Test
+ public void updateNeedTestFail() throws IOException {
+ Need[] needs = cupboardFileDao.getNeeds();
+ Need unupdatedNeed = needs[needs.length - 1];
+ assertNotNull(unupdatedNeed);
+
+ Need updatedNeed = new Need("sequin sea urchin hats", "", "Atlantis", 5, 100, GoalType.PHYSICAL, false, "");
+
+ Need actualNeed = cupboardFileDao.updateNeed(updatedNeed);
+ assertNull(actualNeed);
+ }
+
}
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserAuthFileDAOTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserAuthFileDAOTest.java
index f7db747..a4842c5 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserAuthFileDAOTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserAuthFileDAOTest.java
@@ -2,6 +2,7 @@ package com.ufund.api.ufundapi.persistence;
import java.io.File;
import java.io.IOException;
+import java.time.LocalDateTime;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -18,22 +19,21 @@ import com.ufund.api.ufundapi.model.UserAuth;
public class UserAuthFileDAOTest {
private UserAuthFIleDAO userAuthFIleDAO;
- private ObjectMapper mockObjectMapper;
private UserAuth[] userAuths;
@BeforeEach
public void setupUserAuthFileDAO() throws IOException {
- mockObjectMapper = mock(ObjectMapper.class);
+ ObjectMapper mockObjectMapper = mock(ObjectMapper.class);
userAuths = new UserAuth[]{
- new UserAuth("123", "Phil", null),
- new UserAuth("456", "Bob", null),
- new UserAuth("789", "Steve", null)
+ new UserAuth("123", "Phil", LocalDateTime.MAX),
+ new UserAuth("456", "Bob", LocalDateTime.MAX),
+ new UserAuth("789", "Steve", LocalDateTime.MAX)
};
// When the object mapper is supposed to read from the file
// the mock object mapper will return the hero array above
when(mockObjectMapper
- .readValue(new File("doesnt_matter.txt"),UserAuth[].class))
+ .readValue(new File("doesnt_matter.txt"),UserAuth[].class))
.thenReturn(userAuths);
userAuthFIleDAO = new UserAuthFIleDAO(mockObjectMapper, "doesnt_matter.txt");
}
@@ -43,18 +43,18 @@ public class UserAuthFileDAOTest {
String key = "123";
UserAuth auth = userAuthFIleDAO.getUserAuth(key);
- assertEquals(auth, userAuths[0]);
+ assertEquals(userAuths[0], auth);
}
@Test
- public void addUserAuthTest() throws IOException {
+ public void addUserAuthTest() {
UserAuth auth = new UserAuth("999", "Fish", null);
assertDoesNotThrow(() -> userAuthFIleDAO.addUserAuth(auth));
}
@Test
- public void removeUserAuthTest() throws IOException {
+ public void removeUserAuthTest() {
String key = "123";
assertDoesNotThrow(() -> userAuthFIleDAO.removeUserAuth(key));
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserFileDAOTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserFileDAOTest.java
index 9361188..2ee0fc0 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserFileDAOTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/persistence/UserFileDAOTest.java
@@ -39,6 +39,24 @@ public class UserFileDAOTest {
userFileDAO = new UserFileDAO("doesnt_matter.txt",mockObjectMapper);
}
+ @Test
+ public void addUsersTest() throws IOException {
+ User user = User.create("Name", "Pass");
+
+ User addedUser = userFileDAO.addUser(user);
+
+ assertEquals(addedUser, user);
+ }
+
+ @Test
+ public void addUsersTestFail() throws IOException {
+ User user = User.create("bob", "test");
+
+ User existingUser = userFileDAO.addUser(user);
+
+ assertEquals(existingUser, testUsers[0]);
+ }
+
@Test
public void getUsersTest() {
User[] users = userFileDAO.getUsers();
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/service/AuthServiceTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/service/AuthServiceTest.java
index 55cf7a9..4f58b12 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/service/AuthServiceTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/service/AuthServiceTest.java
@@ -11,7 +11,6 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
-import com.ufund.api.ufundapi.DuplicateKeyException;
import com.ufund.api.ufundapi.model.User;
import com.ufund.api.ufundapi.model.UserAuth;
import com.ufund.api.ufundapi.persistence.UserAuthDAO;
@@ -41,39 +40,39 @@ public class AuthServiceTest {
}
@Test
- public void testAuthenticate() throws IOException {
+ public void testKeyIsValid() throws IOException {
// Mock
when(mockAuthDAO.getUserAuth(key)).thenReturn(new UserAuth(key, username, null));
when(mockUserService.getUser(username)).thenReturn(user);
// Analyze
- assertDoesNotThrow(() -> authService.authenticate(username, key));
+ assertDoesNotThrow(() -> authService.keyHasAccessToUser(username, key));
}
-// @Test
-// public void testAuthenticateMismatchName() throws IOException {
-// // Mock
-// when(mockAuthDAO.getUserAuth(key)).thenReturn(new UserAuth(key, "EvilFish", null));
-// when(mockUserService.getUser("EvilFish")).thenReturn(user);
-//
-// // Analyze
-// assertThrows(IllegalAccessException.class, () -> authService.authenticate(username, key));
-//
-// }
+ @Test
+ public void testKeyIsValidMismatchName() throws IOException {
+ // Mock
+ when(mockAuthDAO.getUserAuth(key)).thenReturn(new UserAuth(key, "EvilFish", null));
+ when(mockUserService.getUser("EvilFish")).thenReturn(user);
+
+ // Analyze
+ assertThrows(IllegalAccessException.class, () -> authService.keyHasAccessToUser(username, key));
+
+ }
@Test
- public void testAuthenticateMissingUserAuth() throws IOException {
+ public void testKeyIsValidMissingUserAuth() throws IOException {
// Mock
when(mockAuthDAO.getUserAuth(key)).thenReturn(null);
// Analyze
- assertThrows(IllegalAccessException.class, () -> authService.authenticate(username, key));
+ assertThrows(IllegalAccessException.class, () -> authService.keyHasAccessToUser(username, key));
}
@Test
- public void testLogin() throws IOException, DuplicateKeyException, IllegalAccessException {
+ public void testLogin() throws IOException {
// Mock
when(mockUserService.getUser(username)).thenReturn(user);
@@ -83,7 +82,7 @@ public class AuthServiceTest {
}
@Test
- public void testLoginNullUser() throws IOException, DuplicateKeyException, IllegalAccessException {
+ public void testLoginNullUser() throws IOException {
// Mock
when(mockUserService.getUser(username)).thenReturn(null);
@@ -92,7 +91,7 @@ public class AuthServiceTest {
}
@Test
- public void testLoginMismatchPasswords() throws IOException, DuplicateKeyException, IllegalAccessException {
+ public void testLoginMismatchPasswords() throws IOException {
// Mock
when(mockUserService.getUser(username)).thenReturn(User.create(username, "fries"));
@@ -101,7 +100,7 @@ public class AuthServiceTest {
}
@Test
- public void testLogout() throws IOException, DuplicateKeyException, IllegalAccessException {
+ public void testLogout() {
// Analyze
assertDoesNotThrow(() -> authService.logout(key));
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/service/CupboardServiceTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/service/CupboardServiceTest.java
index 99ca23c..2a3c8ee 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/service/CupboardServiceTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/service/CupboardServiceTest.java
@@ -27,7 +27,8 @@ public class CupboardServiceTest {
@BeforeEach
public void setupCupboardService() {
mockCupboardDAO = mock(CupboardDAO.class);
- cupboardService = new CupboardService(mockCupboardDAO);
+ AuthService mockAuthService = mock(AuthService.class);
+ cupboardService = new CupboardService(mockAuthService, mockCupboardDAO);
}
@@ -35,16 +36,20 @@ public class CupboardServiceTest {
public void testCreateNeed() throws IOException, DuplicateKeyException {
// Setup
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
// When the same id is passed in, our mock User DAO will return the User object
when(mockCupboardDAO.addNeed(any())).thenReturn(need);
when(mockCupboardDAO.getNeeds()).thenReturn(new Need[0]);
// Invoke
- Need response = cupboardService.createNeed(name, maxGoal, type);
+ Need response = cupboardService.createNeed(name, location, image, maxGoal, type, urgent, description);
// Analyze
assertNotNull(response);
@@ -52,12 +57,16 @@ public class CupboardServiceTest {
}
@Test
- public void testCreateNeedBadGoal() throws IOException, DuplicateKeyException {
+ public void testCreateNeedBadGoal() throws IOException {
// Setup
String name = "Jellyfish";
- double maxGoal = -100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = -100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
// When the same id is passed in, our mock User DAO will return the User object
when(mockCupboardDAO.addNeed(any())).thenReturn(need);
@@ -67,18 +76,21 @@ public class CupboardServiceTest {
// Need response = cupboardService.createNeed(name, maxGoal, type);
// Analyze
- assertThrows(IllegalArgumentException.class, () -> {
- cupboardService.createNeed(name, maxGoal, type);
- });
+ assertThrows(IllegalArgumentException.class, () ->
+ cupboardService.createNeed(name, location, image, maxGoal, type, urgent, description));
}
@Test
- public void testCreateNeedDuplicate() throws IOException, DuplicateKeyException {
+ public void testCreateNeedDuplicate() throws IOException {
// Setup
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
Need[] needs = { need };
// When the same id is passed in, our mock User DAO will return the User object
@@ -89,18 +101,21 @@ public class CupboardServiceTest {
// Need response = cupboardService.createNeed(name, maxGoal, type);
// Analyze
- assertThrows(DuplicateKeyException.class, () -> {
- cupboardService.createNeed(name, maxGoal, type);
- });
+ assertThrows(DuplicateKeyException.class, () ->
+ cupboardService.createNeed(name, location, image, maxGoal, type, urgent, description));
}
@Test
- public void testSearchNeeds() throws IOException, DuplicateKeyException {
+ public void testSearchNeeds() throws IOException {
// Setup
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
Need[] needs = { need };
// When the same id is passed in, our mock User DAO will return the User object
@@ -115,12 +130,16 @@ public class CupboardServiceTest {
}
@Test
- public void testSearchNeedsFail() throws IOException, DuplicateKeyException {
+ public void testSearchNeedsFail() throws IOException {
// Setup
String name = "Jellyfish";
- double maxGoal = 100.00;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
Need[] needs = { need };
// When the same id is passed in, our mock User DAO will return the User object
@@ -134,59 +153,68 @@ public class CupboardServiceTest {
}
@Test
- public void testGetNeed() throws IOException, DuplicateKeyException {
+ public void testGetNeed() throws IOException {
// Setup
String name = "Jellyfish";
- double maxGoal = 100.00;
- int id = 0;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
// When the same id is passed in, our mock User DAO will return the User object
- when(mockCupboardDAO.getNeed(id)).thenReturn(need);
+ when(mockCupboardDAO.getNeed(0)).thenReturn(need);
// Invoke
- Need response = cupboardService.getNeed(id);
+ Need response = cupboardService.getNeed(need.getId());
// Analyze
assertEquals(need, response);
}
@Test
- public void testUpdateNeed() throws IOException, DuplicateKeyException {
+ public void testUpdateNeed() throws IOException {
// Setup
String name = "Jellyfish";
- double maxGoal = 100.00;
- int id = 0;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
- Need newNeed = new Need("Octopus", type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
+ Need newNeed = new Need("Octopus", image, location, maxGoal, type, urgent, description);
// When the same id is passed in, our mock User DAO will return the User object
when(mockCupboardDAO.updateNeed(any())).thenReturn(newNeed);
// Invoke
- Need response = cupboardService.updateNeed(newNeed, id);
+ Need response = cupboardService.updateNeed(newNeed, need.getId());
// Analyze
assertEquals(newNeed, response);
}
@Test
- public void testDeleteNeed() throws IOException, DuplicateKeyException {
+ public void testDeleteNeed() throws IOException {
// Setup
String name = "Jellyfish";
- double maxGoal = 100.00;
- int id = 0;
- GoalType type = GoalType.MONETARY;
- Need need = new Need(name, type, maxGoal);
+ String location = "Atlantis";
+ double maxGoal = 100.0;
+ GoalType type = Need.GoalType.MONETARY;
+ boolean urgent = false;
+ String image = "";
+ String description = "";
+ var need = new Need(name, image, location, maxGoal, type, urgent, description);
// When the same id is passed in, our mock User DAO will return the User object
- when(mockCupboardDAO.deleteNeed(id)).thenReturn(true);
+ when(mockCupboardDAO.deleteNeed(0)).thenReturn(true);
when(mockCupboardDAO.getNeeds()).thenReturn(new Need[0]);
// Invoke
- boolean response = cupboardService.deleteNeed(id);
+ boolean response = cupboardService.deleteNeed(need.getId());
Need[] responseNeeds = cupboardService.getNeeds();
// Analyze
diff --git a/ufund-api/src/test/java/com/ufund/api/ufundapi/service/UserServiceTest.java b/ufund-api/src/test/java/com/ufund/api/ufundapi/service/UserServiceTest.java
index e57c5a3..5adabf1 100644
--- a/ufund-api/src/test/java/com/ufund/api/ufundapi/service/UserServiceTest.java
+++ b/ufund-api/src/test/java/com/ufund/api/ufundapi/service/UserServiceTest.java
@@ -19,13 +19,12 @@ public class UserServiceTest {
private UserService userService;
private UserDAO mockUserDAO;
- private CupboardService mockCupboardService;
@BeforeEach
public void setupUserService() {
mockUserDAO = mock(UserDAO.class);
- mockCupboardService = mock(CupboardService.class);
+ CupboardService mockCupboardService = mock(CupboardService.class);
userService = new UserService(mockUserDAO, mockCupboardService);
}
@@ -47,7 +46,7 @@ public class UserServiceTest {
}
@Test
- public void testCreateUserDuplicate() throws IOException, DuplicateKeyException {
+ public void testCreateUserDuplicate() throws IOException {
// Setup
String username = "Jelly";
String password = "Fish";
@@ -62,7 +61,7 @@ public class UserServiceTest {
}
@Test
- public void testGetUser() throws IOException, DuplicateKeyException {
+ public void testGetUser() throws IOException {
// Setup
String username = "Jelly";
String password = "Fish";
@@ -76,7 +75,7 @@ public class UserServiceTest {
}
@Test
- public void testUpdateUser() throws IOException, DuplicateKeyException {
+ public void testUpdateUser() throws IOException {
// Setup
String username = "Jelly";
String password = "Fish";
@@ -94,7 +93,7 @@ public class UserServiceTest {
}
@Test
- public void testUpdateUserDifferentUsernames() throws IOException, DuplicateKeyException {
+ public void testUpdateUserDifferentUsernames() throws IOException {
// Setup
String username = "Jelly";
String password = "Fish";
@@ -112,7 +111,7 @@ public class UserServiceTest {
}
@Test
- public void testDeleteUser() throws IOException, DuplicateKeyException {
+ public void testDeleteUser() throws IOException {
// Setup
String username = "Jelly";
String password = "Fish";