From a86b5ada5b07ec18671983b0c772063815cac334 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Tue, 17 Oct 2017 22:43:27 +0300 Subject: tests refatoring now api and www tests uses embedded db --- .../juick/www/configuration/WwwInitializer.java | 4 +- .../src/test/java/com/juick/www/WebAppTests.java | 172 +++++++-------------- 2 files changed, 61 insertions(+), 115 deletions(-) (limited to 'juick-www/src') diff --git a/juick-www/src/main/java/com/juick/www/configuration/WwwInitializer.java b/juick-www/src/main/java/com/juick/www/configuration/WwwInitializer.java index c621c450..36de7a6d 100644 --- a/juick-www/src/main/java/com/juick/www/configuration/WwwInitializer.java +++ b/juick-www/src/main/java/com/juick/www/configuration/WwwInitializer.java @@ -17,6 +17,7 @@ package com.juick.www.configuration; +import com.juick.configuration.DataConfiguration; import com.juick.configuration.SearchConfiguration; import org.apache.commons.codec.CharEncoding; import org.springframework.web.filter.CharacterEncodingFilter; @@ -38,7 +39,8 @@ public class WwwInitializer extends AbstractAnnotationConfigDispatcherServletIni WwwAppConfiguration.class, SearchConfiguration.class, SapeConfiguration.class, - WebSecurityConfig.class + WebSecurityConfig.class, + DataConfiguration.class }; } diff --git a/juick-www/src/test/java/com/juick/www/WebAppTests.java b/juick-www/src/test/java/com/juick/www/WebAppTests.java index c2f6b0d9..73750cb7 100644 --- a/juick-www/src/test/java/com/juick/www/WebAppTests.java +++ b/juick-www/src/test/java/com/juick/www/WebAppTests.java @@ -25,10 +25,11 @@ import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.juick.Message; import com.juick.Tag; import com.juick.User; -import com.juick.configuration.MockDataConfiguration; +import com.juick.configuration.RepositoryConfiguration; +import com.juick.service.ImagesService; import com.juick.service.MessagesService; +import com.juick.service.MockImagesService; import com.juick.service.UserService; -import com.juick.test.util.MockUtils; import com.juick.util.MessageUtils; import com.juick.www.configuration.SapeConfiguration; import com.juick.www.configuration.WwwAppConfiguration; @@ -37,13 +38,13 @@ import com.mitchellbosecke.pebble.PebbleEngine; import com.mitchellbosecke.pebble.error.PebbleException; import com.mitchellbosecke.pebble.template.PebbleTemplate; import org.apache.commons.text.StringEscapeUtils; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @@ -56,87 +57,82 @@ import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.StreamSupport; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.startsWith; -import static org.mockito.Mockito.when; /** * Created by vitalyster on 12.01.2017. */ @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration -@ContextConfiguration +@ContextConfiguration(classes = { + WwwServletConfiguration.class, WwwAppConfiguration.class, SapeConfiguration.class, + RepositoryConfiguration.class +}) public class WebAppTests { @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.juick.www.controllers") - @Import(value = { - WwwServletConfiguration.class, WwwAppConfiguration.class, SapeConfiguration.class, - MockDataConfiguration.class - }) - static class Config {} + static class Config { + @Bean + public ImagesService imagesService() { + return new MockImagesService(); + } + } @Inject private WebApplicationContext wac; @Inject private WebApp webApp; - private WebClient webClient; + private static WebClient webClient; @Inject UserService userService; @Inject MessagesService messagesService; + @Inject + JdbcTemplate jdbcTemplate; @Inject PebbleEngine pebbleEngine; + private static User ugnich, freefd; + private static String ugnichName, ugnichPassword, freefdName, freefdPassword; + + private static boolean isSetUp = false; + @Before public void setup() { - webClient = MockMvcWebClientBuilder.webAppContextSetup(this.wac).build(); - webClient.getOptions().setJavaScriptEnabled(false); - webClient.getOptions().setCssEnabled(false); - } - @After - public void teardown() { - webClient.close(); + if (!isSetUp) { + webClient = MockMvcWebClientBuilder.webAppContextSetup(this.wac).build(); + webClient.getOptions().setJavaScriptEnabled(false); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); + + ugnichName = "ugnich"; + ugnichPassword = "MyPassw0rd!"; + freefdName = "freefd"; + freefdPassword = "MyPassw0rd!"; + + int ugnichId = userService.createUser(ugnichName, ugnichPassword); + ugnich = userService.getUserByUID(ugnichId).orElseThrow(IllegalStateException::new); + int freefdId = userService.createUser(freefdName, freefdPassword); + freefd = userService.getUserByUID(freefdId).orElseThrow(IllegalStateException::new); + + isSetUp = true; + } } @Test public void postWithoutTagsShouldNotHaveAsteriskInTitle() throws Exception { - String ugnichName = "ugnich"; - String ugnichPassword = "MyPassw0rd!"; String msgText = "Привет, я - Угнич"; - String hash = "12345678"; - - User user = MockUtils.mockUser(1, ugnichName, ugnichPassword); - Message msg = MockUtils.mockMessage(1, user, msgText); - - when(userService.getUIDbyName(ugnichName)) - .thenReturn(1); - when(userService.getUserByName(ugnichName)) - .thenReturn(user); - when(userService.getUserByUID(1)) - .thenReturn(Optional.of(user)); - when(userService.getFullyUserByName(ugnichName)) - .thenReturn(user); - when(messagesService.getMyFeed(1, 0, false)) - .thenReturn(Collections.singletonList(1)); - when(messagesService.getMessages(Collections.singletonList(1))) - .thenReturn(Collections.singletonList(msg)); - when(userService.getUIDbyHash(hash)) - .thenReturn(1); - when(messagesService.getMessageAuthor(1)).thenReturn(user); - when(messagesService.canViewThread(1, 0)).thenReturn(true); - when(messagesService.getMessage(1)).thenReturn(msg); - HtmlPage threadPage = webClient.getPage("http://localhost:8080/ugnich/1"); + int mid = messagesService.createMessage(ugnich.getUid(), msgText, null, null); + HtmlPage threadPage = webClient.getPage(String.format("http://localhost:8080/ugnich/%d", mid)); assertThat(threadPage.getTitleText(), equalTo("ugnich:")); } @Test @@ -146,51 +142,21 @@ public class WebAppTests { String msgText = "автор этого поста был забанен"; String hash = "12345678"; - User user = MockUtils.mockUser(2, userName, userPassword); - user.setBanned(true); - Message msg = MockUtils.mockMessage(2, user, msgText); - - when(userService.getUIDbyName(userName)) - .thenReturn(2); - when(userService.getUserByName(userName)) - .thenReturn(user); - when(userService.getUserByUID(2)) - .thenReturn(Optional.of(user)); - when(userService.getFullyUserByName(userName)) - .thenReturn(user); - when(messagesService.getMyFeed(2, 0, false)) - .thenReturn(Collections.singletonList(2)); - when(messagesService.getMessages(Collections.singletonList(2))) - .thenReturn(Collections.singletonList(msg)); - when(userService.getUIDbyHash(hash)) - .thenReturn(1); - when(messagesService.getMessageAuthor(2)).thenReturn(user); - when(messagesService.canViewThread(2, 0)).thenReturn(true); - when(messagesService.getMessage(2)).thenReturn(msg); - webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); + User isilmine = userService.getUserByUID(userService.createUser(userName, userPassword)).orElseThrow(IllegalStateException::new); + int mid = messagesService.createMessage(isilmine.getUid(), msgText, null, null); + jdbcTemplate.update("UPDATE users SET banned=1 WHERE id=?", isilmine.getUid()); Page blogPage = webClient.getPage("http://localhost:8080/isilmine"); - Page threadPage = webClient.getPage("http://localhost:8080/isilmine/2"); + Page threadPage = webClient.getPage(String.format("http://localhost:8080/isilmine/%d", mid)); assertThat(blogPage.getWebResponse().getStatusCode(), equalTo(404)); assertThat(threadPage.getWebResponse().getStatusCode(), equalTo(404)); } @Test public void repliesTree() throws IOException { - User ugnich = MockUtils.mockUser(1, "ugnich", "secret"); - User freefd = MockUtils.mockUser(3, "freefd", "secret"); - Message hello = MockUtils.mockMessage(1, ugnich, null); - List replies = IntStream.range(1, 15).mapToObj(i -> - MockUtils.mockReply(hello.getMid(), i, freefd, i-1, null )).collect(Collectors.toList()); - - when(userService.getUIDbyName("ugnich")).thenReturn(1); - when(userService.getUIDbyName("freefd")).thenReturn(3); - when(userService.getUserByName("ugnich")).thenReturn(ugnich); - when(userService.getUserByName("freefd")).thenReturn(freefd); - - when(messagesService.canViewThread(1, 0)).thenReturn(true); - when(messagesService.getMessage(1)).thenReturn(hello); - when(messagesService.getReplies(1)).thenReturn(replies); + int mid = messagesService.createMessage(ugnich.getUid(), "hello", null, null); + IntStream.range(1, 15).forEach(i -> + messagesService.createReply(mid, i-1, freefd.getUid(), String.valueOf(i-1), null )); - HtmlPage threadPage = webClient.getPage("http://localhost:8080/ugnich/1"); + HtmlPage threadPage = webClient.getPage(String.format("http://localhost:8080/ugnich/%d", mid)); assertThat(threadPage.getWebResponse().getStatusCode(), equalTo(200)); Long visibleItems = StreamSupport.stream(threadPage.getHtmlElementById("replies") .getChildElements().spliterator(), false).filter(e -> { @@ -218,40 +184,18 @@ public class WebAppTests { } @Test public void testTwitterCards() throws Exception { - String ugnichName = "ugnich"; - String ugnichPassword = "MyPassw0rd!"; - String msgText = "Привет, я - Угнич"; - String hash = "12345678"; - - User user = MockUtils.mockUser(1, ugnichName, ugnichPassword); - Message msg = MockUtils.mockMessage(1, user, msgText); - when(userService.getUIDbyName(ugnichName)) - .thenReturn(1); - when(userService.getUserByName(ugnichName)) - .thenReturn(user); - when(userService.getUserByUID(1)) - .thenReturn(Optional.of(user)); - when(userService.getFullyUserByName(ugnichName)) - .thenReturn(user); - when(messagesService.getMyFeed(1, 0, false)) - .thenReturn(Collections.singletonList(1)); - when(messagesService.getMessages(Collections.singletonList(1))) - .thenReturn(Collections.singletonList(msg)); - when(userService.getUIDbyHash(hash)) - .thenReturn(1); - when(messagesService.getMessageAuthor(1)).thenReturn(user); - when(messagesService.canViewThread(1, 0)).thenReturn(true); - when(messagesService.getMessage(1)).thenReturn(msg); + int mid = messagesService.createMessage(ugnich.getUid(), "without image", null, null); - assertThat(fetchMeta("http://localhost:8080/ugnich/1", "twitter:card") + assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid), "twitter:card") .getAttribute("content"), equalTo("summary")); - msg.setAttachmentType("png"); - assertThat(fetchMeta("http://localhost:8080/ugnich/1", "twitter:card") + int mid2 = messagesService.createMessage(ugnich.getUid(), "with image", "png", null); + Message message = messagesService.getMessage(mid2); + assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid2), "twitter:card") .getAttribute("content"), equalTo("summary_large_image")); - assertThat(fetchMeta("http://localhost:8080/ugnich/1", "og:description") + assertThat(fetchMeta(String.format("http://localhost:8080/ugnich/%d", mid2), "og:description") .getAttribute("content"), - startsWith(StringEscapeUtils.escapeHtml4(MessageUtils.getMessageHashTags(msg)))); + startsWith(StringEscapeUtils.escapeHtml4(MessageUtils.getMessageHashTags(message)))); } } -- cgit v1.2.3