aboutsummaryrefslogtreecommitdiff
path: root/ufund-api
diff options
context:
space:
mode:
Diffstat (limited to 'ufund-api')
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/controller/CupboardController.java21
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/controller/UserController.java2
-rw-r--r--ufund-api/src/main/java/com/ufund/api/ufundapi/model/Need.java18
-rw-r--r--ufund-api/src/test/java/com/ufund/api/ufundapi/controller/CupboardControllerTest.java48
4 files changed, 68 insertions, 21 deletions
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 12fb0a9..5452c81 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
@@ -1,6 +1,7 @@
package com.ufund.api.ufundapi.controller;
import java.io.IOException;
+import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -189,12 +190,22 @@ public class CupboardController {
* @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);
+ public ResponseEntity<Object> checkoutNeeds(@RequestBody List<Map<String, Integer>> data, @RequestHeader("jelly-api-key") String key) {
+ LOG.log(Level.INFO, "PUT /cupboard/checkout body={0}", data);
try {
- cupboardService.checkoutNeed(needID, checkoutAmount, key);
+ authService.keyIsValid(key);
+
+ for (Map<String, Integer> map : data) {
+ int needID = map.get("needID");
+ if (cupboardService.getNeed(needID) == null) {
+ return new ResponseEntity<>("One or more needs are invalid, please refresh.", HttpStatus.BAD_REQUEST);
+ }
+ }
+ for (Map<String, Integer> map : data) {
+ int needID = map.get("needID");
+ int checkoutAmount = map.get("quantity");
+ cupboardService.checkoutNeed(needID, checkoutAmount, key);
+ }
return new ResponseEntity<>(HttpStatus.OK);
} catch (IllegalArgumentException ex) {
LOG.log(Level.WARNING, ex.getLocalizedMessage());
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 c6e622c..6953276 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
@@ -108,7 +108,7 @@ public class UserController {
try {
authService.keyHasAccessToCupboard(key);
- int count = userService.getUserCount();
+ String count = String.valueOf(userService.getUserCount());
return new ResponseEntity<>(count, HttpStatus.OK);
} catch (IllegalAccessException ex) {
LOG.log(Level.WARNING, ex.getLocalizedMessage());
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 9b6170b..d3b3065 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
@@ -2,6 +2,8 @@ package com.ufund.api.ufundapi.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.Arrays;
+
public class Need {
public enum GoalType {
@@ -129,4 +131,20 @@ public class Need {
public void setID(int id){
this.id = id;
}
+
+ @Override
+ public String toString() {
+ return "Need{" +
+ "name='" + name + '\'' +
+ ", image='" + image + '\'' +
+ ", location='" + location + '\'' +
+ ", id=" + id +
+ ", filterAttributes=" + Arrays.toString(filterAttributes) +
+ ", type=" + type +
+ ", maxGoal=" + maxGoal +
+ ", urgent=" + urgent +
+ ", current=" + current +
+ ", description='" + description + '\'' +
+ '}';
+ }
} \ No newline at end of file
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 8572ec6..7ea4455 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
@@ -1,6 +1,7 @@
package com.ufund.api.ufundapi.controller;
import java.io.IOException;
+import java.util.List;
import java.util.Map;
import static java.util.Map.entry;
@@ -418,12 +419,14 @@ public class CupboardControllerTest {
@Test
public void checkoutNeeds() throws IOException, IllegalAccessException {
+ when(mockCupboardService.getNeed(0)).thenReturn(new Need("name", "image", "location", 0, 10, GoalType.MONETARY, true, "a"));
doNothing().when(mockCupboardService).checkoutNeed(0, 20, key);
-
- Map<String, Integer> needMap = Map.ofEntries(
- entry("needID", 0),
- entry("amount", 20)
+ var needMap = List.of(
+ Map.ofEntries(
+ entry("needID", 0),
+ entry("quantity", 20)
+ )
);
var res = cupboardController.checkoutNeeds(needMap, key);
@@ -435,9 +438,15 @@ public class CupboardControllerTest {
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 needMap = List.of(
+ Map.ofEntries(
+ entry("needID", 0),
+ entry("quantity", 20)
+ ),
+ Map.ofEntries(
+ entry("needID", 2),
+ entry("quantity", 30)
+ )
);
var res = cupboardController.checkoutNeeds(needMap, key);
@@ -447,11 +456,17 @@ public class CupboardControllerTest {
@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)
+ doThrow(new IllegalAccessException()).when(mockAuthService).keyIsValid(key);
+
+ var needMap = List.of(
+ Map.ofEntries(
+ entry("needID", 0),
+ entry("quantity", 20)
+ ),
+ Map.ofEntries(
+ entry("needID", 2),
+ entry("quantity", 30)
+ )
);
var res = cupboardController.checkoutNeeds(needMap, key);
@@ -461,11 +476,14 @@ public class CupboardControllerTest {
@Test
public void checkoutNeedsInternalError() throws IOException, IllegalAccessException {
+ when(mockCupboardService.getNeed(0)).thenReturn(new Need("name", "image", "location", 0, 10, GoalType.MONETARY, true, "a"));
doThrow(new IOException()).when(mockCupboardService).checkoutNeed(0, 20, key);
- Map<String, Integer> needMap = Map.ofEntries(
- entry("needID", 0),
- entry("amount", 20)
+ var needMap = List.of(
+ Map.ofEntries(
+ entry("needID", 0),
+ entry("quantity", 20)
+ )
);
var res = cupboardController.checkoutNeeds(needMap, key);