Merge branch 'createCalculator' into 'master'

Merge createCalculator branch into master

See merge request cse1105/2018-2019/oopp-group-43/template!41
This commit is contained in:
Ceren Ugurlu
2019-03-25 13:40:13 +00:00
28 changed files with 618 additions and 506 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View File

@@ -12,15 +12,11 @@ import org.springframework.context.ConfigurableApplicationContext;
import java.io.IOException; import java.io.IOException;
//springbootApplication is so Spring knows that this is a Spring application
@SpringBootApplication @SpringBootApplication
public class Application extends javafx.application.Application { public class Application extends javafx.application.Application {
//configurable application is for spring so it knows that it can use it
private static ConfigurableApplicationContext springContext; private static ConfigurableApplicationContext springContext;
//logger to log all the things that happen to the console
private static final Logger log = LoggerFactory.getLogger(Application.class); private static final Logger log = LoggerFactory.getLogger(Application.class);
//launch is to launch the GUI things
public static void main(String[] args) { public static void main(String[] args) {
launch(args); launch(args);
} }
@@ -29,10 +25,8 @@ public class Application extends javafx.application.Application {
* This method takes an url and return a parent. * This method takes an url and return a parent.
* @param url which is being loaded. * @param url which is being loaded.
* @return parent object. * @return parent object.
* @throws IOException if it can't find an FXML file
*/ */
public static Parent load(java.net.URL url) throws IOException { public static Parent load(java.net.URL url) throws IOException {
//loader to load the FXML file
FXMLLoader loader = new FXMLLoader(); FXMLLoader loader = new FXMLLoader();
loader.setControllerFactory(springContext::getBean); loader.setControllerFactory(springContext::getBean);
loader.setLocation(url); loader.setLocation(url);
@@ -41,22 +35,14 @@ public class Application extends javafx.application.Application {
@Override @Override
public void init() throws Exception { public void init() throws Exception {
//run the application
springContext = SpringApplication.run(Application.class); springContext = SpringApplication.run(Application.class);
} }
@Override @Override
public void start(Stage primaryStage) throws Exception { public void start(Stage primaryStage) throws Exception {
//load the fxml file Parent rootNode = load(this.getClass().getClassLoader().getResource("fxml/LoginWindow.fxml"));
Parent rootNode = load(this.getClass().getClassLoader().getResource("fxml/sample.fxml"));
//set the title for the window
primaryStage.setTitle("Greenify"); primaryStage.setTitle("Greenify");
//set the scene
Scene scene = new Scene(rootNode); Scene scene = new Scene(rootNode);
//add the stylesheet
scene.getStylesheets()
.add(getClass().getClassLoader().getResource("stylesheets/LoginWindowStyle.css")
.toExternalForm());
primaryStage.setScene(scene); primaryStage.setScene(scene);
primaryStage.show(); primaryStage.show();
} }

View File

@@ -72,9 +72,6 @@ public class DashBoardController {
activitiesButton.setSkin(new MyButtonSkin(activitiesButton)); activitiesButton.setSkin(new MyButtonSkin(activitiesButton));
userButton.setSkin(new MyButtonSkin(userButton)); userButton.setSkin(new MyButtonSkin(userButton));
friendsButton.setSkin(new MyButtonSkin(friendsButton)); friendsButton.setSkin(new MyButtonSkin(friendsButton));
} }
/** /**
@@ -109,11 +106,7 @@ public class DashBoardController {
* @param event the event (clicking the button) * @param event the event (clicking the button)
*/ */
public void displayActivities(ActionEvent event) { public void displayActivities(ActionEvent event) {
addFadeTransition(activitiesPane); addFadeTransition(activitiesPane);
net = userService.currentUser.getVeganMeal() + count;
totalVeganMealCounter.setText("" + net); totalVeganMealCounter.setText("" + net);
System.out.println("display activities"); System.out.println("display activities");
dashboardPane.setVisible(false); dashboardPane.setVisible(false);
@@ -146,23 +139,6 @@ public class DashBoardController {
} }
/**
* adds a vegetarian meal.
* @param event the event (clicking the button)
*/
public void addVeganMeal(ActionEvent event) {
count++;
net = userService.currentUser.getVeganMeal() + count;
totalVeganMealCounter.setText("" + net);
veganMealCounter.setText("" + count);
System.out.println(userService);
userService.addVeganMeal(userService.currentUser.getId(),
userService.currentUser.getName());
System.out.println("Vegetarian meal is added");
}
//sets the slide in transition for startup //sets the slide in transition for startup
public void addSlideTransition(Node node, Line path1) { public void addSlideTransition(Node node, Line path1) {
PathTransition pathTrans = new PathTransition(Duration.millis(1100), path1, node); PathTransition pathTrans = new PathTransition(Duration.millis(1100), path1, node);
@@ -194,4 +170,4 @@ public class DashBoardController {
button.setOnMouseExited(e -> scaleDown.playFromStart()); button.setOnMouseExited(e -> scaleDown.playFromStart());
} }
} }
} }

View File

@@ -82,7 +82,7 @@ public class UserController {
public void openDashboard() throws IOException { public void openDashboard() throws IOException {
//load the fxml file //load the fxml file
Parent dash = Application.load(this.getClass().getClassLoader() Parent dash = Application.load(this.getClass().getClassLoader()
.getResource("fxml/dashboard.fxml")); .getResource("fxml/dashboard.fxml"));
Scene scene = new Scene(dash); Scene scene = new Scene(dash);
//add the stylesheet for the CSS //add the stylesheet for the CSS
scene.getStylesheets().add(getClass().getClassLoader() scene.getStylesheets().add(getClass().getClassLoader()

View File

@@ -80,27 +80,18 @@ public class UserService {
return result; return result;
} }
/**
* a user adds vegan meal.
* @param id the id of the user
* @param name the username of the user
* @return a userDTO
*/
@SuppressWarnings("Duplicates") @SuppressWarnings("Duplicates")
public UserDto addVeganMeal(Long id, String name) { public String updateInput(String name, String inputName, String value) {
//this method is almost the same as the registerUser one, but with a different link
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/addVeganMeal") UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/setInput")
.queryParam("id", id) .queryParam("name", name)
.queryParam("name", name); .queryParam("inputName", inputName)
.queryParam("value",value);
HttpEntity<?> entity = new HttpEntity<>(headers); HttpEntity<?> entity = new HttpEntity<>(headers);
System.out.println(builder.build().encode().toUri()); System.out.println(builder.build().encode().toUri());
return this.restTemplate.getForObject(builder.build().encode().toUri(), UserDto.class); String result = this.restTemplate.getForObject(builder.build()
} .encode().toUri(), String.class);
return result;
@RequestMapping("/userData")
public int getVeganData(@RequestParam(value = "veganMeal") int veganMeal) {
return veganMeal;
} }
} }

View File

@@ -1,14 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.image.Image?> <?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?> <?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.*?> <?import javafx.scene.text.*?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="602.0" prefWidth="934.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="greenify.client.controller.UserController"> <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="602.0" prefWidth="934.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="greenify.client.controller.UserController">
<children> <children>
<ImageView fitHeight="600.0" fitWidth="943.0" layoutX="-1.0" pickOnBounds="true"> <ImageView fitHeight="600.0" fitWidth="943.0" layoutX="-1.0" pickOnBounds="true">
@@ -36,3 +32,4 @@
<TextField fx:id="usernameField" layoutX="319.0" layoutY="154.0" prefHeight="42.0" prefWidth="303.0" promptText="Username" /> <TextField fx:id="usernameField" layoutX="319.0" layoutY="154.0" prefHeight="42.0" prefWidth="303.0" promptText="Username" />
</children> </children>
</AnchorPane> </AnchorPane>

View File

@@ -1,21 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?> <?import javafx.scene.shape.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.*?> <?import javafx.scene.text.*?>
<AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="greenify.client.controller.RegisterWindowController"> <AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="greenify.client.controller.RegisterWindowController">
<children> <children>
<Line fx:id="uNamePathLine" endX="100.0" layoutX="2.0" layoutY="109.0" startX="-100.0" /> <Line fx:id="uNamePathLine" endX="100.0" layoutX="2.0" layoutY="109.0" startX="-100.0" />
<ImageView fitHeight="312.0" fitWidth="300.0" pickOnBounds="true" preserveRatio="true"> <ImageView fitHeight="312.0" fitWidth="300.0" pickOnBounds="true" preserveRatio="true">
<image> <image>
<Image url="@../registerBackground.png" /> <Image url="@../registerBackground.png" />

View File

@@ -1,22 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.image.*?> <?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?> <?import javafx.scene.shape.*?>
<?import javafx.scene.text.*?> <?import javafx.scene.text.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Line?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<AnchorPane prefHeight="602.0" prefWidth="934.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="greenify.client.controller.DashBoardController"> <AnchorPane prefHeight="602.0" prefWidth="934.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="greenify.client.controller.DashBoardController">
<children> <children>
@@ -229,10 +217,10 @@
</font> </font>
</Text> </Text>
<TableView fx:id="friendsTable" layoutX="60.0" layoutY="130.0" prefHeight="426.0" prefWidth="216.0" style="-fx-background-color: #e1fcd9;"> <TableView fx:id="friendsTable" layoutX="60.0" layoutY="130.0" prefHeight="426.0" prefWidth="216.0" style="-fx-background-color: #e1fcd9;">
<columns> <columns>
<TableColumn fx:id="friendsColumn" prefWidth="107.0" text="Friend" /> <TableColumn fx:id="friendsColumn" prefWidth="107.0" text="Friend" />
<TableColumn fx:id="scoreColumn" prefWidth="108.0" text="Score" /> <TableColumn fx:id="scoreColumn" prefWidth="108.0" text="Score" />
</columns> </columns>
</TableView> </TableView>
</children> </children>
</AnchorPane> </AnchorPane>

View File

@@ -14,7 +14,6 @@ import org.springframework.web.client.RestTemplate;
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
public class UserServiceTest { public class UserServiceTest {
//logger that logs everything to the console
private static Logger logger = LoggerFactory.getLogger(UserServiceTest.class); private static Logger logger = LoggerFactory.getLogger(UserServiceTest.class);
@Mock @Mock
@@ -26,8 +25,7 @@ public class UserServiceTest {
@Test @Test
public void userRegisterTest() throws Exception { public void userRegisterTest() throws Exception {
//tests if registering works UserDto testUser = new UserDto(1L, "Eric");
UserDto testUser = new UserDto(1L, "Eric", 0);
Mockito.when(restTemplate.getForObject(new java.net.URI("http://localhost:8080/registerUser?name=Eric&password=password"), Mockito.when(restTemplate.getForObject(new java.net.URI("http://localhost:8080/registerUser?name=Eric&password=password"),
UserDto.class)) UserDto.class))
.thenReturn(testUser); .thenReturn(testUser);
@@ -38,25 +36,13 @@ public class UserServiceTest {
@Test @Test
public void userLoginTest() throws Exception { public void userLoginTest() throws Exception {
//tests if logging in works UserDto testUser = new UserDto(1L, "Eric");
UserDto testUser = new UserDto(1L, "Eric", 0);
Mockito.when(restTemplate.getForObject(new java.net.URI("http://localhost:8080/loginUser?name=Eric&password=password"), Mockito.when(restTemplate.getForObject(new java.net.URI("http://localhost:8080/loginUser?name=Eric&password=password"),
UserDto.class)) UserDto.class))
.thenReturn(testUser); .thenReturn(testUser);
UserDto user = userService.loginUser("Eric", "password"); UserDto user = userService.loginUser("Eric", "password");
Assert.assertEquals(testUser, user); Assert.assertEquals(testUser, user);
} }
@Test
public void addVeganMealTest() throws Exception {
//tests if adding a vegetarian meal works
UserDto testUser = new UserDto(1L, "Eric", 0);
Mockito.when(restTemplate.getForObject(new java.net.URI("http://localhost:8080/addVeganMeal?id=1&name=Eric"),
UserDto.class))
.thenReturn(testUser);
UserDto user = userService.addVeganMeal(1L, "Eric");
Assert.assertEquals(testUser, user);
}
} }

View File

@@ -1,91 +0,0 @@
package greenify.common;
public class ActivityDto {
private Long id;
private String name;
private String description;
private int score;
public ActivityDto() {
}
/**
* Constructor for ActivityDto.
* @param id id of the activity
* @param name name of the activity
* @param description description of the activity
* @param score score of the activity
*/
public ActivityDto(Long id, String name, String description, int score) {
this.id = id;
this.name = name;
this.description = description;
this.score = score;
}
//all the getters and setters of the class
/**
* gets the name of the activity.
* @return the name of the activity
*/
public String getName() {
return name;
}
/**
* sets the name of the activity.
* @param name the name to be set of the activity.
*/
public void setName(String name) {
this.name = name;
}
/**
* gets the id of the activity.
* @return the id of the activity.
*/
public Long getId() {
return id;
}
/**
* sets the id of the activity.
* @param id the id to be set of the activity.
*/
public void setId(Long id) {
this.id = id;
}
/**
* gets the description of the activity.
* @return the description of the activity.
*/
public String getDescription() {
return description;
}
/**
* sets the description of the activity.
* @param description the description to be set of the activity.
*/
public void setDescription(String description) {
this.description = description;
}
/**
* gets the score of the activity.
* @return the score of the activity.
*/
public int getScore() {
return score;
}
/**
* sets the score of the activity.
* @param score the score to be set of the activity.
*/
public void setScore(int score) {
this.score = score;
}
}

View File

@@ -7,7 +7,6 @@ package greenify.common;
public class UserDto { public class UserDto {
private Long id; private Long id;
private String name; private String name;
private int veganMeal;
public UserDto() { public UserDto() {
} }
@@ -16,12 +15,10 @@ public class UserDto {
* The constructor method of UserDto. * The constructor method of UserDto.
* @param id of the user * @param id of the user
* @param name of the user * @param name of the user
* @param veganMeal the number of vegetarian meals eaten
*/ */
public UserDto(Long id, String name, int veganMeal) { public UserDto(Long id, String name) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.veganMeal = veganMeal;
} }
public String getName() { public String getName() {
@@ -39,12 +36,4 @@ public class UserDto {
public void setId(Long id) { public void setId(Long id) {
this.id = id; this.id = id;
} }
public int getVeganMeal() {
return veganMeal;
}
public void setVeganMeal(int veganMeal) {
this.veganMeal = veganMeal;
}
} }

View File

@@ -1,31 +0,0 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import greenify.common.ActivityDto;
import org.junit.Test;
public class ActivityDtoTest {
@Test
public void setAndGetTest() {
ActivityDto testActivity = new ActivityDto();
testActivity.setId(1L);
testActivity.setName("eatVeganMeal");
testActivity.setDescription("User adds a vegan meal");
testActivity.setScore(10);
ActivityDto activity = new ActivityDto(1L, "eatVeganMeal", "User adds a vegan meal", 10);
assertTrue(activity.getId() == 1L);
assertEquals(activity.getName(), "eatVeganMeal");
assertEquals(activity.getDescription(), "User adds a vegan meal");
assertEquals(activity.getScore(), 10);
}
@Test
public void equalsTest() {
ActivityDto first = new ActivityDto(1L, "eatVeganMeal", "User adds a vegan meal", 10);
ActivityDto second = new ActivityDto(1L, "eatVeganMeal", "User adds a vegan meal", 10);
assertEquals(first.getId(), second.getId());
assertEquals(first.getName(), second.getName());
assertEquals(first.getDescription(), second.getDescription());
assertEquals(first.getScore(), second.getScore());
}
}

View File

@@ -10,17 +10,15 @@ public class UserDtoTest {
UserDto testUser = new UserDto(); UserDto testUser = new UserDto();
testUser.setId(1L); testUser.setId(1L);
testUser.setName("greenify"); testUser.setName("greenify");
testUser.setVeganMeal(0); UserDto user = new UserDto(1L, "greenify");
UserDto user = new UserDto(1L, "greenify", 0);
assertTrue(user.getId() == 1L); assertTrue(user.getId() == 1L);
assertEquals(user.getName(), "greenify"); assertEquals(user.getName(), "greenify");
assertTrue(user.getVeganMeal() == 0);
} }
@Test @Test
public void equalsTest() { public void equalsTest() {
UserDto first = new UserDto(1L, "greenify", 0); UserDto first = new UserDto(1L, "greenify");
UserDto second = new UserDto(1L, "greenify", 0); UserDto second = new UserDto(1L, "greenify");
assertEquals(first.getId(), second.getId()); assertEquals(first.getId(), second.getId());
assertEquals(first.getName(), second.getName()); assertEquals(first.getName(), second.getName());
} }

View File

@@ -0,0 +1,59 @@
package greenify.server;
public class InputItem {
private String name;
private Boolean isFloat;
private String defaultValue;
private Boolean isPresentByDefault = true;
/**
* Constructor for input items.
* @param name of the input
* @param isFloat whether it is float or not
* @param defaultValue states the value
*/
public InputItem(String name, boolean isFloat, String defaultValue) {
this.name = name;
this.isFloat = isFloat;
this.defaultValue = defaultValue;
}
/**
* Constructor for input items.
* @param name of the input
* @param isFloat whether it is float or not
* @param defaultValue states the value
* @param isPresentByDefault for different number of cars
*/
public InputItem(String name, Boolean isFloat, String defaultValue,
Boolean isPresentByDefault) {
this.name = name;
this.isFloat = isFloat;
this.defaultValue = defaultValue;
this.isPresentByDefault = isPresentByDefault;
}
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getFloat() {
return isFloat;
}
public void setFloat(Boolean isFloat) {
this.isFloat = isFloat;
}
}

View File

@@ -0,0 +1,87 @@
package greenify.server;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class InputValidator {
private static final List<InputItem> inputItems = Arrays.asList(
new InputItem("input_size", false, "1"),
new InputItem("input_income", false, "40000"),
new InputItem("transportation_num_vehicles", false, "1" ),
new InputItem("transportation_miles1", false, "16100", false),
new InputItem("transportation_fuels1", false, "2" , false),
new InputItem("transportation_mpg1", false, null, false ),
new InputItem("transportation_miles2", false, "13200", false ),
new InputItem("transportation_fuels2", false, "0" , false),
new InputItem("transportation_mpg2", false, "22" ,false),
new InputItem("transportation_publicTrans", false, "436" ),
new InputItem("transportation_air", false, "3900" ),
new InputItem("housing_electricity_kwh_year", false, "12632" ),
new InputItem("housing_cleanPercent", false, "0" ),
new InputItem("housing_naturalGas_therms_year", false, "472" ),
new InputItem("housing_heatingOil_gallons_year", false, "73" ),
new InputItem("housing_square_feet", false, "1850" ),
new InputItem("housing_water_sewage", false, "100" ),
new InputItem("food_meat_fish_eggs", true, "2.4" ),
new InputItem("food_grains", true, "4.1" ),
new InputItem("food_dairy", true, "2.2" ),
new InputItem("food_fruit_vegetables", true, "3.5" ),
new InputItem("food_snacks_drinks", true, "3.4" ),
new InputItem("shopping_goods", false, "1310" ),
new InputItem("shopping_services", false, "2413" )
);
/**
* The method checks that the id is valid or not.
* @param inputName the name of input
* @return true or false
*/
public static Boolean isValidItem(String inputName) {
return inputItems.stream().filter(i -> i.getName() == inputName).findAny().isPresent();
}
/**
* The method checks that the item value is valid or not.
* @param inputName the name of input
* @param value the value of item
* @return true or false
*/
public static boolean isValidItemValue(String inputName, String value) {
InputItem item = null;
for (int i = 0; i < inputItems.size(); i++) {
if (inputItems.get(i).getName() == inputName) {
item = inputItems.get(i);
}
}
if (item.getFloat()) {
try {
Float number = Float.parseFloat(value);
} catch (NumberFormatException | NullPointerException nfe) {
return false;
}
return true;
} else {
try {
Integer number = Integer.parseInt(value);
} catch (NumberFormatException | NullPointerException nfe) {
return false;
}
return true;
}
}
/**
* getter for default values.
* @return the map of default values
*/
public static Map<String, String> getDefaultValues() {
Map<String,String> map = new HashMap<String, String>(){};
for (int i = 0; i < inputItems.size(); i++) {
map.put(inputItems.get(i).getName(), inputItems.get(i).getDefaultValue());
}
return map;
}
}

View File

@@ -1,130 +0,0 @@
package greenify.server.data.model;
import lombok.Data;
import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Data
@Table(name = "activities")
public class Activity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
String name;
String description;
int score;
/**
* makes an activity object.
* @param id the id of the activity.
* @param name the name of the feature.
* @param description the description of the feature.
* @param score the amount of points a user gets for doing this activity.
*/
public Activity(long id, String name, String description, int score) {
this.id = id;
this.name = name;
this.description = description;
this.score = score;
}
/**
* gets the id.
* @return the id
*/
public Long getId() {
return id;
}
/**
* gets the name.
* @return the name
*/
public String getName() {
return name;
}
/**
* gets the description.
* @return the description
*/
public String getDescription() {
return description;
}
/**
* gets the score.
* @return the score
*/
public int getScore() {
return score;
}
/**
* sets the id.
* @param id the you want to assign to this.id.
*/
public void setId(Long id) {
this.id = id;
}
/**
* sets the name.
* @param name the you want to assign to this.name.
*/
public void setName(String name) {
this.name = name;
}
/**
* sets the description.
* @param description the description to be set.
*/
public void setDescription(String description) {
this.description = description;
}
/**
* sets the score you get for an activity.
* @param score the you want to assign to the activity.
*/
public void setScore(int score) {
this.score = score;
}
/**
* Returns a human readable object. It's in JSON.
* @return the JSON form of the object.
*/
@Override
public String toString() {
return "Activity(id=" + this.id + ", name=" + this.name + ", description="
+ this.description + ", score=" + this.score + ")";
}
@Override
public boolean equals(Object other) {
if (other instanceof Activity) {
Activity that = (Activity)other;
if (that.id == this.id && that.name.equals(this.name)
&& that.description.equals(this.description) && that.score == this.score) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(id, name, description, score);
}
}

View File

@@ -1,8 +1,13 @@
package greenify.server.data.model; package greenify.server.data.model;
import greenify.server.InputValidator;
import lombok.Data; import lombok.Data;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import javax.persistence.ElementCollection;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType; import javax.persistence.GenerationType;
@@ -25,7 +30,11 @@ public class User {
@NotNull @NotNull
private String password; private String password;
private int veganMeal; @NotNull
private Float footPrint = 0.0f;
@ElementCollection
private Map<String,String> footPrintInputs = new HashMap<>();
public User() {} public User() {}
@@ -34,13 +43,12 @@ public class User {
* @param id the id of the user. * @param id the id of the user.
* @param name the supplied username * @param name the supplied username
* @param password the supplied password * @param password the supplied password
* @param veganMeal the supplied number of vegan meal
*/ */
public User(Long id, String name, String password, int veganMeal) { public User(Long id, String name, String password) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.password = password; this.password = password;
this.veganMeal = veganMeal; this.setFootPrintInputs(InputValidator.getDefaultValues());
} }
/** /**
@@ -80,15 +88,23 @@ public class User {
} }
/** /**
* gets the number of vegan meal. * gets the footPrint of user.
* @return the veganMeal * @return the footPrint
*/ */
public int getVeganMeal() { public Float getFootPrint() {
return veganMeal; return footPrint;
} }
public void setVeganMeal(int veganMeal) { public Map<String, String> getFootPrintInputs() {
this.veganMeal = veganMeal; return footPrintInputs;
}
public void setFootPrintInputs(Map<String, String> footPrintInputs) {
this.footPrintInputs = footPrintInputs;
}
public void setFootPrint(Float footPrint) {
this.footPrint = footPrint;
} }
@@ -99,7 +115,7 @@ public class User {
@Override @Override
public String toString() { public String toString() {
return "User(id=" + this.id + ", name=" + this.name + ", password=" return "User(id=" + this.id + ", name=" + this.name + ", password="
+ this.password + ", veganMeal=" + this.veganMeal + ")"; + this.password + ")";
} }
@Override @Override
@@ -107,7 +123,7 @@ public class User {
if (other instanceof User) { if (other instanceof User) {
User that = (User)other; User that = (User)other;
if (that.id == this.id && that.name.equals(this.name) if (that.id == this.id && that.name.equals(this.name)
&& that.password.equals(this.password) && that.veganMeal == this.veganMeal) { && that.password.equals(this.password)) {
return true; return true;
} }
} }
@@ -116,6 +132,6 @@ public class User {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(id, name, password, veganMeal); return Objects.hash(id, name, password);
} }
} }

View File

@@ -1,49 +1,33 @@
package greenify.server.rest; package greenify.server.rest;
import greenify.common.UserDto; import greenify.common.UserDto;
import greenify.server.data.model.User;
import greenify.server.data.repository.UserRepository;
import greenify.server.service.UserService; import greenify.server.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
//class that controls the user with regards to the server and sending data between them
//this class kind of 'redirects' the requests from the client to the server
@RestController @RestController
public class UserController { public class UserController {
@Autowired @Autowired
UserService userService; UserService userService;
//registers a user in the userService
@RequestMapping("/registerUser") @RequestMapping("/registerUser")
//requestMapping is for the communication (GET, POST, PUT requests)
//as with Web and Database Technology
public UserDto registerUser(@RequestParam(value = "name") String name, public UserDto registerUser(@RequestParam(value = "name") String name,
@RequestParam(value = "password") String password) { @RequestParam(value = "password") String password) {
//the requestParams are the parameters that are sent with the request
//so in this case that it wants to register with the name and password
return userService.registerUser(name, password); return userService.registerUser(name, password);
} }
//logs a user in in the userService
@RequestMapping("/loginUser") @RequestMapping("/loginUser")
public UserDto loginUser(@RequestParam(value = "name") String name, public UserDto loginUser(@RequestParam(value = "name") String name,
@RequestParam(value = "password") String password) { @RequestParam(value = "password") String password) {
return userService.loginUser(name, password); return userService.loginUser(name, password);
} }
@RequestMapping("/setInput")
public void setInput(@RequestParam(value = "name") String name,
/** @RequestParam(value = "inputName") String inputName,
* adds a vegetarian meal to the user. @RequestParam(value = "value") String value) {
* @param id the id of the user userService.setInput(name, inputName, value);
* @param name thr username of the user
*/
@RequestMapping("/addVeganMeal")
public void addVeganMeal(@RequestParam(value = "id") Long id,
@RequestParam(value = "name") String name) {
//here the requestParams are the id and name, because that is needed for the
//addVeganMeal method of the userService
userService.addVeganMeal(id, name);
} }
} }

View File

@@ -0,0 +1,67 @@
package greenify.server.service;
import greenify.server.data.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.Map;
@Service
public class CalculatorService {
Logger logger = LoggerFactory.getLogger(UserService.class);
@Autowired
RestTemplate restTemplate;
@Bean
RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
protected Float invokeExternalService(Map<String, String> map) {
/**
* curl -X GET "https://apis.berkeley.edu/coolclimate/footprint-sandbox?input_location_mode=1
* &input_location=48001&input_income=1&input_size=0&input_footprint_transportation_miles1=3
* &input_footprint_transportation_mpg1=5&input_footprint_transportation_fuel1=0"
* -H "accept: application/json" -H "app_id: a98272e3"
* -H "app_key: b9167c4918cb2b3143614b595065d83b"
*/
HttpHeaders headers = new HttpHeaders();
headers.set("accept", MediaType.APPLICATION_JSON_VALUE);
headers.set("app_id", "a98272e3");
headers.set("app_key", "b9167c4918cb2b3143614b595065d83b");
HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
UriComponentsBuilder builder =
UriComponentsBuilder.fromHttpUrl("https://apis.berkeley.edu/coolclimate/footprint-sandbox");
for (String inputId : map.keySet()) {
builder = builder.queryParam(inputId, map.get(inputId));
}
ResponseEntity<String> response = restTemplate
.exchange(builder.build().encode().toUri(), HttpMethod.GET,
entity, String.class);
logger.info(response.getStatusCode().toString());
logger.info(response.getBody());
String result = response.getBody().substring(response.getBody()
.indexOf("<result_grand_total>")
+ 20, response.getBody().indexOf("</result_grand_total>"));
// to do: in not HTTP 200 or exception case throws exception
System.out.println(Float.parseFloat(result));
return Float.parseFloat(result);
}
public Float calculateFootprint(User user) {
return invokeExternalService(user.getFootPrintInputs());
}
}

View File

@@ -2,6 +2,7 @@ package greenify.server.service;
import greenify.common.ApplicationException; import greenify.common.ApplicationException;
import greenify.common.UserDto; import greenify.common.UserDto;
import greenify.server.InputValidator;
import greenify.server.data.model.User; import greenify.server.data.model.User;
import greenify.server.data.repository.UserRepository; import greenify.server.data.repository.UserRepository;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -11,14 +12,15 @@ import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
//userService class that gets used by the server to handle requests for users
@Service @Service
public class UserService { public class UserService {
Logger logger = LoggerFactory.getLogger(UserService.class); Logger logger = LoggerFactory.getLogger(UserService.class);
@Autowired @Autowired
UserRepository userRepository; UserRepository userRepository;
//userRepository to talk with the database
@Autowired
CalculatorService calculatorService;
/** /**
* registers the user. * registers the user.
@@ -28,17 +30,15 @@ public class UserService {
*/ */
public UserDto registerUser(String name, String password) { public UserDto registerUser(String name, String password) {
User user = userRepository.findByName(name); User user = userRepository.findByName(name);
//find the name of the user in the database
if (user == null) { if (user == null) {
user = new User(null, name, password, 0); user = new User(null, name, password);
//if the user isn't already in the database, save it in there user.setFootPrintInputs(InputValidator.getDefaultValues());
userRepository.save(user); userRepository.save(user);
} else { } else {
throw new ApplicationException("User already exists"); throw new ApplicationException("User already exists");
} }
logger.info("Created user id=" + user.getId() + ", name=" + user.getName()); logger.info("Created user id=" + user.getId() + ", name=" + user.getName());
//return a transferable user object that has been saved return new UserDto(user.getId(), user.getName());
return new UserDto(user.getId(), user.getName(), user.getVeganMeal());
} }
/** /**
@@ -49,34 +49,56 @@ public class UserService {
*/ */
public UserDto loginUser(String name, String password) { public UserDto loginUser(String name, String password) {
User user = userRepository.findByName(name); User user = userRepository.findByName(name);
//again find the name
if (user == null) { if (user == null) {
throw new ApplicationException("User does not exist"); throw new ApplicationException("User does not exist");
//if it doesn't exist or the password is wrong, throw an exception
} else { } else {
if (!user.getPassword().equals(password)) { if (!user.getPassword().equals(password)) {
throw new ApplicationException("Wrong password"); throw new ApplicationException("Wrong password");
} }
} }
//return a transferable user object that has been logged in return new UserDto(user.getId(), user.getName());
return new UserDto(user.getId(), user.getName(), user.getVeganMeal());
} }
/** /**
* add vegan meal to the user. * The method sets input value.
* @param id the id of the user * @param name of the user
* @param name the name of the user * @param inputName is the name of the setting input
* @param value of the input
*/ */
public void addVeganMeal(Long id, String name) { public void setInput(String name, String inputName, String value) {
User user = userRepository.findByName(name); User user = userRepository.findByName(name);
int count = user.getVeganMeal(); if (user == null) {
//find the user and update their vegetarian meal count throw new ApplicationException("User does not exist");
count++; } else {
user.setVeganMeal(count); if (InputValidator.isValidItem(inputName)
//save it to the database && InputValidator.isValidItemValue(inputName, value)) {
userRepository.save(user); user.getFootPrintInputs().put(inputName, value);
logger.info("Added vegan meal to user(id=" + user.getId() user.setFootPrint(calculatorService.calculateFootprint(user));
+ ", name=" + user.getName() + ")"); } else {
throw new ApplicationException("Invalid input");
}
}
}
/**
* Gets the input value of an input.
* @param name of the user
* @param inputName name of the input
* @return input value
*/
public String getInput(String name, String inputName) {
User user = userRepository.findByName(name);
if (InputValidator.isValidItem(inputName)) {
String item = user.getFootPrintInputs().get(inputName);
return item;
} else {
throw new ApplicationException("Invalid input");
}
}
public Float getFootprint(String name) {
User user = userRepository.findByName(name);
return calculatorService.calculateFootprint(user);
} }
@GetMapping(path = "/all") @GetMapping(path = "/all")

View File

@@ -0,0 +1,59 @@
import greenify.server.InputValidator;
import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class InputValidatorTest {
@Test
public void validItemIdTest() {
InputValidator inputValidator = new InputValidator();
Assert.assertEquals(inputValidator.isValidItem("transportation_num_vehicles"), true);
Assert.assertEquals(inputValidator.isValidItem("test"), false);
}
@Test
public void validItemValueTest() {
Assert.assertEquals(true, InputValidator
.isValidItemValue("transportation_num_vehicles", "4"));
Assert.assertEquals(false, InputValidator
.isValidItemValue("transportation_num_vehicles", "3.5"));
Assert.assertEquals(false, InputValidator.isValidItemValue( "food_grains", "hello"));
Assert.assertEquals(true, InputValidator.isValidItemValue("food_grains", "5"));
Assert.assertEquals(true, InputValidator.isValidItemValue("food_grains", "3.5"));
}
@Test
public void getDefaultValuesTest() {
Map<String, String> map = new HashMap<String, String>() {{
put("input_size", "1");
put("input_income", "40000");
put("transportation_num_vehicles", "1");
put("transportation_miles1", "16100");
put("transportation_fuels1", "2");
put("transportation_mpg1", null);
put("transportation_miles2", "13200");
put("transportation_fuels2", "0");
put("transportation_mpg2", "22");
put("transportation_publicTrans", "436");
put("transportation_air", "3900");
put("housing_electricity_kwh_year", "12632");
put("housing_cleanPercent", "0");
put("housing_naturalGas_therms_year", "472");
put("housing_heatingOil_gallons_year", "73");
put("housing_square_feet", "1850");
put("housing_water_sewage", "100");
put("food_meat_fish_eggs", "2.4");
put("food_grains", "4.1");
put("food_dairy", "2.2");
put("food_fruit_vegetables", "3.5");
put("food_snacks_drinks", "3.4");
put("shopping_goods", "1310");
put("shopping_services", "2413");
}
};
Assert.assertEquals(InputValidator.getDefaultValues(), map);
}
}

View File

@@ -1,57 +0,0 @@
package greenify.server.data.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.Test;
public class ActivityTest {
@Test
public void setAndGetTest() {
Activity testActivity = new Activity(0, null, null, 0);
testActivity.setId(1L);
testActivity.setName("Vegetarian");
testActivity.setDescription("Eating");
testActivity.setScore(100);
Activity activity = new Activity(1L, "Vegetarian", "Eating", 100);
assertTrue(activity.getId().equals(1L));
assertEquals(activity.getName(), "Vegetarian");
assertEquals(activity.getDescription(), "Eating");
assertEquals(activity.getScore(), 100);
assertEquals(activity, testActivity);
}
@Test
public void toStringTest() {
Activity activity = new Activity(1, "Solar panels", "Installed", 10000);
assertEquals("Activity(id=1, name=Solar panels, "
+ "description=Installed, score=10000)", activity.toString());
}
@Test
public void equalsTest() {
Activity first = new Activity(1, "Solar panels", "Installed", 10000);
Activity second = new Activity(1, "Solar panels", "Installed", 10000);
assertEquals(first.getId(), second.getId());
assertEquals(first.getName(), second.getName());
assertEquals(first.getDescription(), second.getDescription());
assertEquals(first.getScore(), second.getScore());
assertTrue(first.equals(second));
}
@Test
public void notEqualsTest() {
Activity first = new Activity(1, "Solar panels", "Installed", 10000);
Activity second = new Activity(2, "Solar panels", "Installed", 10000);
assertFalse(first.equals(second));
}
@Test
public void hashCodeTest() {
Activity first = new Activity(1, "Solar panels", "Installed", 10000);
Activity second = new Activity(1, "Solar panels", "Installed", 10000);
assertEquals(first, second);
assertEquals(first.hashCode(), second.hashCode());
}
}

View File

@@ -13,36 +13,54 @@ public class UserTest {
testUser.setId(1L); testUser.setId(1L);
testUser.setName("greenify"); testUser.setName("greenify");
testUser.setPassword("password"); testUser.setPassword("password");
testUser.setVeganMeal(3); User user = new User(1L, "greenify", "password");
User user = new User(1L, "greenify", "password", 3);
assertTrue(user.getId().equals(1L)); assertTrue(user.getId().equals(1L));
assertEquals(user.getName(), "greenify"); assertEquals(user.getName(), "greenify");
assertEquals(user.getPassword(), "password"); assertEquals(user.getPassword(), "password");
assertEquals(user.getVeganMeal(), 3);
assertEquals(user, testUser); assertEquals(user, testUser);
} }
@Test @Test
public void toStringTest() { public void toStringTest() {
User user = new User(1L, "greenify", "password", 3); User user = new User(1L, "greenify", "password");
assertEquals("User(id=1, name=greenify, password=password, veganMeal=3)", user.toString()); assertEquals("User(id=1, name=greenify, password=password)", user.toString());
} }
@Test @Test
public void equalsTest() { public void equalsTest() {
User first = new User(1L, "greenify", "password", 3); User first = new User(1L, "greenify", "password");
User second = new User(1L, "greenify", "password", 3); User second = new User(1L, "greenify", "password");
assertEquals(first.getId(), second.getId()); assertEquals(first.getId(), second.getId());
assertEquals(first.getName(), second.getName()); assertEquals(first.getName(), second.getName());
assertEquals(first.getPassword(), second.getPassword()); assertEquals(first.getPassword(), second.getPassword());
assertEquals(first.getVeganMeal(), second.getVeganMeal());
assertTrue(first.equals(second)); assertTrue(first.equals(second));
} }
@Test
public void equalsDifferentId() {
User first = new User(1L, "greenify", "password");
User second = new User(2L, "greenify", "password");
assertFalse(first.equals(second));
}
@Test
public void equalsDifferentName() {
User first = new User(1L, "greenify", "password");
User second = new User(1L, "hello", "password");
assertFalse(first.equals(second));
}
@Test
public void equalsDifferentPassword() {
User first = new User(1L, "greenify", "password");
User second = new User(1L, "greenify", "hi");
assertFalse(first.equals(second));
}
@Test @Test
public void notEqualsTest() { public void notEqualsTest() {
User first = new User(1L, "greenify", "password", 3); User first = new User(1L, "greenify", "password");
User second = new User(1L, "greenify", "password", 7); User second = new User(2L, "greenify", "password");
assertFalse(first.equals(second)); assertFalse(first.equals(second));
} }
@@ -55,8 +73,8 @@ public class UserTest {
@Test @Test
public void hashCodeTest() { public void hashCodeTest() {
User first = new User(1L, "greenify", "password", 3); User first = new User(1L, "greenify", "password");
User second = new User(1L, "greenify", "password", 3); User second = new User(1L, "greenify", "password");
assertEquals(first, second); assertEquals(first, second);
assertEquals(first.hashCode(), second.hashCode()); assertEquals(first.hashCode(), second.hashCode());
} }

View File

@@ -17,7 +17,7 @@ public class UserRepositoryTest {
@Test @Test
public void findByUsernameTest() throws Exception { public void findByUsernameTest() throws Exception {
repository.save(new User(296L, "cugurlu", "password", 6)); repository.save(new User(296L, "cugurlu", "password"));
User user = this.repository.findByName("cugurlu"); User user = this.repository.findByName("cugurlu");
assertEquals(user.getName(), "cugurlu"); assertEquals(user.getName(), "cugurlu");
} }

View File

@@ -34,7 +34,7 @@ public class UserControllerTest {
@Test @Test
public void registerUserTest() throws Exception { public void registerUserTest() throws Exception {
given(this.userService.registerUser("name", "password")) given(this.userService.registerUser("name", "password"))
.willReturn(new UserDto(1L, "name", 0)); .willReturn(new UserDto(1L, "name"));
mvc.perform(get("/registerUser") mvc.perform(get("/registerUser")
.param("name", "name") .param("name", "name")
.param("password", "password") .param("password", "password")
@@ -46,7 +46,7 @@ public class UserControllerTest {
@Test @Test
public void loginUserTest() throws Exception { public void loginUserTest() throws Exception {
given(this.userService.loginUser("ceren", "password")) given(this.userService.loginUser("ceren", "password"))
.willReturn(new UserDto(1L, "ceren", 0)); .willReturn(new UserDto(1L, "ceren"));
mvc.perform(get("/loginUser") mvc.perform(get("/loginUser")
.param("name", "ceren") .param("name", "ceren")
.param("password", "password") .param("password", "password")
@@ -54,4 +54,9 @@ public class UserControllerTest {
.andDo(print()) .andDo(print())
.andExpect(status().isOk()).andExpect(content().json("{'id':1,'name':'ceren'}")); .andExpect(status().isOk()).andExpect(content().json("{'id':1,'name':'ceren'}"));
} }
@Test
public void setInputTest() throws Exception {
}
} }

View File

@@ -0,0 +1,114 @@
package greenify.server.service;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.header;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.method;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo;
import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus;
import greenify.server.data.model.User;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.client.ExpectedCount;
import org.springframework.test.web.client.MockRestServiceServer;
import org.springframework.web.client.RestTemplate;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
@RunWith(SpringRunner.class)
public class CalculatorServiceTest {
@TestConfiguration
static class CalculatorServiceTestConfiguration {
RestTemplate restTemplate = new RestTemplate();
@Bean
public CalculatorService calculatorService() {
CalculatorService calculatorService = new CalculatorService();
return calculatorService;
}
@Bean
public RestTemplate restTemplate() {
return restTemplate;
}
}
@Autowired
private CalculatorService calculatorService;
@Autowired
private RestTemplate restTemplate;
private MockRestServiceServer mockServer;
@Before
public void init() {
mockServer = MockRestServiceServer.createServer(restTemplate);
}
@Test
public void calculateFootprintTest() throws URISyntaxException {
Map<String,String> map = new HashMap<String, String>() {{
put("input_location_mode", "1");
put("input_location", "48001");
put("input_income", "1");
}
};
User user = new User(1L,"greenify", "password");
user.setFootPrintInputs(map);
mockServer.expect(ExpectedCount.once(),
//requestTo(new URI("https://apis.berkeley.edu/coolclimate/footprint-sandbox")))
requestTo(new URI("https://apis.berkeley.edu/coolclimate/footprint-sandbox?"
+ "input_location=48001&input_location_mode=1&input_income=1")))
.andExpect(method(HttpMethod.GET))
.andExpect(header("app_id", "a98272e3"))
.andExpect(header("app_key", "b9167c4918cb2b3143614b595065d83b"))
.andRespond(withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<response>\n"
+ " <result_motor_vehicles_direct>5.0765</result_motor_vehicles_direct>\n"
+ " <result_motor_vehicles_indirect>1.167595"
+ "</result_motor_vehicles_indirect>\n"
+ " <result_goods_total>2.481474</result_goods_total>\n"
+ " <result_services_total>2.478352</result_services_total>\n"
+ " <result_grand_total>19.259982</result_grand_total>\n"
+ "</response>")
);
Float footPrint = calculatorService.calculateFootprint(user);
mockServer.verify();
Assert.assertEquals(new Float(19.259982), footPrint);
}
@Test
public void invokeExternalServiceTest() {
CalculatorService service = new CalculatorService();
service.restTemplate = new RestTemplate();
Map<String,String> map = new HashMap<String, String>() {{
put("input_location_mode", "1");
put("input_location", "48001");
put("input_income", "1");
put("input_size", "0");
put("input_footprint_transportation_miles1", "3");
put("input_footprint_transportation_mpg1", "5");
put("input_footprint_transportation_fuel1", "0");
}
};
Float footPrint = service.invokeExternalService(map);
Assert.assertEquals(new Float(12.743548), footPrint);
}
}

View File

@@ -1,6 +1,7 @@
package greenify.server.service; package greenify.server.service;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -11,7 +12,6 @@ import greenify.server.data.repository.UserRepository;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
@@ -34,12 +34,15 @@ public class UserServiceTest {
@MockBean @MockBean
private UserRepository userRepository; private UserRepository userRepository;
@MockBean
private CalculatorService calculatorService;
/** /**
* setUp method for test. * setUp method for test.
*/ */
@Before @Before
public void setUp() { public void setUp() {
User alex = new User(1L, "alex", "password", 0); User alex = new User(1L, "alex", "password");
when(userRepository.findByName(alex.getName())) when(userRepository.findByName(alex.getName()))
.thenReturn(alex); .thenReturn(alex);
} }
@@ -52,13 +55,96 @@ public class UserServiceTest {
assertEquals(found.getName(), name); assertEquals(found.getName(), name);
} }
@Test
public void loginExceptionTest() {
assertThrows(ApplicationException.class, () -> {
userService.loginUser("alex", "greenify");
});
}
@Test @Test
public void userRegisterTest() { public void userRegisterTest() {
User user = new User(1L, "name", "password", 0); User user = new User(1L, "name", "password");
UserDto registered = userService.registerUser(user.getName(), user.getPassword()); UserDto registered = userService.registerUser(user.getName(), user.getPassword());
assertEquals(registered.getName(), "name"); assertEquals(registered.getName(), "name");
} }
@Test
public void registerExceptionTest() {
assertThrows(ApplicationException.class, () -> {
userService.registerUser("alex", "password");
});
}
@Test
public void setInputTest() {
User alex = new User(1L, "alex", "password");
when(userRepository.findByName(alex.getName()))
.thenReturn(alex);
userService.setInput("alex", "food_grains", "6.5");
assertEquals("6.5", alex.getFootPrintInputs().get("food_grains"));
}
@Test
public void setInputNullTest() {
assertThrows(ApplicationException.class, () -> {
userService.setInput(null, "hello", "5.5");
});
}
@Test
public void setInputApplicationTestItem() {
assertThrows(ApplicationException.class, () -> {
userService.setInput("alex", "hello", "3.5");
});
}
@Test
public void setInputApplicationTestValue() {
assertThrows(ApplicationException.class, () -> {
userService.setInput("alex", "transportation_num_vehicles", "5.5");
});
}
@Test
public void setInputFootprintTest() {
User alex = new User(1L, "alex", "password");
when(userRepository.findByName(alex.getName()))
.thenReturn(alex);
when(calculatorService.calculateFootprint(alex))
.thenReturn(15f);
userService.setInput("alex", "food_grains", "6.5");
assertTrue(15f == alex.getFootPrint());
}
@Test
public void getInputTest() {
User alex = new User(1L, "alex", "password");
when(userRepository.findByName(alex.getName()))
.thenReturn(alex);
userService.setInput("alex", "food_grains", "6.5");
assertEquals("6.5", userService.getInput("alex", "food_grains"));
}
@Test
public void getInputExceptionTest() {
assertThrows(ApplicationException.class, () -> {
userService.getInput("alex", "hello");
});
}
@Test
public void getFootprintTest() {
User alex = new User(1L, "alex", "password");
when(userRepository.findByName(alex.getName()))
.thenReturn(alex);
when(calculatorService.calculateFootprint(alex))
.thenReturn(15f);
userService.setInput("alex", "food_grains", "6.5");
assertTrue(15f == userService.getFootprint("alex"));
}
@Test @Test
public void getAllUserTest() { public void getAllUserTest() {
assertEquals(userRepository.findAll(), userService.getAllUsers()); assertEquals(userRepository.findAll(), userService.getAllUsers());