Skip to content

Commit dc3200d

Browse files
committed
Add test converage to state machine
1 parent 9a1fa5c commit dc3200d

File tree

3 files changed

+106
-2
lines changed

3 files changed

+106
-2
lines changed

idempotent-consumer/src/main/java/com/iluwatar/idempotentconsumer/Request.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ public class Request {
4141
enum Status {
4242
PENDING,
4343
STARTED,
44-
COMPLETED,
45-
INERROR
44+
COMPLETED
4645
}
4746

4847
@Id
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.iluwatar.idempotentconsumer;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.mockito.Mockito;
5+
import org.springframework.boot.CommandLineRunner;
6+
7+
import java.util.UUID;
8+
9+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
10+
import static org.mockito.ArgumentMatchers.any;
11+
import static org.mockito.Mockito.times;
12+
import static org.mockito.Mockito.verify;
13+
import static org.mockito.Mockito.when;
14+
15+
/**
16+
* Application test
17+
*/
18+
class AppTest {
19+
20+
@Test
21+
void main() {
22+
assertDoesNotThrow(() -> App.main(new String[] {}));
23+
}
24+
25+
@Test
26+
void run() throws Exception {
27+
RequestService requestService = Mockito.mock(RequestService.class);
28+
RequestRepository requestRepository = Mockito.mock(RequestRepository.class);
29+
UUID uuid = UUID.randomUUID();
30+
Request requestPending = new Request(uuid);
31+
Request requestStarted = new Request(uuid, Request.Status.STARTED);
32+
Request requestCompleted = new Request(uuid, Request.Status.COMPLETED);
33+
when(requestService.create(any())).thenReturn(requestPending);
34+
when(requestService.start(any())).thenReturn(requestStarted);
35+
when(requestService.complete(any())).thenReturn(requestCompleted);
36+
37+
CommandLineRunner runner = new App().run(requestService, requestRepository);
38+
39+
runner.run();
40+
41+
verify(requestService, times(3)).create(any());
42+
verify(requestService, times(2)).start(any());
43+
verify(requestService, times(1)).complete(any());
44+
verify(requestRepository, times(1)).count();
45+
}
46+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.iluwatar.idempotentconsumer;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
import java.util.UUID;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertThrows;
9+
10+
class RequestStateMachineTests {
11+
private RequestStateMachine requestStateMachine;
12+
13+
@BeforeEach
14+
public void setUp() {
15+
requestStateMachine = new RequestStateMachine();
16+
}
17+
18+
@Test
19+
void transitionPendingToStarted() {
20+
Request startedRequest = requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.PENDING),
21+
Request.Status.STARTED);
22+
assertEquals(Request.Status.STARTED, startedRequest.getStatus());
23+
}
24+
25+
@Test
26+
void transitionAnyToPending_shouldThrowError() {
27+
assertThrows(InvalidNextStateException.class,
28+
() -> requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.PENDING),
29+
Request.Status.PENDING));
30+
assertThrows(InvalidNextStateException.class,
31+
() -> requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.STARTED),
32+
Request.Status.PENDING));
33+
assertThrows(InvalidNextStateException.class,
34+
() -> requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.COMPLETED),
35+
Request.Status.PENDING));
36+
}
37+
38+
@Test
39+
void transitionCompletedToAny_shouldThrowError() {
40+
assertThrows(InvalidNextStateException.class,
41+
() -> requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.COMPLETED),
42+
Request.Status.PENDING));
43+
assertThrows(InvalidNextStateException.class,
44+
() -> requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.COMPLETED),
45+
Request.Status.STARTED));
46+
assertThrows(InvalidNextStateException.class,
47+
() -> requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.COMPLETED),
48+
Request.Status.COMPLETED));
49+
}
50+
51+
@Test
52+
void transitionStartedToCompleted() {
53+
Request completedRequest = requestStateMachine.next(new Request(UUID.randomUUID(), Request.Status.STARTED),
54+
Request.Status.COMPLETED);
55+
assertEquals(Request.Status.COMPLETED, completedRequest.getStatus());
56+
}
57+
58+
59+
}

0 commit comments

Comments
 (0)