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