Skip to content

Commit f272f3b

Browse files
committed
aggiunti test esercizio 5
1 parent 82a13ff commit f272f3b

File tree

9 files changed

+137
-8
lines changed

9 files changed

+137
-8
lines changed

04_driven_pull/src/test/java/io/doubleloop/drivenpull/DefaultDailyBalanceServiceTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import org.junit.jupiter.api.BeforeEach;
44
import org.junit.jupiter.api.Test;
55
import org.springframework.beans.factory.annotation.Autowired;
6-
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
76
import org.springframework.boot.test.context.SpringBootTest;
87
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
98
import org.testcontainers.containers.MongoDBContainer;
@@ -16,7 +15,6 @@
1615
import static org.assertj.core.api.Assertions.assertThat;
1716

1817
@SpringBootTest
19-
@AutoConfigureMockMvc
2018
@Testcontainers
2119
class DefaultDailyBalanceServiceTest {
2220
@Container

05_driven_push/pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,17 @@
6464
<artifactId>junit-jupiter</artifactId>
6565
<scope>test</scope>
6666
</dependency>
67+
<dependency>
68+
<groupId>org.testcontainers</groupId>
69+
<artifactId>mongodb</artifactId>
70+
<scope>test</scope>
71+
</dependency>
72+
<dependency>
73+
<groupId>org.testcontainers</groupId>
74+
<artifactId>rabbitmq</artifactId>
75+
<version>1.20.3</version>
76+
<scope>test</scope>
77+
</dependency>
6778
</dependencies>
6879

6980
</project>

05_driven_push/src/main/java/io/doubleloop/drivenpush/DemoMessageConsumer.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,22 @@ public class DemoMessageConsumer {
1515

1616
private final Jsonb jsonb;
1717

18+
private PostMessageCommand lastPostMessage;
19+
1820
public DemoMessageConsumer(Jsonb jsonb) {
1921
this.jsonb = jsonb;
2022
}
2123

2224
public void receiveMessage(String message) {
23-
final var post = jsonb.fromJson(message, PostMessageCommand.class);
24-
log.info("Received: {}", post);
25+
lastPostMessage = jsonb.fromJson(message, PostMessageCommand.class);
26+
log.info("Received: {}", lastPostMessage);
27+
}
28+
29+
public PostMessageCommand getLastPostMessage() {
30+
return lastPostMessage;
31+
}
32+
33+
public void resetLastPostMessage() {
34+
lastPostMessage = null;
2535
}
2636
}

05_driven_push/src/main/java/io/doubleloop/drivenpush/PostMessageCommand.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.doubleloop.drivenpush;
22

3+
import java.util.Objects;
4+
35
public class PostMessageCommand {
46

57
private String userId;
@@ -29,6 +31,18 @@ public void setContent(String content) {
2931
this.content = content;
3032
}
3133

34+
@Override
35+
public boolean equals(Object o) {
36+
if (o == null || getClass() != o.getClass()) return false;
37+
PostMessageCommand that = (PostMessageCommand) o;
38+
return Objects.equals(userId, that.userId) && Objects.equals(content, that.content);
39+
}
40+
41+
@Override
42+
public int hashCode() {
43+
return Objects.hash(userId, content);
44+
}
45+
3246
@Override
3347
public String toString() {
3448
return "PostMessageCommand{" +

05_driven_push/src/main/java/io/doubleloop/drivenpush/SeedDatabase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ public class SeedDatabase implements CommandLineRunner {
1010

1111
private static final Logger log = LoggerFactory.getLogger(SeedDatabase.class);
1212

13-
private final SpringUserRepository repository;
13+
private final SpringMongoUserRepository repository;
1414

15-
public SeedDatabase(SpringUserRepository repository) {
15+
public SeedDatabase(SpringMongoUserRepository repository) {
1616
this.repository = repository;
1717
}
1818

05_driven_push/src/main/java/io/doubleloop/drivenpush/SpringUserRepository.java renamed to 05_driven_push/src/main/java/io/doubleloop/drivenpush/SpringMongoUserRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
import org.springframework.data.mongodb.repository.MongoRepository;
44

5-
public interface SpringUserRepository extends MongoRepository<User, String>, UserRepository {
5+
public interface SpringMongoUserRepository extends MongoRepository<User, String>, UserRepository {
66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
spring.rabbitmq.host=localhost
22
spring.rabbitmq.port=5672
3+
spring.rabbitmq.username=myuser
34
spring.rabbitmq.password=secret
4-
spring.rabbitmq.username=myuser
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package io.doubleloop.drivenpush;
2+
3+
import org.junit.jupiter.api.BeforeAll;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.boot.test.context.SpringBootTest;
8+
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
9+
import org.testcontainers.containers.MongoDBContainer;
10+
import org.testcontainers.containers.RabbitMQContainer;
11+
import org.testcontainers.junit.jupiter.Container;
12+
import org.testcontainers.junit.jupiter.Testcontainers;
13+
14+
import static java.lang.Thread.sleep;
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
17+
18+
@SpringBootTest
19+
@Testcontainers
20+
class DefaultPostServiceTest {
21+
22+
@Container
23+
@ServiceConnection
24+
private static MongoDBContainer container = new MongoDBContainer("mongo:latest");
25+
26+
@Container
27+
static final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer("rabbitmq:latest")
28+
.withUser("guest", "guest")
29+
.withExposedPorts(5672);
30+
31+
@Autowired
32+
private DemoMessageConsumer consumer;
33+
34+
@Autowired
35+
private SpringMongoUserRepository userRepository;
36+
@Autowired
37+
private PostService postService;
38+
39+
@BeforeAll
40+
static void setup() {
41+
System.setProperty("spring.rabbitmq.host", rabbitMQContainer.getHost());
42+
System.setProperty("spring.rabbitmq.port", rabbitMQContainer.getAmqpPort().toString());
43+
System.setProperty("spring.rabbitmq.username", "guest");
44+
System.setProperty("spring.rabbitmq.password", "guest");
45+
}
46+
47+
@BeforeEach
48+
void setUp() {
49+
userRepository.deleteAll();
50+
consumer.resetLastPostMessage();
51+
}
52+
53+
@Test
54+
void userPostMessage() throws Exception {
55+
final var user = userRepository.save(new User("[email protected]", false));
56+
57+
final var command = new PostMessageCommand();
58+
command.setUserId(user.getId());
59+
command.setContent("test");
60+
61+
postService.postMessage(command);
62+
63+
sleep(100);
64+
final var post = consumer.getLastPostMessage();
65+
assertThat(post).isEqualTo(command);
66+
}
67+
68+
@Test
69+
void blockedUserPostMessage() throws Exception {
70+
final var user = userRepository.save(new User("[email protected]", true));
71+
72+
final var command = new PostMessageCommand();
73+
command.setUserId(user.getId());
74+
command.setContent("test");
75+
76+
assertThatThrownBy(() -> postService.postMessage(command))
77+
.isInstanceOf(IllegalArgumentException.class);
78+
}
79+
80+
@Test
81+
void unknownUserPostMessage() throws Exception {
82+
final var user = userRepository.save(new User("[email protected]", true));
83+
84+
final var command = new PostMessageCommand();
85+
command.setUserId("unknown");
86+
command.setContent("test");
87+
88+
assertThatThrownBy(() -> postService.postMessage(command))
89+
.isInstanceOf(IllegalArgumentException.class);
90+
}
91+
}

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@
9797
<version>1.19.8</version>
9898
<scope>test</scope>
9999
</dependency>
100+
<dependency>
101+
<groupId>org.testcontainers</groupId>
102+
<artifactId>rabbitmq</artifactId>
103+
<scope>test</scope>
104+
</dependency>
100105
<dependency>
101106
<groupId>org.wiremock.integrations</groupId>
102107
<artifactId>wiremock-spring-boot</artifactId>

0 commit comments

Comments
 (0)