From 10860cb8302c32f027b9759287ba488a751d3fc2 Mon Sep 17 00:00:00 2001 From: stvort Date: Sat, 28 Sep 2019 14:22:21 +0400 Subject: [PATCH] 2019-08 spring-05 shell test example implemented --- .../spring-05/application-events-demo/pom.xml | 30 +++++++++ .../shell/ApplicationEventsCommandsTest.java | 67 +++++++++++++++++++ .../src/test/resources/application.yml | 4 ++ 3 files changed, 101 insertions(+) create mode 100644 2019-08/spring-05/application-events-demo/src/test/java/ru/otus/example/applicationeventsdemo/shell/ApplicationEventsCommandsTest.java create mode 100644 2019-08/spring-05/application-events-demo/src/test/resources/application.yml diff --git a/2019-08/spring-05/application-events-demo/pom.xml b/2019-08/spring-05/application-events-demo/pom.xml index 415292a8..a3058e76 100644 --- a/2019-08/spring-05/application-events-demo/pom.xml +++ b/2019-08/spring-05/application-events-demo/pom.xml @@ -38,6 +38,36 @@ 2.0.1.RELEASE + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + junit + junit + + + + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + diff --git a/2019-08/spring-05/application-events-demo/src/test/java/ru/otus/example/applicationeventsdemo/shell/ApplicationEventsCommandsTest.java b/2019-08/spring-05/application-events-demo/src/test/java/ru/otus/example/applicationeventsdemo/shell/ApplicationEventsCommandsTest.java new file mode 100644 index 00000000..ee3c8d0f --- /dev/null +++ b/2019-08/spring-05/application-events-demo/src/test/java/ru/otus/example/applicationeventsdemo/shell/ApplicationEventsCommandsTest.java @@ -0,0 +1,67 @@ +package ru.otus.example.applicationeventsdemo.shell; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.shell.Availability; +import org.springframework.shell.CommandNotCurrentlyAvailable; +import org.springframework.shell.Shell; +import org.springframework.test.annotation.DirtiesContext; +import ru.otus.example.applicationeventsdemo.events.EventsPublisher; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@DisplayName("Тест команд shell ") +@SpringBootTest +class ApplicationEventsCommandsTest { + + @MockBean + private EventsPublisher eventsPublisher; + + @Autowired + private Shell shell; + + private static final String GREETING_PATTERN = "Добро пожаловать: %s"; + private static final String DEFAULT_LOGIN = "stvort"; + private static final String CUSTOM_LOGIN = "Вася"; + private static final String COMMAND_LOGIN = "login"; + private static final String COMMAND_LOGIN_SHORT = "l"; + private static final String COMMAND_PUBLISH = "publish"; + private static final String COMMAND_PUBLISH_EXPECTED_RESULT = "Событие опубликовано"; + private static final String COMMAND_LOGIN_PATTERN = "%s %s"; + + @DisplayName(" должен возвращать приветствие для всех форм команды логина") + @Test + void shouldReturnExpectedGreetingAfterLoginCommandEvaluated() { + String res = (String) shell.evaluate(() -> COMMAND_LOGIN); + assertThat(res).isEqualTo(String.format(GREETING_PATTERN, DEFAULT_LOGIN)); + + res = (String) shell.evaluate(() -> COMMAND_LOGIN_SHORT); + assertThat(res).isEqualTo(String.format(GREETING_PATTERN, DEFAULT_LOGIN)); + + res = (String) shell.evaluate(() -> String.format(COMMAND_LOGIN_PATTERN, COMMAND_LOGIN_SHORT, CUSTOM_LOGIN)); + assertThat(res).isEqualTo(String.format(GREETING_PATTERN, CUSTOM_LOGIN)); + } + + @DisplayName(" должен возвращать CommandNotCurrentlyAvailable если при попытке выполнения команды publish пользователь выполнил вход") + @DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD) + @Test + void shouldReturnCommandNotCurrentlyAvailableObjectWhenUserDoesNotLoginAfterPublishCommandEvaluated() { + Object res = shell.evaluate(() -> COMMAND_PUBLISH); + assertThat(res).isInstanceOf(CommandNotCurrentlyAvailable.class); + } + + @DisplayName(" должен возвращать статус выполнения команды publish и вызвать соответствующий метод сервиса есл икоманда выполнена после входа") + @DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD) + @Test + void shouldReturnExpectedMessageAndFirePublishMethodAfterPublishCommandEvaluated() { + shell.evaluate(() -> COMMAND_LOGIN); + String res = (String) shell.evaluate(() -> COMMAND_PUBLISH); + assertThat(res).isEqualTo(COMMAND_PUBLISH_EXPECTED_RESULT); + verify(eventsPublisher, times(1)).publish(); + } +} \ No newline at end of file diff --git a/2019-08/spring-05/application-events-demo/src/test/resources/application.yml b/2019-08/spring-05/application-events-demo/src/test/resources/application.yml new file mode 100644 index 00000000..b4921681 --- /dev/null +++ b/2019-08/spring-05/application-events-demo/src/test/resources/application.yml @@ -0,0 +1,4 @@ +spring: + shell: + interactive: + enabled: false