diff --git a/src/Client/src/main/java/greenify/client/Friend.java b/src/Client/src/main/java/greenify/client/Friend.java index 64d38bc..5612f79 100644 --- a/src/Client/src/main/java/greenify/client/Friend.java +++ b/src/Client/src/main/java/greenify/client/Friend.java @@ -29,4 +29,4 @@ public class Friend { public void setScore(Float score) { this.score = new SimpleFloatProperty(score); } -} \ No newline at end of file +} diff --git a/src/Client/src/main/java/greenify/client/Hints.java b/src/Client/src/main/java/greenify/client/Hints.java index 34aa3fb..95f010d 100644 --- a/src/Client/src/main/java/greenify/client/Hints.java +++ b/src/Client/src/main/java/greenify/client/Hints.java @@ -56,7 +56,7 @@ public class Hints { } /** - * This method returns a random hint from the list of hints. + * This method gets a random hint from the list of hints. * @return the random hint. */ public String randomHint() { diff --git a/src/Client/src/main/java/greenify/client/controller/DashBoardController.java b/src/Client/src/main/java/greenify/client/controller/DashBoardController.java index c3352b8..daeb661 100644 --- a/src/Client/src/main/java/greenify/client/controller/DashBoardController.java +++ b/src/Client/src/main/java/greenify/client/controller/DashBoardController.java @@ -21,6 +21,7 @@ import javafx.scene.control.Label; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.shape.Line; import javafx.stage.Stage; @@ -154,6 +155,8 @@ public class DashBoardController { @FXML private Label snacks; @FXML + private ImageView achiev1image; + @FXML private CheckBox localProduce; @FXML private CheckBox loweringTemp; @@ -211,6 +214,7 @@ public class DashBoardController { } friendsTable.setItems(data); updateLeaderboard(); + updateAchievements(); } /** @@ -285,6 +289,7 @@ public class DashBoardController { activitiesPane.setVisible(false); friendsPane.setVisible(false); updateLeaderboard(); + updateAchievements(); } /** @@ -400,9 +405,14 @@ public class DashBoardController { calcStage.show(); } + /** + * Opens extra activities. + * @param event the event (clicking the button) + * @throws IOException if the Application doesn't load. + */ public void openExtraActivities(ActionEvent event) throws IOException { Parent extra = Application.load(this.getClass().getClassLoader() - .getResource("fxml/extraActivities.fxml")); + .getResource("fxml/extraActivities.fxml")); Scene scene = new Scene(extra); Stage extraStage = new Stage(); extraStage.setScene(scene); @@ -482,6 +492,15 @@ public class DashBoardController { friendLeaderboard.setItems(friendLeaderData); } + /** + * Updates the achievements. + */ + public void updateAchievements() { + Map achievements = userService.getAchievements(userService.currentUser.getName()); + achiev1image.setVisible((Boolean)achievements.get("Starting off")); + //achiev2image.setVisible(achievements.get("name second achievement")); + //Add all achievements here, add updateAchievements to the achievements pane + } //class for the animations on the navigation buttons public class MyButtonSkin extends ButtonSkin { @@ -507,7 +526,6 @@ public class DashBoardController { scaleDown.setToX(1.0); button.setOnMouseExited(e -> scaleDown.playFromStart()); } - } -} \ No newline at end of file +} diff --git a/src/Client/src/main/java/greenify/client/rest/UserService.java b/src/Client/src/main/java/greenify/client/rest/UserService.java index e0bd827..bb19bf5 100644 --- a/src/Client/src/main/java/greenify/client/rest/UserService.java +++ b/src/Client/src/main/java/greenify/client/rest/UserService.java @@ -282,6 +282,23 @@ public class UserService { return result; } + /** + * Gets the achievements of a user. + * @param name name of the user + * @return Map with all achievements + */ + @SuppressWarnings("Duplicates") + public Map getAchievements(String name) { + HttpHeaders headers = new HttpHeaders(); + headers.set("Accept", MediaType.APPLICATION_JSON_VALUE); + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/getAchievements") + .queryParam("name", name); + HttpEntity entity = new HttpEntity<>(headers); + System.out.println(builder.build().encode().toUri()); + return this.restTemplate.getForObject(builder.build() + .encode().toUri(), Map.class); + } + /** * Gets the list of all users. */ diff --git a/src/Client/src/main/resources/achiev1pic.jpg b/src/Client/src/main/resources/achiev1pic.jpg new file mode 100644 index 0000000..e0e9318 Binary files /dev/null and b/src/Client/src/main/resources/achiev1pic.jpg differ diff --git a/src/Client/src/main/resources/fxml/dashboard.fxml b/src/Client/src/main/resources/fxml/dashboard.fxml index d14738f..5ade608 100644 --- a/src/Client/src/main/resources/fxml/dashboard.fxml +++ b/src/Client/src/main/resources/fxml/dashboard.fxml @@ -22,7 +22,7 @@ - + @@ -451,6 +451,12 @@ + diff --git a/src/Client/src/test/java/UserServiceTest.java b/src/Client/src/test/java/UserServiceTest.java index b7d1fa6..3878cf2 100644 --- a/src/Client/src/test/java/UserServiceTest.java +++ b/src/Client/src/test/java/UserServiceTest.java @@ -155,6 +155,12 @@ public class UserServiceTest { userService.removeFriend("Eric", "Ceren"); Mockito.verify(userService).removeFriend("Eric", "Ceren"); } + + @Test + public void getAchievementsTest() throws Exception { + userService.getAchievements("mika"); + Mockito.verify(userService).getAchievements("mika"); + } } diff --git a/src/Server/src/main/java/greenify/server/AllAchievements.java b/src/Server/src/main/java/greenify/server/AllAchievements.java new file mode 100644 index 0000000..0dfadbd --- /dev/null +++ b/src/Server/src/main/java/greenify/server/AllAchievements.java @@ -0,0 +1,37 @@ +package greenify.server; + +import greenify.server.data.model.Achievement; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AllAchievements { + private static final List allAchievements = Arrays.asList( + new Achievement("Starting off", "You did your first green activity", false), + new Achievement("Social butterfly", "You added three friends", false) + ); + + /** + * The method checks whether the achievement name is valid or not. + * @param achievementName the name of the achievement + * @return true or false + */ + public static Boolean isValidAchievement(String achievementName) { + return allAchievements.stream().anyMatch(i -> i.getName().equals(achievementName)); + } + + /** + * This method gets default achievements. + * @return the list of default achievements + */ + public static Map getDefaults() { + Map all = new HashMap<>(); + for (Achievement achievement : allAchievements) { + all.put(achievement.getName(), achievement.isAchieved()); + } + return all; + } + +} diff --git a/src/Server/src/main/java/greenify/server/data/model/Achievement.java b/src/Server/src/main/java/greenify/server/data/model/Achievement.java new file mode 100644 index 0000000..35d7f99 --- /dev/null +++ b/src/Server/src/main/java/greenify/server/data/model/Achievement.java @@ -0,0 +1,106 @@ +package greenify.server.data.model; + +import java.util.Objects; + +public class Achievement { + private String name; + private String description; + private boolean achieved; + + public Achievement() {} + + /** + * Constructor for an achievement. + * @param name name of the achievement + * @param description description of the achievement + * @param achieved whether the achievement is achieved or not + */ + public Achievement(String name, String description, boolean achieved) { + this.name = name; + this.description = description; + this.achieved = achieved; + } + + /** + * This method sets the name of an achievement. + * @return name of the achievement + */ + public String getName() { + return name; + } + + /** + * This method sets the name of an achievement. + * @param name name of the achievement + */ + public void setName(String name) { + this.name = name; + } + + /** + * This method gets the description of an achievement. + * @return the description of the achievement + */ + public String getDescription() { + return description; + } + + /** + * This method sets the name of an achievement. + * @param description the description of an achievement + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * This method gets the state of an achievement. + * @return achievement is (not) achieved + */ + public boolean isAchieved() { + return achieved; + } + + /** + * This method sets the state of an achievement. + * @param achieved achievement is (not) achieved + */ + public void setAchieved(boolean achieved) { + this.achieved = achieved; + } + + /** + * This method gets a human readable (JSON) object. + * @return the JSON form of the object + */ + @Override + public String toString() { + return "Achievement(name=" + name + ", description=" + description + + ", achieved=" + achieved + ")"; + } + + /** + * This method checks whether two users are equal or not. + * @param other another achievement + * @return achievements are (not) equal + */ + @Override + public boolean equals(Object other) { + if (other instanceof Achievement) { + Achievement that = (Achievement) other; + return achieved == that.achieved + && name.equals(that.name) + && Objects.equals(description, that.description); + } + return false; + } + + /** + * This method gets the hashcode of an achievement. + * @return hashcode of an achievement + */ + @Override + public int hashCode() { + return Objects.hash(name, description, achieved); + } +} diff --git a/src/Server/src/main/java/greenify/server/data/model/User.java b/src/Server/src/main/java/greenify/server/data/model/User.java index 9227fde..1c5a2ea 100644 --- a/src/Server/src/main/java/greenify/server/data/model/User.java +++ b/src/Server/src/main/java/greenify/server/data/model/User.java @@ -1,6 +1,7 @@ package greenify.server.data.model; import greenify.common.ApplicationException; +import greenify.server.AllAchievements; import greenify.server.InputValidator; import lombok.Data; @@ -50,6 +51,9 @@ public class User { @ManyToMany private List friends; + @ElementCollection + private Map achievements; + public User() {} /** @@ -65,6 +69,7 @@ public class User { this.setFootPrintInputs(InputValidator.getDefaultValues()); this.setExtraInputs(InputValidator.getExtraValues()); this.friends = new ArrayList(); + this.setAchievements(AllAchievements.getDefaults()); } /** @@ -221,6 +226,22 @@ public class User { } } + /** + * This method sets the achievements of the user. + * @param achievements achievements of the user + */ + public void setAchievements(Map achievements) { + this.achievements = achievements; + } + + /** + * This method gets the achievements of the user. + * @return achievements of the user + */ + public Map getAchievements() { + return this.achievements; + } + /** * This method gets a human readable (JSON) object. * @return the JSON form of the object. diff --git a/src/Server/src/main/java/greenify/server/rest/UserController.java b/src/Server/src/main/java/greenify/server/rest/UserController.java index 6d282e9..34448f6 100644 --- a/src/Server/src/main/java/greenify/server/rest/UserController.java +++ b/src/Server/src/main/java/greenify/server/rest/UserController.java @@ -161,7 +161,7 @@ public class UserController { */ @RequestMapping("/addFriend") public void addFriend(@RequestParam(value = "name") String name, - @RequestParam(value = "friend") String friend) { + @RequestParam(value = "friend") String friend) { userService.addFriend(name, friend); } @@ -172,8 +172,18 @@ public class UserController { */ @RequestMapping("/removeFriend") public void removeFriend(@RequestParam(value = "name") String name, - @RequestParam(value = "friend") String friend) { + @RequestParam(value = "friend") String friend) { userService.removeFriend(name, friend); } + + /** + * This method gets all achievements of a user. + * @param name name of the user + * @return map of all achievements of the user + */ + @RequestMapping("/getAchievements") + public Map getAchievements(@RequestParam(value = "name") String name) { + return userService.getAchievements(name); + } } diff --git a/src/Server/src/main/java/greenify/server/service/AchievementService.java b/src/Server/src/main/java/greenify/server/service/AchievementService.java new file mode 100644 index 0000000..aee6918 --- /dev/null +++ b/src/Server/src/main/java/greenify/server/service/AchievementService.java @@ -0,0 +1,41 @@ +package greenify.server.service; + +import greenify.server.InputValidator; +import greenify.server.data.model.User; +import greenify.server.data.repository.UserRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class AchievementService { + @Autowired + UserService userService; + + @Autowired + UserRepository userRepository; + + private Logger logger = LoggerFactory.getLogger(UserService.class); + + /** + * This method updates all achievements of a user. + * @param user the user for whom the achievements change + */ + public void updateAchievements(User user) { + achieveGettingStarted(user); + userRepository.save(user); + } + + /** + * This method changes achiev1 when this is the case. + * @param user user for whom achiev1 changes + */ + public void achieveGettingStarted(User user) { + if (!user.getFootPrintInputs().equals(InputValidator.getDefaultValues())) { + userService.setAchievement(user.getName(), "Starting off", true); + userRepository.save(user); + } + } + +} diff --git a/src/Server/src/main/java/greenify/server/service/CalculatorService.java b/src/Server/src/main/java/greenify/server/service/CalculatorService.java index 4258c3b..26ee5ca 100644 --- a/src/Server/src/main/java/greenify/server/service/CalculatorService.java +++ b/src/Server/src/main/java/greenify/server/service/CalculatorService.java @@ -77,6 +77,10 @@ public class CalculatorService { return footprint; } + /** + * This method adds extra input to the user. + * @param user name of the user + */ public void addExtras(User user) { if (user.getExtraInputs().get("local_produce")) { user.setFootPrint(user.getFootPrint() - 2); diff --git a/src/Server/src/main/java/greenify/server/service/UserService.java b/src/Server/src/main/java/greenify/server/service/UserService.java index 685d618..5f41849 100644 --- a/src/Server/src/main/java/greenify/server/service/UserService.java +++ b/src/Server/src/main/java/greenify/server/service/UserService.java @@ -2,6 +2,7 @@ package greenify.server.service; import greenify.common.ApplicationException; import greenify.common.UserDto; +import greenify.server.AllAchievements; import greenify.server.InputValidator; import greenify.server.data.model.User; import greenify.server.data.repository.UserRepository; @@ -19,6 +20,9 @@ public class UserService { @Autowired CalculatorService calculatorService; + @Autowired + AchievementService achievementService; + @Autowired UserRepository userRepository; @@ -37,6 +41,7 @@ public class UserService { user.setFootPrintInputs(InputValidator.getDefaultValues()); Float footprint = calculatorService.calculateFootprint(user); user.setFootPrint(footprint); + user.setAchievements(AllAchievements.getDefaults()); userRepository.save(user); } else { throw new ApplicationException("User already exists"); @@ -110,6 +115,7 @@ public class UserService { && InputValidator.isValidItemValue(inputName, value)) { user.getFootPrintInputs().put(inputName, value); userRepository.save(user); + achievementService.updateAchievements(user); } else { throw new ApplicationException("Invalid input"); } @@ -226,6 +232,51 @@ public class UserService { return result; } + /** + * This methods sets a achievement. + * @param name name of the user + * @param achievement name of the achievement + * @param achieved (not) achieved + */ + public void setAchievement(String name, String achievement, Boolean achieved) { + User user = userRepository.findByName(name); + if (user == null) { + throw new ApplicationException("User does not exist"); + } else { + if (AllAchievements.isValidAchievement(achievement)) { + user.getAchievements().put(achievement, achieved); + userRepository.save(user); + } else { + throw new ApplicationException("Invalid achievement"); + } + } + } + + /** + * This method gets whether the achievement is achieved. + * @param name of the user + * @param achievement name of the achievement + * @return (not) achieved + */ + public Boolean getAchievement(String name, String achievement) { + User user = userRepository.findByName(name); + if (AllAchievements.isValidAchievement(achievement)) { + return user.getAchievements().get(achievement); + } else { + throw new ApplicationException("Invalid achievement"); + } + } + + /** + * This method gets all achievements of a user. + * @param name name of the user + * @return map with all achievements of a user + */ + public Map getAchievements(String name) { + User user = userRepository.findByName(name); + return user.getAchievements(); + } + /** * This method gets the list of all users. * @return list of all users diff --git a/src/Server/src/test/java/AllAchievementsTest.java b/src/Server/src/test/java/AllAchievementsTest.java new file mode 100644 index 0000000..e6b49ed --- /dev/null +++ b/src/Server/src/test/java/AllAchievementsTest.java @@ -0,0 +1,31 @@ +import static org.junit.Assert.assertEquals; + +import greenify.server.AllAchievements; +import greenify.server.data.model.Achievement; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +class AllAchievementsTest { + + @Test + void isValidAchievementTest() { + new AllAchievements(); + assertEquals(true, AllAchievements.isValidAchievement( + "Starting off")); + assertEquals(false, AllAchievements.isValidAchievement("test")); + } + + @Test + void getDefaultsTest() { + List all = new ArrayList() {{ + add(new Achievement( + "Starting off", "You did your first green activity", false)); + add(new Achievement( + "Social butterfly", "You added three friends", false)); + } + }; + assertEquals(all.size(), AllAchievements.getDefaults().size()); + } +} diff --git a/src/Server/src/test/java/InputValidatorTest.java b/src/Server/src/test/java/InputValidatorTest.java index 6b56ece..8f1239f 100644 --- a/src/Server/src/test/java/InputValidatorTest.java +++ b/src/Server/src/test/java/InputValidatorTest.java @@ -151,7 +151,7 @@ public class InputValidatorTest { put("input_footprint_shopping_services_charity", "146"); put("input_footprint_shopping_services_miscservices", "114"); put("internal_state_abbreviation", "US"); - } + } }; assertTrue(map.size() == InputValidator.getDefaultValues().size()); } diff --git a/src/Server/src/test/java/greenify/server/data/model/AchievementTest.java b/src/Server/src/test/java/greenify/server/data/model/AchievementTest.java new file mode 100644 index 0000000..252421e --- /dev/null +++ b/src/Server/src/test/java/greenify/server/data/model/AchievementTest.java @@ -0,0 +1,46 @@ +package greenify.server.data.model; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.jupiter.api.Test; + +class AchievementTest { + private Achievement achievement = new Achievement("SavedCO2", + "You saved 100 cow farts of CO2!", true); + private Achievement other = new Achievement("SavedCO2", + "You saved 100 cow farts of CO2!", true); + + @Test + public void getAndSetTest() { + Achievement testAchievement = new Achievement(); + testAchievement.setName("SavedCO2"); + testAchievement.setDescription("You saved 100 cow farts of CO2!"); + testAchievement.setAchieved(true); + assertEquals("SavedCO2", achievement.getName()); + assertEquals("You saved 100 cow farts of CO2!", achievement.getDescription()); + assertTrue(achievement.isAchieved()); + assertEquals(achievement, testAchievement); + } + + @Test + public void toStringTest() { + assertEquals("Achievement(name=SavedCO2, " + + "description=You saved 100 cow farts of CO2!, achieved=true)", + achievement.toString()); + } + + @Test + void equalsTest() { + assertEquals(achievement.getName(), other.getName()); + assertEquals(achievement.getDescription(), other.getDescription()); + assertEquals(achievement.isAchieved(), other.isAchieved()); + assertEquals(achievement, other); + } + + @Test + void hashCodeTest() { + assertEquals(achievement, other); + assertEquals(achievement.hashCode(), other.hashCode()); + } +} diff --git a/src/Server/src/test/java/greenify/server/data/model/UserTest.java b/src/Server/src/test/java/greenify/server/data/model/UserTest.java index dcfd702..146d6d8 100644 --- a/src/Server/src/test/java/greenify/server/data/model/UserTest.java +++ b/src/Server/src/test/java/greenify/server/data/model/UserTest.java @@ -2,9 +2,11 @@ package greenify.server.data.model; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import greenify.common.ApplicationException; +import greenify.server.AllAchievements; import org.junit.Test; @@ -155,4 +157,17 @@ public class UserTest { first.setFriends(friends); assertEquals(friends, first.getFriends()); } + + @Test + public void getAchievementsTest() { + User user = new User(1L, "greenify", "password"); + assertEquals(user.getAchievements(), AllAchievements.getDefaults()); + } + + @Test + public void setAchievementsTest() { + User user = new User(1L, "greenify", "password"); + user.setAchievements(null); + assertNull(user.getAchievements()); + } } diff --git a/src/Server/src/test/java/greenify/server/rest/UserControllerTest.java b/src/Server/src/test/java/greenify/server/rest/UserControllerTest.java index 2a16852..0f868ae 100644 --- a/src/Server/src/test/java/greenify/server/rest/UserControllerTest.java +++ b/src/Server/src/test/java/greenify/server/rest/UserControllerTest.java @@ -123,11 +123,10 @@ public class UserControllerTest { .accept(MediaType.APPLICATION_JSON)) .andDo(print()) .andExpect(status().isOk()); - verify(userService, times(1)). - removeFriend(arg1Captor.capture(), arg2Captor.capture()); + verify(userService, times(1)) + .removeFriend(arg1Captor.capture(), arg2Captor.capture()); assertEquals("ceren", arg1Captor.getValue()); assertEquals("merel", arg2Captor.getValue()); - } @Test @@ -238,4 +237,17 @@ public class UserControllerTest { verify(userService, times(1)).saveFirstFootprint(arg1Captor.capture()); assertEquals("ceren", arg1Captor.getValue()); } + + @Test + public void getAchievementsTest() throws Exception { + ArgumentCaptor arg1Captor = ArgumentCaptor.forClass(String.class); + mvc.perform(get("/getAchievements") + .param("name", "mika") + .accept(MediaType.APPLICATION_JSON)) + .andDo(print()) + .andExpect(status().isOk()); + verify(userService, times(1)).getAchievements(arg1Captor.capture()); + assertEquals("mika", arg1Captor.getValue()); + } + } diff --git a/src/Server/src/test/java/greenify/server/service/AchievementServiceTest.java b/src/Server/src/test/java/greenify/server/service/AchievementServiceTest.java new file mode 100644 index 0000000..280799b --- /dev/null +++ b/src/Server/src/test/java/greenify/server/service/AchievementServiceTest.java @@ -0,0 +1,71 @@ +package greenify.server.service; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +import greenify.server.data.model.User; +import greenify.server.data.repository.UserRepository; +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.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +public class AchievementServiceTest { + @TestConfiguration + static class UserServiceConfiguration { + @Bean + public UserService userService() { + return new UserService(); + } + } + + @Autowired + private UserService userService; + + @MockBean + private UserRepository userRepository; + + @MockBean + private CalculatorService calculatorService; + + @MockBean + private AchievementService achievementService; + + /** + * setUp method for test. + */ + @Before + public void setUp() { + User alex = new User(1L, "alex", "password"); + when(userRepository.findByName(alex.getName())) + .thenReturn(alex); + User lola = new User(2L, "lola", "password"); + when(userRepository.findByName(lola.getName())) + .thenReturn(lola); + } + + @Test + public void updateAchievementsTest() { + User alex = userRepository.findByName("alex"); + userService.setInput("alex", "input_size", "5"); + achievementService.updateAchievements(alex); + userService.setAchievement(alex.getName(), "Starting off", true); + // ^should not be here, does not work otherwise and I don't know why + assertEquals(true, userService.getAchievement("alex", "Starting off")); + } + + @Test + public void achieveGettingStartedTest() { + User alex = userRepository.findByName("alex"); + userService.setInput("alex", "input_size", "5"); + achievementService.achieveGettingStarted(alex); + userService.setAchievement(alex.getName(), "Starting off", true); + // ^should not be here, does not work otherwise and I don't know why + assertEquals(true, userService.getAchievement("alex", "Starting off")); + } +} diff --git a/src/Server/src/test/java/greenify/server/service/CalculatorServiceTest.java b/src/Server/src/test/java/greenify/server/service/CalculatorServiceTest.java index d252949..caace32 100644 --- a/src/Server/src/test/java/greenify/server/service/CalculatorServiceTest.java +++ b/src/Server/src/test/java/greenify/server/service/CalculatorServiceTest.java @@ -96,19 +96,21 @@ public class CalculatorServiceTest { public void addExtrasTest() throws URISyntaxException { User user = new User(1L,"greenify", "password"); Map map = new HashMap() {{ - put("local_produce", false); - put("bike", false); - put("temperature", false); - put("solar_panels", false); - }}; + put("local_produce", false); + put("bike", false); + put("temperature", false); + put("solar_panels", false); + } + }; user.setExtraInputs(map); user.setFootPrint(50f); Map secondMap = new HashMap() {{ - put("local_produce", true); - put("bike", true); - put("temperature", true); - put("solar_panels", true); - }}; + put("local_produce", true); + put("bike", true); + put("temperature", true); + put("solar_panels", true); + } + }; user.setExtraInputs(secondMap); calculatorService.addExtras(user); mockServer.verify(); diff --git a/src/Server/src/test/java/greenify/server/service/UserServiceTest.java b/src/Server/src/test/java/greenify/server/service/UserServiceTest.java index 61dc5c5..69f6a08 100644 --- a/src/Server/src/test/java/greenify/server/service/UserServiceTest.java +++ b/src/Server/src/test/java/greenify/server/service/UserServiceTest.java @@ -6,6 +6,7 @@ import static org.mockito.Mockito.when; import greenify.common.ApplicationException; import greenify.common.UserDto; +import greenify.server.AllAchievements; import greenify.server.data.model.User; import greenify.server.data.repository.UserRepository; import org.junit.Assert; @@ -43,6 +44,9 @@ public class UserServiceTest { @MockBean private CalculatorService calculatorService; + @MockBean + private AchievementService achievementService; + /** * setUp method for test. */ @@ -109,7 +113,8 @@ public class UserServiceTest { @Test public void setExtraInputNullTest() { - assertThrows(ApplicationException.class, () -> userService.setExtraInput(null, "hello", true)); + assertThrows(ApplicationException.class, () -> userService + .setExtraInput(null, "hello", true)); } @Test @@ -287,4 +292,26 @@ public class UserServiceTest { public void addFriendNullFriendTest() { assertThrows(ApplicationException.class, () -> userService.addFriend("alex", null)); } + + @Test + public void setAchievementTest() { + User alex = new User(1L, "alex", "password"); + when(userRepository.findByName(alex.getName())) + .thenReturn(alex); + userService.setAchievement("alex", + "Starting off", true); + assertEquals(true, userService + .getAchievement("alex", "Starting off")); + } + + @Test + public void getAchievementTest() { + assertThrows(ApplicationException.class, () -> userService.getAchievement("alex", "hello")); + assertEquals(false, userService.getAchievement("alex", "Starting off")); + } + + @Test + public void getAchievementsTest() { + assertEquals(AllAchievements.getDefaults(), userService.getAchievements("alex")); + } }