Merge branch 'master' into 'Add_Calculator_to_GUI'

# Conflicts:
#   src/Client/src/main/java/greenify/client/controller/DashBoardController.java
#   src/Client/src/main/resources/fxml/dashboard.fxml

the conflicts were only empty lines on the master
This commit is contained in:
Sem van der Hoeven
2019-03-26 14:04:49 +00:00
47 changed files with 638 additions and 529 deletions

View File

@@ -6,26 +6,6 @@ Run `maven install` ([Intellij](https://www.jetbrains.com/help/idea/2016.3/getti
**Checkstyle**:
Run `maven site`
# Daan Sneep (4849515, dsneep)
![My Picture](https://gitlab.ewi.tudelft.nl/cse1105/2018-2019/oopp-group-43/template/blob/master/Pictures%20Group%20Members/Daan_Sneep.png "The one and only")
## Personal Development Plan
My Core Quadrant is visible ![here](https://gitlab.ewi.tudelft.nl/cse1105/2018-2019/oopp-group-43/template/blob/master/Pictures%20Group%20Members/Daan_Sneep_PDP_Core_Quadrant.PNG)
### G Goal
After completing this project, I want to be able to work on a programming project efficiently with other people. I have never attempted anything of this scale and find that it is a core requirement of becoming a good programmer, as in most companies programming is done within teams, not alone.
### R Reality
With this project I hope to work towards this goal. I have never programmed as a team on this scale, so this project will be the first step towards my goal.
### O Options
During this quarter the project will be my only option towards achieving this goal. If I am unhappy with my progress towards my goal by the end of this quarter, I must try to implement the same structure of teamwork in my next projects, and try to learn from the mistakes I made when working as a team in this project.
### W Will
I will try to make sure to adhere to the structure we establish as a group which describes how we will work together. This way, we all do the work we are supposed to do, and none of us will be overloaded with work. I will also try to make use of all the tools available to us which can improve the quality of programming together (scrum, git, GitLab etc.).
# Merel Steenbergen (masteenbergen)
![Picture:](https://gitlab.ewi.tudelft.nl/cse1105/2018-2019/oopp-group-43/template/blob/master/Pictures%20Group%20Members/Merel_Steenbergen.jpg)
@@ -55,10 +35,10 @@ Actively watching myself and letting my teammates know that they need to be clea
Im just going to keep working on myself and hope my teammates will work with me. It also helps to work in different teams to get a much more diverse experience. Every team is different, so Im just going to wait what this team will bring me and how I will have to adjust myself to make the team efficient.
# Sem van der Hoeven (4896726, semvanderhoeve)
![Picture location](https://gitlab.ewi.tudelft.nl/cse1105/2018-2019/oopp-group-43/template/blob/master/Pictures%20Group%20Members/sem_van_der_hoeven.jpg)
![Picture location](https://gitlab.ewi.tudelft.nl/cse1105/2018-2019/oopp-group-43/template/blob/master/doc/Pictures%20Group%20Members/sem_van_der_hoeven.jpg)
## Personal development plan
![Core quadrant location](https://gitlab.ewi.tudelft.nl/cse1105/2018-2019/oopp-group-43/template/blob/master/Pictures%20Group%20Members/sem_van_der_hoeven_core_quadrant.png)
![Core quadrant location](https://gitlab.ewi.tudelft.nl/cse1105/2018-2019/oopp-group-43/template/blob/master/doc/Pictures%20Group%20Members/sem_van_der_hoeven_core_quadrant.png)
### G - Goal
My goal with this project is most of all to be able to efficiently work with a group of people. This is important to me because I have not worked on a (development) project with a (big) group of people before. I believe I have succeeded in this goal when our project is finished and we have got a passing grade.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 861 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

View File

@@ -4,11 +4,11 @@
> Check if everyone is present:
- ~~Nivard Jansen~~
- ~~Kristin Peneva~~
- [ ] Daan Sneep
- [ ] Merel SteenBergen
- [ ] Ceren Ugurlu
- [ ] Mika Wauben
- [ ] Sem van der Hoeven
- ~~Daan Sneep~~
- [x] Merel SteenBergen
- [x] Ceren Ugurlu
- [x] Mika Wauben
- [x] Sem van der Hoeven
- Chair: Sem van der Hoeven
- Secretary: Merel Steenbergen

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View File

@@ -0,0 +1,13 @@
# Sprint Review
## Main problems Encountered
### Problem 1: Database won't grow
It is difficult to add new columns to the database, but together we will fix this problem.
## Adjustments from previous sprints
We're doing great with starting on time for the demo.
## Adjustments for next sprint
- Speficy tasks a bit more, that way they are easier to follow

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

View File

Binary file not shown.

View File

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

View File

@@ -121,11 +121,7 @@ public class DashBoardController {
* @param event the event (clicking the button)
*/
public void displayActivities(ActionEvent event) {
addFadeTransition(activitiesPane);
net = userService.currentUser.getVeganMeal() + count;
totalVeganMealCounter.setText("" + net);
System.out.println("display activities");
dashboardPane.setVisible(false);
@@ -157,23 +153,6 @@ public class DashBoardController {
friendsPane.setVisible(true);
}
/**
* 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
public void addSlideTransition(Node node, Line path1) {
PathTransition pathTrans = new PathTransition(Duration.millis(1100), path1, node);

View File

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

View File

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

View File

@@ -1,14 +1,10 @@
<?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.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?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">
<children>
<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" />
</children>
</AnchorPane>

View File

@@ -1,21 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?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.*?>
<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>
<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">
<image>
<Image url="@../registerBackground.png" />

View File

@@ -7,17 +7,6 @@
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?>
<?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="702.0" prefWidth="1032.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="greenify.client.controller.DashBoardController">
<children>
@@ -62,7 +51,7 @@
</Text>
<Pane layoutX="20.0" layoutY="93.0" prefHeight="471.0" prefWidth="280.0" style="-fx-background-color: #f4fff4;">
<children>
<Button fx:id="veganMealButton" layoutX="60.0" layoutY="55.0" mnemonicParsing="false" onAction="#addVeganMeal" style="-fx-background-color: #009623; -fx-border-radius: 25px;" text="Eating a vegetarian meal" textFill="#e0ffe1">
<Button fx:id="veganMealButton" layoutX="60.0" layoutY="55.0" mnemonicParsing="false" style="-fx-background-color: #009623; -fx-border-radius: 25px;" text="Eating a vegetarian meal" textFill="#e0ffe1">
<font>
<Font size="14.0" />
</font>
@@ -260,10 +249,10 @@
</font>
</Text>
<TableView fx:id="friendsTable" layoutX="60.0" layoutY="130.0" prefHeight="426.0" prefWidth="216.0" style="-fx-background-color: #e1fcd9;">
<columns>
<TableColumn fx:id="friendsColumn" prefWidth="107.0" text="Friend" />
<TableColumn fx:id="scoreColumn" prefWidth="108.0" text="Score" />
</columns>
<columns>
<TableColumn fx:id="friendsColumn" prefWidth="107.0" text="Friend" />
<TableColumn fx:id="scoreColumn" prefWidth="108.0" text="Score" />
</columns>
</TableView>
</children>
</AnchorPane>

View File

@@ -14,7 +14,6 @@ import org.springframework.web.client.RestTemplate;
@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {
//logger that logs everything to the console
private static Logger logger = LoggerFactory.getLogger(UserServiceTest.class);
@Mock
@@ -26,8 +25,7 @@ public class UserServiceTest {
@Test
public void userRegisterTest() throws Exception {
//tests if registering works
UserDto testUser = new UserDto(1L, "Eric", 0);
UserDto testUser = new UserDto(1L, "Eric");
Mockito.when(restTemplate.getForObject(new java.net.URI("http://localhost:8080/registerUser?name=Eric&password=password"),
UserDto.class))
.thenReturn(testUser);
@@ -38,25 +36,13 @@ public class UserServiceTest {
@Test
public void userLoginTest() throws Exception {
//tests if logging in works
UserDto testUser = new UserDto(1L, "Eric", 0);
UserDto testUser = new UserDto(1L, "Eric");
Mockito.when(restTemplate.getForObject(new java.net.URI("http://localhost:8080/loginUser?name=Eric&password=password"),
UserDto.class))
.thenReturn(testUser);
UserDto user = userService.loginUser("Eric", "password");
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 {
private Long id;
private String name;
private int veganMeal;
public UserDto() {
}
@@ -16,12 +15,10 @@ public class UserDto {
* The constructor method of UserDto.
* @param id 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.name = name;
this.veganMeal = veganMeal;
}
public String getName() {
@@ -39,12 +36,4 @@ public class UserDto {
public void setId(Long 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();
testUser.setId(1L);
testUser.setName("greenify");
testUser.setVeganMeal(0);
UserDto user = new UserDto(1L, "greenify", 0);
UserDto user = new UserDto(1L, "greenify");
assertTrue(user.getId() == 1L);
assertEquals(user.getName(), "greenify");
assertTrue(user.getVeganMeal() == 0);
}
@Test
public void equalsTest() {
UserDto first = new UserDto(1L, "greenify", 0);
UserDto second = new UserDto(1L, "greenify", 0);
UserDto first = new UserDto(1L, "greenify");
UserDto second = new UserDto(1L, "greenify");
assertEquals(first.getId(), second.getId());
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;
import greenify.server.InputValidator;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@@ -25,7 +30,11 @@ public class User {
@NotNull
private String password;
private int veganMeal;
@NotNull
private Float footPrint = 0.0f;
@ElementCollection
private Map<String,String> footPrintInputs = new HashMap<>();
public User() {}
@@ -34,13 +43,12 @@ public class User {
* @param id the id of the user.
* @param name the supplied username
* @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.name = name;
this.password = password;
this.veganMeal = veganMeal;
this.setFootPrintInputs(InputValidator.getDefaultValues());
}
/**
@@ -80,15 +88,23 @@ public class User {
}
/**
* gets the number of vegan meal.
* @return the veganMeal
* gets the footPrint of user.
* @return the footPrint
*/
public int getVeganMeal() {
return veganMeal;
public Float getFootPrint() {
return footPrint;
}
public void setVeganMeal(int veganMeal) {
this.veganMeal = veganMeal;
public Map<String, String> getFootPrintInputs() {
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
public String toString() {
return "User(id=" + this.id + ", name=" + this.name + ", password="
+ this.password + ", veganMeal=" + this.veganMeal + ")";
+ this.password + ")";
}
@Override
@@ -107,7 +123,7 @@ public class User {
if (other instanceof User) {
User that = (User)other;
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;
}
}
@@ -116,6 +132,6 @@ public class User {
@Override
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;
import greenify.common.UserDto;
import greenify.server.data.model.User;
import greenify.server.data.repository.UserRepository;
import greenify.server.service.UserService;
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
public class UserController {
@Autowired
UserService userService;
//registers a user in the userService
@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,
@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);
}
//logs a user in in the userService
@RequestMapping("/loginUser")
public UserDto loginUser(@RequestParam(value = "name") String name,
@RequestParam(value = "password") String password) {
return userService.loginUser(name, password);
}
/**
* adds a vegetarian meal to the user.
* @param id the id of the user
* @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);
@RequestMapping("/setInput")
public void setInput(@RequestParam(value = "name") String name,
@RequestParam(value = "inputName") String inputName,
@RequestParam(value = "value") String value) {
userService.setInput(name, inputName, value);
}
}

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.UserDto;
import greenify.server.InputValidator;
import greenify.server.data.model.User;
import greenify.server.data.repository.UserRepository;
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.ResponseBody;
//userService class that gets used by the server to handle requests for users
@Service
public class UserService {
Logger logger = LoggerFactory.getLogger(UserService.class);
@Autowired
UserRepository userRepository;
//userRepository to talk with the database
@Autowired
CalculatorService calculatorService;
/**
* registers the user.
@@ -28,17 +30,15 @@ public class UserService {
*/
public UserDto registerUser(String name, String password) {
User user = userRepository.findByName(name);
//find the name of the user in the database
if (user == null) {
user = new User(null, name, password, 0);
//if the user isn't already in the database, save it in there
user = new User(null, name, password);
user.setFootPrintInputs(InputValidator.getDefaultValues());
userRepository.save(user);
} else {
throw new ApplicationException("User already exists");
}
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(), user.getVeganMeal());
return new UserDto(user.getId(), user.getName());
}
/**
@@ -49,34 +49,56 @@ public class UserService {
*/
public UserDto loginUser(String name, String password) {
User user = userRepository.findByName(name);
//again find the name
if (user == null) {
throw new ApplicationException("User does not exist");
//if it doesn't exist or the password is wrong, throw an exception
} else {
if (!user.getPassword().equals(password)) {
throw new ApplicationException("Wrong password");
}
}
//return a transferable user object that has been logged in
return new UserDto(user.getId(), user.getName(), user.getVeganMeal());
return new UserDto(user.getId(), user.getName());
}
/**
* add vegan meal to the user.
* @param id the id of the user
* @param name the name of the user
* The method sets input value.
* @param 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);
int count = user.getVeganMeal();
//find the user and update their vegetarian meal count
count++;
user.setVeganMeal(count);
//save it to the database
userRepository.save(user);
logger.info("Added vegan meal to user(id=" + user.getId()
+ ", name=" + user.getName() + ")");
if (user == null) {
throw new ApplicationException("User does not exist");
} else {
if (InputValidator.isValidItem(inputName)
&& InputValidator.isValidItemValue(inputName, value)) {
user.getFootPrintInputs().put(inputName, value);
user.setFootPrint(calculatorService.calculateFootprint(user));
} 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")

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.setName("greenify");
testUser.setPassword("password");
testUser.setVeganMeal(3);
User user = new User(1L, "greenify", "password", 3);
User user = new User(1L, "greenify", "password");
assertTrue(user.getId().equals(1L));
assertEquals(user.getName(), "greenify");
assertEquals(user.getPassword(), "password");
assertEquals(user.getVeganMeal(), 3);
assertEquals(user, testUser);
}
@Test
public void toStringTest() {
User user = new User(1L, "greenify", "password", 3);
assertEquals("User(id=1, name=greenify, password=password, veganMeal=3)", user.toString());
User user = new User(1L, "greenify", "password");
assertEquals("User(id=1, name=greenify, password=password)", user.toString());
}
@Test
public void equalsTest() {
User first = new User(1L, "greenify", "password", 3);
User second = new User(1L, "greenify", "password", 3);
User first = new User(1L, "greenify", "password");
User second = new User(1L, "greenify", "password");
assertEquals(first.getId(), second.getId());
assertEquals(first.getName(), second.getName());
assertEquals(first.getPassword(), second.getPassword());
assertEquals(first.getVeganMeal(), second.getVeganMeal());
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
public void notEqualsTest() {
User first = new User(1L, "greenify", "password", 3);
User second = new User(1L, "greenify", "password", 7);
User first = new User(1L, "greenify", "password");
User second = new User(2L, "greenify", "password");
assertFalse(first.equals(second));
}
@@ -55,8 +73,8 @@ public class UserTest {
@Test
public void hashCodeTest() {
User first = new User(1L, "greenify", "password", 3);
User second = new User(1L, "greenify", "password", 3);
User first = new User(1L, "greenify", "password");
User second = new User(1L, "greenify", "password");
assertEquals(first, second);
assertEquals(first.hashCode(), second.hashCode());
}

View File

@@ -17,7 +17,7 @@ public class UserRepositoryTest {
@Test
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");
assertEquals(user.getName(), "cugurlu");
}

View File

@@ -34,7 +34,7 @@ public class UserControllerTest {
@Test
public void registerUserTest() throws Exception {
given(this.userService.registerUser("name", "password"))
.willReturn(new UserDto(1L, "name", 0));
.willReturn(new UserDto(1L, "name"));
mvc.perform(get("/registerUser")
.param("name", "name")
.param("password", "password")
@@ -46,7 +46,7 @@ public class UserControllerTest {
@Test
public void loginUserTest() throws Exception {
given(this.userService.loginUser("ceren", "password"))
.willReturn(new UserDto(1L, "ceren", 0));
.willReturn(new UserDto(1L, "ceren"));
mvc.perform(get("/loginUser")
.param("name", "ceren")
.param("password", "password")
@@ -54,4 +54,9 @@ public class UserControllerTest {
.andDo(print())
.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;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;
@@ -11,7 +12,6 @@ import greenify.server.data.repository.UserRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.test.mock.mockito.MockBean;
@@ -34,12 +34,15 @@ public class UserServiceTest {
@MockBean
private UserRepository userRepository;
@MockBean
private CalculatorService calculatorService;
/**
* setUp method for test.
*/
@Before
public void setUp() {
User alex = new User(1L, "alex", "password", 0);
User alex = new User(1L, "alex", "password");
when(userRepository.findByName(alex.getName()))
.thenReturn(alex);
}
@@ -52,13 +55,96 @@ public class UserServiceTest {
assertEquals(found.getName(), name);
}
@Test
public void loginExceptionTest() {
assertThrows(ApplicationException.class, () -> {
userService.loginUser("alex", "greenify");
});
}
@Test
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());
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
public void getAllUserTest() {
assertEquals(userRepository.findAll(), userService.getAllUsers());