Merge branch 'AddFriends' into 'master'
Add methods and tests for friends. See merge request cse1105/2018-2019/oopp-group-43/template!43
This commit is contained in:
@@ -94,4 +94,18 @@ public class UserService {
|
|||||||
.encode().toUri(), String.class);
|
.encode().toUri(), String.class);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("Duplicates")
|
||||||
|
public String addFriend(String name, String friend) {
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
|
||||||
|
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://localhost:8080/addFriend")
|
||||||
|
.queryParam("name", name)
|
||||||
|
.queryParam("friend",friend);
|
||||||
|
HttpEntity<?> entity = new HttpEntity<>(headers);
|
||||||
|
System.out.println(builder.build().encode().toUri());
|
||||||
|
String result = this.restTemplate.getForObject(builder.build()
|
||||||
|
.encode().toUri(), String.class);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
package greenify.server.data.model;
|
package greenify.server.data.model;
|
||||||
|
|
||||||
|
import greenify.common.ApplicationException;
|
||||||
import greenify.server.InputValidator;
|
import greenify.server.InputValidator;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
|
||||||
import javax.persistence.ElementCollection;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.GeneratedValue;
|
|
||||||
import javax.persistence.GenerationType;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@@ -21,6 +20,7 @@ import javax.validation.constraints.NotNull;
|
|||||||
public class User {
|
public class User {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
|
@NotNull
|
||||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@@ -36,6 +36,10 @@ public class User {
|
|||||||
@ElementCollection
|
@ElementCollection
|
||||||
private Map<String,String> footPrintInputs = new HashMap<>();
|
private Map<String,String> footPrintInputs = new HashMap<>();
|
||||||
|
|
||||||
|
@ManyToMany
|
||||||
|
@JoinColumn
|
||||||
|
private Collection<User> friends;
|
||||||
|
|
||||||
public User() {}
|
public User() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,6 +53,7 @@ public class User {
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.setFootPrintInputs(InputValidator.getDefaultValues());
|
this.setFootPrintInputs(InputValidator.getDefaultValues());
|
||||||
|
this.friends = new ArrayList<User>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,6 +108,24 @@ public class User {
|
|||||||
this.footPrintInputs = footPrintInputs;
|
this.footPrintInputs = footPrintInputs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<User> getFriends() {
|
||||||
|
return (ArrayList<User>)this.friends;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a friend to the friendslist of the user.
|
||||||
|
* @param user the friend you want to add.
|
||||||
|
*/
|
||||||
|
public void addFriend(User user) {
|
||||||
|
if (user.equals(this)) {
|
||||||
|
throw new ApplicationException("Cannot add yourself as a friend");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
friends.add(user);
|
||||||
|
System.out.print("Friend added!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setFootPrint(Float footPrint) {
|
public void setFootPrint(Float footPrint) {
|
||||||
this.footPrint = footPrint;
|
this.footPrint = footPrint;
|
||||||
}
|
}
|
||||||
@@ -118,6 +141,21 @@ public class User {
|
|||||||
+ this.password + ")";
|
+ this.password + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name and score of the friends in JSON. Needed for the leaderboard.
|
||||||
|
* @return a JSON object of the friendlist with only names and scores.
|
||||||
|
*/
|
||||||
|
public String friendsToString(){
|
||||||
|
String result = "friends=[";
|
||||||
|
for (User u : friends) {
|
||||||
|
result += "{name=" + u.getName() + ", footprint=" + u.getFootPrint() + "}, ";
|
||||||
|
}
|
||||||
|
if (result.endsWith(", ")) {
|
||||||
|
return result.substring(0, result.lastIndexOf(",")) + "]";
|
||||||
|
}
|
||||||
|
return result + "]";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(Object other) {
|
||||||
if (other instanceof User) {
|
if (other instanceof User) {
|
||||||
|
|||||||
@@ -59,6 +59,31 @@ public class UserService {
|
|||||||
return new UserDto(user.getId(), user.getName());
|
return new UserDto(user.getId(), user.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a friend to the friendlist of the user.
|
||||||
|
* @param name the username of the user
|
||||||
|
* @param friend the name of the friend you want to add.
|
||||||
|
* @return a userDTO of the logged in user
|
||||||
|
*/
|
||||||
|
public void addFriend(String name, String friend) {
|
||||||
|
User user = userRepository.findByName(name);
|
||||||
|
User add = userRepository.findByName(friend);
|
||||||
|
if (add == null) {
|
||||||
|
throw new ApplicationException("User does not exist");
|
||||||
|
}
|
||||||
|
user.addFriend(add);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the friendlist of the user in JSON.
|
||||||
|
* @param name the username of the user
|
||||||
|
* @return a userDTO of the logged in user
|
||||||
|
*/
|
||||||
|
public String getLeaderboard(String name) {
|
||||||
|
User user = userRepository.findByName(name);
|
||||||
|
return user.friendsToString();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The method sets input value.
|
* The method sets input value.
|
||||||
* @param name of the user
|
* @param name of the user
|
||||||
|
|||||||
@@ -2,10 +2,14 @@ package greenify.server.data.model;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import greenify.common.ApplicationException;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class UserTest {
|
public class UserTest {
|
||||||
@Test
|
@Test
|
||||||
public void setAndGetTest() {
|
public void setAndGetTest() {
|
||||||
@@ -78,5 +82,42 @@ public class UserTest {
|
|||||||
assertEquals(first, second);
|
assertEquals(first, second);
|
||||||
assertEquals(first.hashCode(), second.hashCode());
|
assertEquals(first.hashCode(), second.hashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getFriendEmpty() {
|
||||||
|
User first = new User(1L, "greenify", "password");
|
||||||
|
User second = new User(1L, "merel", "password");
|
||||||
|
assertEquals(first.getFriends(), second.getFriends());
|
||||||
|
assertEquals(first.getFriends(), new ArrayList<User>());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void addFriendTest() {
|
||||||
|
User first = new User(1L, "greenify", "password");
|
||||||
|
User second = new User(1L, "merel", "password");
|
||||||
|
assertEquals(first.getFriends(), second.getFriends());
|
||||||
|
first.addFriend(second);
|
||||||
|
ArrayList<User> test = new ArrayList<User>();
|
||||||
|
test.add(second);
|
||||||
|
assertEquals(first.getFriends(), test);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void addYourselfTest() {
|
||||||
|
User test = new User(1L, "greenify", "password");
|
||||||
|
assertEquals(test.getFriends(), new ArrayList<User>());
|
||||||
|
assertThrows(ApplicationException.class, () -> {
|
||||||
|
test.addFriend(test);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void friendsToStringTest() {
|
||||||
|
User first = new User(1L, "greenify", "password");
|
||||||
|
User second = new User(1L, "merel", "password");
|
||||||
|
first.addFriend(second);
|
||||||
|
assertEquals(first.friendsToString(), "friends=[{name=merel, footprint=0.0}]");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ import org.springframework.boot.test.mock.mockito.MockBean;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
public class UserServiceTest {
|
public class UserServiceTest {
|
||||||
@TestConfiguration
|
@TestConfiguration
|
||||||
@@ -45,6 +47,9 @@ public class UserServiceTest {
|
|||||||
User alex = new User(1L, "alex", "password");
|
User alex = new User(1L, "alex", "password");
|
||||||
when(userRepository.findByName(alex.getName()))
|
when(userRepository.findByName(alex.getName()))
|
||||||
.thenReturn(alex);
|
.thenReturn(alex);
|
||||||
|
User lola = new User(2L, "lola", "password");
|
||||||
|
when(userRepository.findByName(lola.getName()))
|
||||||
|
.thenReturn(lola);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -157,4 +162,25 @@ public class UserServiceTest {
|
|||||||
userService.loginUser(null, null);
|
userService.loginUser(null, null);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void addFriendTest() {
|
||||||
|
User alex = userRepository.findByName("alex");
|
||||||
|
User lola = userRepository.findByName("lola");
|
||||||
|
assertEquals(lola.getFriends(), alex.getFriends());
|
||||||
|
userService.addFriend("alex", "lola");
|
||||||
|
ArrayList<User> test = new ArrayList<User>();
|
||||||
|
test.add(lola);
|
||||||
|
assertEquals(alex.getFriends(), test);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void leaderboardTest() {
|
||||||
|
User alex = userRepository.findByName("alex");
|
||||||
|
User lola = userRepository.findByName("lola");
|
||||||
|
userService.addFriend("alex", "lola");
|
||||||
|
assertEquals(userService.getLeaderboard("alex"), "friends=[{name=lola, footprint=0.0}]");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user