|
| 1 | +package {{cookiecutter.package_name}}; |
| 2 | + |
| 3 | +import static org.assertj.core.api.Assertions.assertThat; |
| 4 | +import static org.assertj.core.api.Assertions.assertThatThrownBy; |
| 5 | + |
| 6 | +import java.util.List; |
| 7 | +import java.util.Optional; |
| 8 | +import org.junit.jupiter.api.DisplayName; |
| 9 | +import org.junit.jupiter.api.Test; |
| 10 | +import org.junit.jupiter.api.extension.ExtendWith; |
| 11 | +import org.mockito.Mock; |
| 12 | +import org.mockito.Mockito; |
| 13 | +import org.mockito.junit.jupiter.MockitoExtension; |
| 14 | +import {{cookiecutter.package_name}}.domain.{{cookiecutter.domain_capitalized}}Domain; |
| 15 | +import {{cookiecutter.package_name}}.domain.exception.{{cookiecutter.domain_capitalized}}NotFoundException; |
| 16 | +import {{cookiecutter.package_name}}.domain.model.{{cookiecutter.domain_capitalized}}; |
| 17 | +import {{cookiecutter.package_name}}.domain.port.Obtain{{cookiecutter.domain_capitalized}}; |
| 18 | + |
| 19 | +@ExtendWith(MockitoExtension.class) |
| 20 | +public class AcceptanceTest { |
| 21 | + |
| 22 | + @Test |
| 23 | + @DisplayName("should be able to get {{cookiecutter.domain_plural}} when asked for {{cookiecutter.domain_plural}} from hard coded {{cookiecutter.domain_plural}}") |
| 24 | + public void get{{cookiecutter.domain_plural_capitalized}}FromHardCoded() { |
| 25 | + /* |
| 26 | + Request{{cookiecutter.domain_capitalized}} - left side port |
| 27 | + {{cookiecutter.domain_capitalized}}Domain - hexagon (domain) |
| 28 | + Obtain{{cookiecutter.domain_capitalized}} - right side port |
| 29 | + */ |
| 30 | + var request{{cookiecutter.domain_capitalized}} = new {{cookiecutter.domain_capitalized}}Domain(); // the {{cookiecutter.domain}} is hard coded |
| 31 | + var {{cookiecutter.domain_plural}} = request{{cookiecutter.domain_capitalized}}.get{{cookiecutter.domain_plural_capitalized}}(); |
| 32 | + assertThat({{cookiecutter.domain_plural}}) |
| 33 | + .hasSize(1) |
| 34 | + .extracting("description") |
| 35 | + .contains( |
| 36 | + "If you could read a leaf or tree\r\nyoud have no need of books.\r\n-- Alistair Cockburn (1987)"); |
| 37 | + } |
| 38 | + |
| 39 | + @Test |
| 40 | + @DisplayName("should be able to get {{cookiecutter.domain_plural}} when asked for {{cookiecutter.domain_plural}} from stub") |
| 41 | + public void get{{cookiecutter.domain_plural_capitalized}}FromMockedStub(@Mock Obtain{{cookiecutter.domain_capitalized}} obtain{{cookiecutter.domain_capitalized}}) { |
| 42 | + // Stub |
| 43 | + var {{cookiecutter.domain}} = |
| 44 | + {{cookiecutter.domain_capitalized}}.builder() |
| 45 | + .code(1L) |
| 46 | + .description( |
| 47 | + "I want to sleep\r\nSwat the flies\r\nSoftly, please.\r\n\r\n-- Masaoka Shiki (1867-1902)") |
| 48 | + .build(); |
| 49 | + Mockito.lenient().when(obtain{{cookiecutter.domain_capitalized}}.getAll{{cookiecutter.domain_plural_capitalized}}()).thenReturn(List.of({{cookiecutter.domain}})); |
| 50 | + // hexagon |
| 51 | + var request{{cookiecutter.domain_capitalized}} = new {{cookiecutter.domain_capitalized}}Domain(obtain{{cookiecutter.domain_capitalized}}); |
| 52 | + var {{cookiecutter.domain_plural}} = request{{cookiecutter.domain_capitalized}}.get{{cookiecutter.domain_plural_capitalized}}(); |
| 53 | + assertThat({{cookiecutter.domain_plural}}) |
| 54 | + .hasSize(1) |
| 55 | + .extracting("description") |
| 56 | + .contains( |
| 57 | + "I want to sleep\r\nSwat the flies\r\nSoftly, please.\r\n\r\n-- Masaoka Shiki (1867-1902)"); |
| 58 | + } |
| 59 | + |
| 60 | + @Test |
| 61 | + @DisplayName("should be able to get {{cookiecutter.domain}} when asked for {{cookiecutter.domain}} by id from stub") |
| 62 | + public void get{{cookiecutter.domain_capitalized}}ByIdFromMockedStub(@Mock Obtain{{cookiecutter.domain_capitalized}} obtain{{cookiecutter.domain_capitalized}}) { |
| 63 | + // Given |
| 64 | + // Stub |
| 65 | + var code = 1L; |
| 66 | + var description = |
| 67 | + "I want to sleep\\r\\nSwat the flies\\r\\nSoftly, please.\\r\\n\\r\\n-- Masaoka Shiki (1867-1902)"; |
| 68 | + var expected{{cookiecutter.domain_capitalized}} = {{cookiecutter.domain_capitalized}}.builder().code(code).description(description).build(); |
| 69 | + Mockito.lenient() |
| 70 | + .when(obtain{{cookiecutter.domain_capitalized}}.get{{cookiecutter.domain_capitalized}}ByCode(code)) |
| 71 | + .thenReturn(Optional.of(expected{{cookiecutter.domain_capitalized}})); |
| 72 | + // When |
| 73 | + var request{{cookiecutter.domain_capitalized}} = new {{cookiecutter.domain_capitalized}}Domain(obtain{{cookiecutter.domain_capitalized}}); |
| 74 | + var actual{{cookiecutter.domain_capitalized}} = request{{cookiecutter.domain_capitalized}}.get{{cookiecutter.domain_capitalized}}ByCode(code); |
| 75 | + assertThat(actual{{cookiecutter.domain_capitalized}}).isNotNull().isEqualTo(expected{{cookiecutter.domain_capitalized}}); |
| 76 | + } |
| 77 | + |
| 78 | + @Test |
| 79 | + @DisplayName("should throw exception when asked for {{cookiecutter.domain}} by id that does not exists from stub") |
| 80 | + public void getExceptionWhenAsked{{cookiecutter.domain_capitalized}}ByIdThatDoesNotExist(@Mock Obtain{{cookiecutter.domain_capitalized}} obtain{{cookiecutter.domain_capitalized}}) { |
| 81 | + // Given |
| 82 | + // Stub |
| 83 | + var code = -1000L; |
| 84 | + Mockito.lenient().when(obtain{{cookiecutter.domain_capitalized}}.get{{cookiecutter.domain_capitalized}}ByCode(code)).thenReturn(Optional.empty()); |
| 85 | + // When |
| 86 | + var request{{cookiecutter.domain_capitalized}} = new {{cookiecutter.domain_capitalized}}Domain(obtain{{cookiecutter.domain_capitalized}}); |
| 87 | + // Then |
| 88 | + assertThatThrownBy(() -> request{{cookiecutter.domain_capitalized}}.get{{cookiecutter.domain_capitalized}}ByCode(code)) |
| 89 | + .isInstanceOf({{cookiecutter.domain_capitalized}}NotFoundException.class) |
| 90 | + .hasMessageContaining("{{cookiecutter.domain_capitalized}} with code " + code + " does not exist"); |
| 91 | + } |
| 92 | +} |
0 commit comments