183 lines
7.5 KiB
Java
183 lines
7.5 KiB
Java
package pl.edu.amu.wmi.bookapi.Integration.api;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.TestInstance;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
|
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
|
import org.springframework.test.web.servlet.MockMvc;
|
|
import pl.edu.amu.wmi.bookapi.fixtures.IntegrationTestUtil;
|
|
import pl.edu.amu.wmi.bookapi.fixtures.api.BookControllerRequest;
|
|
import pl.edu.amu.wmi.bookapi.fixtures.api.UserControllerRequests;
|
|
import pl.edu.amu.wmi.bookapi.models.BookDocument;
|
|
|
|
import java.util.List;
|
|
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
|
|
@SpringBootTest
|
|
@AutoConfigureMockMvc
|
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
|
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class })
|
|
public class BookControllerInt {
|
|
@Autowired
|
|
MongoTemplate mongoTemplate;
|
|
|
|
@Autowired
|
|
MockMvc mvc;
|
|
|
|
@Autowired
|
|
IntegrationTestUtil testUtil;
|
|
|
|
private BookControllerRequest bookRequests;
|
|
private UserControllerRequests userRequests;
|
|
|
|
@BeforeEach
|
|
void cleanCollections() {
|
|
this.bookRequests = new BookControllerRequest(mvc, new ObjectMapper());
|
|
this.userRequests = new UserControllerRequests(mvc, new ObjectMapper());
|
|
testUtil.cleanCollections();
|
|
}
|
|
|
|
@Test
|
|
void should_add_a_book() throws Exception {
|
|
userRequests.registerUser("a-1", "p-1");
|
|
String bearer = userRequests.loginAsUserAndReturnAuthorizationHeader("a-1", "p-1");
|
|
|
|
this.bookRequests.addBook(bearer, "12345", "auth", "title")
|
|
.andExpect(status().isOk());
|
|
assertEquals(mongoTemplate.findAll(BookDocument.class).get(0).getEan(), "12345");
|
|
assertEquals(mongoTemplate.findAll(BookDocument.class).get(0).getOwnerUsername(), "a-1");
|
|
}
|
|
|
|
@Test
|
|
void should_list_books_for_user() throws Exception {
|
|
userRequests.registerUser("a","b");
|
|
String user1 = userRequests.loginAsUserAndReturnAuthorizationHeader("a", "b");
|
|
|
|
userRequests.registerUser("b","b");
|
|
String user2 = userRequests.loginAsUserAndReturnAuthorizationHeader("b", "b");
|
|
|
|
this.bookRequests.addBook(user1, "12345", "auth", "title")
|
|
.andExpect(status().isOk());
|
|
this.bookRequests.addBook(user1, "12345", "auth", "title")
|
|
.andExpect(status().isOk());
|
|
this.bookRequests.addBook(user2, "12345", "auth", "title")
|
|
.andExpect(status().isOk());
|
|
|
|
bookRequests.getBooksForUser(user1)
|
|
.andExpect(status().isOk())
|
|
.andExpect(jsonPath("$.*.ownerUsername", equalTo(List.of("a", "a"))));
|
|
}
|
|
|
|
@Test
|
|
void should_delete_a_book() throws Exception {
|
|
userRequests.registerUser("a","b");
|
|
String user1 = userRequests.loginAsUserAndReturnAuthorizationHeader("a", "b");
|
|
|
|
userRequests.registerUser("b","b");
|
|
String user2 = userRequests.loginAsUserAndReturnAuthorizationHeader("b", "b");
|
|
|
|
|
|
this.bookRequests.addBook(user1, "12345", "auth", "title")
|
|
.andExpect(status().isOk());
|
|
|
|
BookDocument foundBook = mongoTemplate.findAll(BookDocument.class).get(0);
|
|
assertEquals(foundBook.getEan(), "12345");
|
|
|
|
// Should not allow other users to delete books
|
|
this.bookRequests.deleteBook(user2, foundBook.getId());
|
|
assertEquals(1, mongoTemplate.findAll(BookDocument.class).size());
|
|
|
|
this.bookRequests.deleteBook(user1, foundBook.getId());
|
|
assertEquals(0, mongoTemplate.findAll(BookDocument.class).size());
|
|
}
|
|
|
|
@Test
|
|
void should_list_all_books() throws Exception {
|
|
userRequests.registerUser("a-1", "p-1");
|
|
String bearer1 = userRequests.loginAsUserAndReturnAuthorizationHeader("a-1", "p-1");
|
|
|
|
userRequests.registerUser("a-2", "p-1");
|
|
String bearer2 = userRequests.loginAsUserAndReturnAuthorizationHeader("a-1", "p-1");
|
|
|
|
userRequests.registerUser("a-3", "p-1");
|
|
String bearer3 = userRequests.loginAsUserAndReturnAuthorizationHeader("a-1", "p-1");
|
|
|
|
userRequests.registerUser("a-4", "p-1");
|
|
String bearer4 = userRequests.loginAsUserAndReturnAuthorizationHeader("a-1", "p-1");
|
|
|
|
|
|
this.bookRequests.addBook(bearer1, "123451", "auth1", "title1")
|
|
.andExpect(status().isOk());
|
|
this.bookRequests.addBook(bearer2, "123452", "auth2", "title2")
|
|
.andExpect(status().isOk());
|
|
this.bookRequests.addBook(bearer3, "123453", "auth3", "title3")
|
|
.andExpect(status().isOk());
|
|
|
|
this.bookRequests.getAllBooks(bearer4)
|
|
.andExpect(status().isOk())
|
|
.andExpect(jsonPath("$").isArray());
|
|
}
|
|
|
|
@Test
|
|
void should_update_a_book() throws Exception {
|
|
userRequests.registerUser("a-1", "p-1");
|
|
String bearer = userRequests.loginAsUserAndReturnAuthorizationHeader("a-1", "p-1");
|
|
|
|
userRequests.registerUser("a-2", "p-1");
|
|
String otherUser = userRequests.loginAsUserAndReturnAuthorizationHeader("a-2", "p-1");
|
|
|
|
this.bookRequests.addBook(bearer, "12345", "1", "2")
|
|
.andExpect(status().isOk());
|
|
|
|
BookDocument foundBook = mongoTemplate.findAll(BookDocument.class).get(0);
|
|
String bookId = foundBook.getId();
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
this.bookRequests.updateBook(bookId, bearer,
|
|
"{\n" +
|
|
" \"ean\": " + objectMapper.writeValueAsString("ean") + ",\n" +
|
|
" \"author\": " + objectMapper.writeValueAsString("author") + ",\n" +
|
|
" \"title\": " + objectMapper.writeValueAsString("title") + "\n" +
|
|
"}").andExpect(status().isOk());
|
|
|
|
BookDocument foundBookAfterUpdate = mongoTemplate.findAll(BookDocument.class).get(0);
|
|
|
|
assertEquals("ean", foundBookAfterUpdate.getEan());
|
|
assertEquals("author", foundBookAfterUpdate.getAuthor());
|
|
assertEquals("title", foundBookAfterUpdate.getTitle());
|
|
|
|
// And should allow for partial update
|
|
this.bookRequests.updateBook(bookId, bearer,
|
|
"{\n" +
|
|
"\"ean\": " + objectMapper.writeValueAsString("ean-1-modified") + "\n" +
|
|
"}").andExpect(status().isOk());
|
|
|
|
BookDocument foundBookAfterPartialUpdate = mongoTemplate.findAll(BookDocument.class).get(0);
|
|
|
|
assertEquals("ean-1-modified", foundBookAfterPartialUpdate.getEan());
|
|
assertEquals("author", foundBookAfterPartialUpdate.getAuthor());
|
|
assertEquals("title", foundBookAfterPartialUpdate.getTitle());
|
|
|
|
// And should not allow other users to modify book
|
|
|
|
this.bookRequests.updateBook(bookId, otherUser, "{\n" +
|
|
"\"ean\": " + objectMapper.writeValueAsString("abc") + "\n" +
|
|
"}");
|
|
BookDocument foundBookAfterOtherUserUpdate = mongoTemplate.findAll(BookDocument.class).get(0);
|
|
|
|
assertEquals("ean-1-modified", foundBookAfterOtherUserUpdate.getEan());
|
|
}
|
|
|
|
}
|