Skip to content

Commit 2e2c8d2

Browse files
committed
feat: domain
1 parent b7ab39f commit 2e2c8d2

File tree

4 files changed

+181
-2
lines changed

4 files changed

+181
-2
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<groupId>{{cookiecutter.group_id}}</groupId>
7+
<artifactId>{{cookiecutter.artifact_id}}-parent</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
<artifactId>domain</artifactId>
12+
<dependencies>
13+
<dependency>
14+
<groupId>{{cookiecutter.group_id}}</groupId>
15+
<artifactId>domain-api</artifactId>
16+
</dependency>
17+
<dependency>
18+
<groupId>org.assertj</groupId>
19+
<artifactId>assertj-core</artifactId>
20+
<scope>test</scope>
21+
</dependency>
22+
</dependencies>
23+
<build>
24+
<plugins>
25+
<plugin>
26+
<groupId>com.societegenerale.commons</groupId>
27+
<artifactId>arch-unit-maven-plugin</artifactId>
28+
<configuration>
29+
<rules>
30+
<preConfiguredRules>
31+
<rule>com.societegenerale.commons.plugin.rules.NoStandardStreamRuleTest</rule>
32+
<rule>com.societegenerale.commons.plugin.rules.NoJodaTimeRuleTest</rule>
33+
<rule>com.societegenerale.commons.plugin.rules.NoJavaUtilDateRuleTest</rule>
34+
<rule>com.societegenerale.commons.plugin.rules.NoPrefixForInterfacesRuleTest</rule>
35+
<rule>com.societegenerale.commons.plugin.rules.NoPublicFieldRuleTest</rule>
36+
<rule>com.societegenerale.commons.plugin.rules.NoInjectedFieldTest</rule>
37+
<rule>com.societegenerale.commons.plugin.rules.NoAutowiredFieldTest</rule>
38+
</preConfiguredRules>
39+
</rules>
40+
</configuration>
41+
</plugin>
42+
</plugins>
43+
</build>
44+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package {{cookiecutter.package_name}}.domain;
2+
3+
import java.util.List;
4+
import lombok.NonNull;
5+
import {{cookiecutter.package_name}}.domain.exception.{{cookiecutter.domain_capitalized}}NotFoundException;
6+
import {{cookiecutter.package_name}}.domain.model.{{cookiecutter.domain_capitalized}};
7+
import {{cookiecutter.package_name}}.domain.port.Obtain{{cookiecutter.domain_capitalized}};
8+
import {{cookiecutter.package_name}}.domain.port.Request{{cookiecutter.domain_capitalized}};
9+
10+
public class {{cookiecutter.domain_capitalized}}Domain implements Request{{cookiecutter.domain_capitalized}} {
11+
12+
private final Obtain{{cookiecutter.domain_capitalized}} obtain{{cookiecutter.domain_capitalized}};
13+
14+
public {{cookiecutter.domain_capitalized}}Domain() {
15+
this(new Obtain{{cookiecutter.domain_capitalized}}() {});
16+
}
17+
18+
public {{cookiecutter.domain_capitalized}}Domain(Obtain{{cookiecutter.domain_capitalized}} obtain{{cookiecutter.domain_capitalized}}) {
19+
this.obtain{{cookiecutter.domain_capitalized}} = obtain{{cookiecutter.domain_capitalized}};
20+
}
21+
22+
@Override
23+
public List<{{cookiecutter.domain_capitalized}}> get{{cookiecutter.domain_plural_capitalized}}() {
24+
return obtain{{cookiecutter.domain_capitalized}}.getAll{{cookiecutter.domain_plural_capitalized}}();
25+
}
26+
27+
@Override
28+
public {{cookiecutter.domain_capitalized}} get{{cookiecutter.domain_capitalized}}ByCode(@NonNull Long code) {
29+
var {{cookiecutter.domain}} = obtain{{cookiecutter.domain_capitalized}}.get{{cookiecutter.domain_capitalized}}ByCode(code);
30+
return {{cookiecutter.domain}}.orElseThrow(() -> new {{cookiecutter.domain_capitalized}}NotFoundException(code));
31+
}
32+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
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+
}

{{cookiecutter.app_name}}/pom.xml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,25 @@
3535
</properties>
3636
<modules>
3737
<module>domain-api</module>
38-
<!--<module>domain</module>
39-
<module>rest-adapter</module>
38+
<module>domain</module>
39+
<!--<module>rest-adapter</module>
4040
<module>jpa-adapter</module>
4141
<module>bootstrap</module>
4242
<module>acceptance-test</module>-->
4343
</modules>
4444
<dependencyManagement>
4545
<dependencies>
46+
<!-- Project module dependency -->
47+
<dependency>
48+
<groupId>{{cookiecutter.group_id}}</groupId>
49+
<artifactId>domain-api</artifactId>
50+
<version>${project.version}</version>
51+
</dependency>
52+
<dependency>
53+
<groupId>{{cookiecutter.group_id}}</groupId>
54+
<artifactId>domain</artifactId>
55+
<version>${project.version}</version>
56+
</dependency>
4657
<!-- Frameworks & Libraries -->
4758
<dependency>
4859
<groupId>org.junit</groupId>

0 commit comments

Comments
 (0)