//package com.srh.api.controller; // //import com.fasterxml.jackson.core.JsonProcessingException; //import com.srh.api.dto.resource.UserForm; //import com.srh.api.model.Recommender; //import com.srh.api.repository.RecommendersRepository; //import com.srh.api.utils.RequestTokenUtil; //import com.srh.api.utils.UrlUtils; //import org.junit.jupiter.api.BeforeEach; //import org.junit.jupiter.api.Test; //import org.junit.jupiter.api.extension.ExtendWith; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; //import org.springframework.boot.test.context.SpringBootTest; //import org.springframework.boot.test.mock.mockito.MockBean; //import org.springframework.boot.test.web.client.TestRestTemplate; //import org.springframework.boot.web.server.LocalServerPort; //import org.springframework.data.domain.Page; //import org.springframework.data.domain.PageImpl; //import org.springframework.data.domain.Pageable; //import org.springframework.http.HttpEntity; //import org.springframework.http.ResponseEntity; //import org.springframework.test.context.junit.jupiter.SpringExtension; //import org.springframework.test.web.servlet.MockMvc; // //import java.util.Arrays; //import java.util.List; // //import static com.srh.api.utils.JsonUtil.toJson; //import static org.assertj.core.api.Assertions.assertThat; //import static org.mockito.ArgumentMatchers.isA; //import static org.mockito.Mockito.when; //import static org.springframework.http.HttpMethod.*; //import static org.springframework.http.HttpStatus.*; //import static org.springframework.http.HttpStatus.FORBIDDEN; // //@ExtendWith(SpringExtension.class) //@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) //@AutoConfigureMockMvc //public class RecommendersControllerTest { // @Autowired // private TestRestTemplate restTemplate; // // @LocalServerPort // Integer port; // // @Autowired // private MockMvc mockMvc; // // @MockBean // private RecommendersRepository recommendersRepository; // // private HttpEntity validHeader; // private HttpEntity invalidHeader; // // @BeforeEach // public void configureValidHeader() throws JsonProcessingException { // RequestTokenUtil requestTokenUtil = new RequestTokenUtil(restTemplate, port); // validHeader = requestTokenUtil.generateValidLoginHeaders(); // invalidHeader = requestTokenUtil.generateInvalidLoginHeaders(); // } // // @BeforeEach // public void setup() { // List users = Arrays.asList( // new Recommender(1, "user 1", "user 1", "123", null, null, null), // new Recommender(2, "user 2", "user 2", "456", null, null, null), // new Recommender(3, "user 3", "user 3", "789", null, null, null) // ); // // Page pageUsers = new PageImpl<>(users); // // when(recommendersRepository.findAll(isA(Pageable.class))).thenReturn(pageUsers); // when(recommendersRepository.findById(1)).thenReturn(java.util.Optional.ofNullable(users.get(0))); // when(recommendersRepository.save(isA(Recommender.class))).thenReturn(users.get(0)); // } // // @Test // public void WhenGetAllUsersThenStatusCodeOk() { // String url = UrlUtils.generateBasicUrl("/users/recommenders", port); // ResponseEntity response = restTemplate.exchange(url, GET, validHeader, String.class); // assertThat(response.getStatusCode()).isEqualTo(OK); // } // // @Test // public void WhenGetUserThenStatusCodeOk() { // String url = UrlUtils.generateBasicUrl("/users/recommenders/1", port); // ResponseEntity response = restTemplate.exchange(url, GET, validHeader, String.class); // assertThat(response.getStatusCode()).isEqualTo(OK); // } // // @Test // public void WhenInsertUserThenStatusCodeCreated() throws JsonProcessingException { // String url = UrlUtils.generateBasicUrl("/users/recommenders", port); // UserForm userForm = new UserForm("user recommendation", "user recommendation", "user test"); // // HttpEntity request = new HttpEntity<>(toJson(userForm), validHeader.getHeaders()); // // ResponseEntity response = restTemplate.exchange(url, POST, request, String.class); // assertThat(response.getStatusCode()).isEqualTo(CREATED); // } // // @Test // public void WhenUpdateUserThenStatusCodeOk() throws JsonProcessingException { // String url = UrlUtils.generateBasicUrl("/users/recommenders/1", port); // UserForm userForm = new UserForm("user recommendation", "user recommendation", "user test"); // // HttpEntity request = new HttpEntity<>(toJson(userForm), validHeader.getHeaders()); // // ResponseEntity response = restTemplate.exchange(url, PUT, request, String.class); // assertThat(response.getStatusCode()).isEqualTo(OK); // } // // @Test // public void WhenDeleteUserThenStatusCodeNoContent() { // String url = UrlUtils.generateBasicUrl("/users/recommenders/1", port); // ResponseEntity response = restTemplate.exchange(url, DELETE, validHeader, String.class); // assertThat(response.getStatusCode()).isEqualTo(NO_CONTENT); // } // // @Test // public void WhenGetAllUsersWithInvalidTokenThenStatusCodeForbidden() { // String url = UrlUtils.generateBasicUrl("/users/recommenders", port); // ResponseEntity response = restTemplate.exchange(url, GET, invalidHeader, String.class); // assertThat(response.getStatusCode()).isEqualTo(FORBIDDEN); // } // // @Test // public void WhenGetUserWithInvalidTokenThenStatusCodeForbidden() { // String url = UrlUtils.generateBasicUrl("/users/recommenders/1", port); // ResponseEntity response = restTemplate.exchange(url, GET, invalidHeader, String.class); // assertThat(response.getStatusCode()).isEqualTo(FORBIDDEN); // } // // @Test // public void WhenInsertUserWithInvalidTokenThenStatusCodeForbidden() throws JsonProcessingException { // String url = UrlUtils.generateBasicUrl("/users/recommenders", port); // UserForm userForm = new UserForm("user recommendation", "user recommendation", "user test"); // // HttpEntity request = new HttpEntity<>(toJson(userForm), invalidHeader.getHeaders()); // // ResponseEntity response = restTemplate.exchange(url, POST, request, String.class); // assertThat(response.getStatusCode()).isEqualTo(FORBIDDEN); // } // // @Test // public void WhenUpdateUserWithInvalidTokenThenStatusCodeForbidden() throws JsonProcessingException { // String url = UrlUtils.generateBasicUrl("/users/recommenders/1", port); // UserForm userForm = new UserForm("user recommendation", "user recommendation", "user test"); // // HttpEntity request = new HttpEntity<>(toJson(userForm), invalidHeader.getHeaders()); // // ResponseEntity response = restTemplate.exchange(url, PUT, request, String.class); // assertThat(response.getStatusCode()).isEqualTo(FORBIDDEN); // } // // @Test // public void WhenDeleteUserWithInvalidTokenThenStatusCodeForbidden() { // String url = UrlUtils.generateBasicUrl("/users/recommenders/1", port); // ResponseEntity response = restTemplate.exchange(url, DELETE, invalidHeader, String.class); // assertThat(response.getStatusCode()).isEqualTo(FORBIDDEN); // } //}