Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cp 30 #81

Merged
merged 4 commits into from
Dec 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions backend/src/main/java/ro/ubb/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.HttpServerErrorException;
import ro.ubb.converter.DtoConverter;
import ro.ubb.dto.CredentialsDto;
import ro.ubb.dto.RegisterDto;
Expand Down Expand Up @@ -42,13 +43,17 @@ public ResponseEntity<?> login(@RequestBody @Valid CredentialsDto credentialsDto
public ResponseEntity<?> register(@RequestBody @Valid RegisterDto registerDto) {
log.debug("Got register call with email = {}", registerDto.getEmail());
User user = dtoConverter.convertRegisterDto(registerDto);
if (userService.register(user)) {
log.debug("User with email = {} successfully singed up", registerDto.getEmail());
return new ResponseEntity<>(null, HttpStatus.OK);
} else {
log.debug("User with email = {} couldn't be created.",
registerDto.getEmail());
return ResponseEntity.noContent().build();
try {
if (userService.register(user)) {
log.debug("User with email = {} successfully singed up", registerDto.getEmail());
return new ResponseEntity<>(null, HttpStatus.OK);
} else {
log.debug("User with email = {} couldn't be created.",
registerDto.getEmail());
return ResponseEntity.noContent().build();
}
} catch (HttpServerErrorException e) {
return new ResponseEntity(e.getMessage(), e.getStatusCode());
}
}

Expand Down
56 changes: 56 additions & 0 deletions backend/src/main/java/ro/ubb/controller/WishlistController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package ro.ubb.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ro.ubb.security.JWTUtil;
import ro.ubb.service.UserService;
import ro.ubb.service.WishListService;

@RestController
@RequestMapping("/api/wishlist")
@Slf4j
public class WishlistController {

private WishListService wishListService;
private UserService userService;
private JWTUtil jwtUtil;

@Autowired
public void setWishListService(WishListService wishListService) {
this.wishListService = wishListService;
}

@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}

@Autowired
public void setJwtUtil(JWTUtil jwtUtil) {
this.jwtUtil = jwtUtil;
}

@PostMapping(value = "/{ownerToken}/{announcementId}")
ResponseEntity<?> postWishList(@PathVariable String ownerToken, @PathVariable Integer announcementId) {
int ownerId = Integer.parseInt(jwtUtil.decodeJWT(ownerToken).getId());
if (!userService.existsById(ownerId)) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
try {
log.info("calling wishlistService add ...");
wishListService.addItem(ownerId, announcementId);
log.info("wishlistService add finished...");
} catch (Exception e) {
log.error("Exception encountered-" + e.getMessage());
return new ResponseEntity<>(HttpStatus.FORBIDDEN);
}
return new ResponseEntity<>(HttpStatus.OK);
}

}
14 changes: 14 additions & 0 deletions backend/src/main/java/ro/ubb/dto/WishListDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ro.ubb.dto;

import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;
import java.util.Set;

public class WishListDto {
@EqualsAndHashCode.Include
private int id;
@NotNull
private int ownerId;
private Set<AnnouncementDto> announcements;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
import ro.ubb.model.Wishlist;

public interface WishlistRepository extends JpaRepository<Wishlist, Integer> {
public Wishlist getWishlistByOwnerId(int id);
}
9 changes: 4 additions & 5 deletions backend/src/main/java/ro/ubb/service/UserServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,18 @@
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import ro.ubb.error.SpecialError;
import ro.ubb.model.Announcement;
import ro.ubb.model.User;
import ro.ubb.model.Wishlist;
import ro.ubb.repository.UserRepository;
import ro.ubb.validator.UserValidator;

import java.util.HashSet;

@Service
@Slf4j
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
private UserValidator userValidator;
private WishListServiceImpl wishListService;

@Override
public boolean validUserCredentials(User user) {
return userRepository.existsByEmailAndPassword(user.getEmail(), user.getPassword());
Expand All @@ -28,6 +26,7 @@ public boolean validUserCredentials(User user) {
public User login(User user) {
return userRepository.getUserWithCredentials(user.getEmail(), user.getPassword());
}

@Override
public boolean existsById(int userId) {
return userRepository.existsById(userId);
Expand All @@ -36,7 +35,7 @@ public boolean existsById(int userId) {
@Override
public boolean register(User user) {
if (!userRepository.existsByEmailAndPassword(user.getEmail(), user.getPassword())) {
if (!userValidator.validatePassword(user.getPassword())) {
if (userValidator.validatePassword(user.getPassword())) {
userRepository.save(user);
Wishlist wishlist = new Wishlist(user);
wishListService.add(wishlist);
Expand All @@ -54,7 +53,7 @@ public void setUserRepository(UserRepository userRepository) {
}

@Autowired
public void setUserValidator(UserValidator userValidator){
public void setUserValidator(UserValidator userValidator) {
this.userValidator = userValidator;
}

Expand Down
6 changes: 6 additions & 0 deletions backend/src/main/java/ro/ubb/service/WishListService.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,16 @@

public interface WishListService {
Wishlist add(Wishlist wishlist);

List<Wishlist> getAll();

Page<Wishlist> getAllPaged(Pageable pageable);

Wishlist getById(int id);

boolean existsById(int id);

Wishlist getWishListByOwnerId(int id);

void addItem(int ownerId, int announcementId);
}
26 changes: 26 additions & 0 deletions backend/src/main/java/ro/ubb/service/WishListServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,21 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import ro.ubb.model.Announcement;
import ro.ubb.model.Wishlist;
import ro.ubb.repository.WishlistRepository;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Slf4j
@Service
public class WishListServiceImpl implements WishListService {

private WishlistRepository wishlistRepository;
private AnnouncementService announcementService;

@Override
public Wishlist add(Wishlist wishlist) {
Expand Down Expand Up @@ -48,4 +52,26 @@ public boolean existsById(int id) {
public void setWishlistRepository(WishlistRepository wishlistRepository) {
this.wishlistRepository = wishlistRepository;
}

@Autowired
public void setAnnouncementService(AnnouncementService announcementService) {
this.announcementService = announcementService;
}

@Override
public Wishlist getWishListByOwnerId(int id) {
return wishlistRepository.getWishlistByOwnerId(id);
}

@Override
public void addItem(int ownerId, int announcementId) {
Announcement announcement = announcementService.getById(announcementId);
Wishlist wishlist = getWishListByOwnerId(ownerId);
Set<Announcement> announcementSet = wishlist.getWantedAnnouncements();
if (announcementSet == null) {
announcementSet = new HashSet<>();
}
announcementSet.add(announcement);
wishlist.setWantedAnnouncements(announcementSet);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.ComponentScan;

//@TestConfiguration
//@ComponentScan(basePackages = "ro.ubb.controller")
//public class ControllerTestConfiguration {
//}
@TestConfiguration
@ComponentScan(basePackages = "ro.ubb.controller")
public class ControllerTestConfiguration {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package ro.ubb.controller;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.impl.DefaultClaims;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import ro.ubb.model.Announcement;
import ro.ubb.model.User;
import ro.ubb.model.enums.Category;
import ro.ubb.model.enums.Status;
import ro.ubb.security.JWTUtil;
import ro.ubb.service.AnnouncementService;
import ro.ubb.service.UserService;
import ro.ubb.service.WishListService;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@WebMvcTest(WishlistController.class)
public class WishListControllerTest {
@Autowired
private MockMvc mockMvc;

@MockBean
private WishListService wishListService;
@MockBean
private JWTUtil jwtUtil;
@MockBean
private UserService userService;
@MockBean
private AnnouncementService announcementService;

@Test
public void testAddWishList() throws Exception {
given(userService.register(User.builder().email("ana@yahoo.com").password("Password!123").build())).willReturn(true);
Claims claims = new DefaultClaims();
claims.setId("1");
given(jwtUtil.createJWT(any(Integer.class),any(Long.class))).willReturn("token");
given(jwtUtil.decodeJWT(any(String.class))).willReturn(claims);
given(userService.existsById(1)).willReturn(true);
Announcement announcement = Announcement.builder().user(User.builder()
.id(2).build())
.name("test_name1")
.description("test_description1")
.location("test_location1")
.category(Category.AGRICULTURE)
.duration(30)
.pricePerDay(50)
.status(Status.OPEN)
.build();
Announcement announcementAdded = announcement;
announcementAdded.setId(1);
given(announcementService.add(announcement)).willReturn(announcementAdded);
String token = jwtUtil.createJWT(1, JWTUtil.DEFAULT_VALIDITY);
mockMvc.perform(
post("/api/wishlist/{token}/1",token)
.contentType(MediaType.MULTIPART_FORM_DATA))
.andExpect(status().isOk());

}
}
33 changes: 33 additions & 0 deletions backend/src/test/java/ro/ubb/service/WishListServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,16 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import ro.ubb.model.Announcement;
import ro.ubb.model.User;
import ro.ubb.model.Wishlist;
import ro.ubb.model.enums.Category;
import ro.ubb.model.enums.Status;
import ro.ubb.repository.WishlistRepository;

import java.util.HashSet;
import java.util.Set;

import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;

Expand All @@ -16,6 +22,7 @@ public class WishListServiceTest {
@Mock
WishlistRepository wishlistRepository;


@BeforeEach
void setUp() {
initMocks(this);
Expand All @@ -31,4 +38,30 @@ public void testWishListAdd() {
when(wishlistRepository.save(wishlistToAdd)).thenReturn(afterAdd);
Assertions.assertEquals(wishlistRepository.save(wishlistToAdd).getId(), 1);
}

@Test
public void testWishListItemAdd() {
Wishlist wishlist = Wishlist.builder()
.id(1)
.owner(User.builder().id(1).build())
.build();
Announcement announcementToAdd = Announcement.builder().id(1)
.user(User.builder()
.id(2).build())
.name("test_name1")
.description("test_description1")
.location("test_location1")
.category(Category.AGRICULTURE)
.duration(30)
.pricePerDay(50)
.status(Status.OPEN)
.build();
Set<Announcement> announcementSet = wishlist.getWantedAnnouncements();
if (announcementSet == null) {
announcementSet = new HashSet<>();
}
announcementSet.add(announcementToAdd);
wishlist.setWantedAnnouncements(announcementSet);
Assertions.assertEquals(wishlist.getWantedAnnouncements().size(), 1);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class UserValidatorTest {

@Test
public void goodPassword(){
Assertions.assertTrue(userValidator.validatePassword("Password!123"));
Assertions.assertTrue(userValidator.validatePassword("Gloria!123"));
}
@Test
public void badPassword(){
Expand Down