@@ -70,7 +70,9 @@ Notice that `Decider` implements an
7070interface [ ` IDecider ` ] ( src/main/java/com/fraktalio/fmodel/domain/decider/IDecider.java ) to communicate the contract.
7171
7272<details >
73- <summary >Example / Test</summary >
73+ <summary >Example / Given-When-Then Test</summary >
74+
75+ A fluent [ test DSL/builder] ( src/test/java/com/fraktalio/fmodel/dsl/DeciderDSL.java ) to support ` Given-When-Then ` format
7476
7577``` java
7678class DeciderTest {
@@ -131,17 +133,40 @@ class DeciderTest {
131133 (p) - > new NumberState (p. first(), p. second())
132134 );
133135
134- assertIterableEquals(List . of(oddNumberAddedEvent), oddDecider. decide(). apply(addOddNumberCommand, oddState));
135- assertIterableEquals(List . of(evenNumberAddedEvent), evenDecider. decide(). apply(addEvenNumberCommand, evenState));
136- assertIterableEquals(List . of(oddNumberAddedEvent), decider. decide(). apply(addOddNumberCommand, state));
137136
138- assertEquals(new OddNumberState (1 ), oddDecider. evolve(). apply(oddState, oddNumberAddedEvent));
139- assertEquals(new EvenNumberState (2 ), evenDecider. evolve(). apply(evenState, evenNumberAddedEvent));
140- assertEquals(new NumberState (new EvenNumberState (0 ), new OddNumberState (1 )), decider. evolve(). apply(state, oddNumberAddedEvent));
141- assertEquals(new NumberState (new EvenNumberState (2 ), new OddNumberState (0 )), decider. evolve(). apply(state, evenNumberAddedEvent));
137+ givenState(oddDecider, oddState)
138+ .whenCommand(addOddNumberCommand)
139+ .thenState(new OddNumberState (1 ));
140+
141+ givenEvents(oddDecider, List . of())
142+ .whenCommand(addOddNumberCommand)
143+ .thenEvents(List . of(oddNumberAddedEvent));
144+
145+ // Even decider: given evenState + addEvenNumberCommand -> then evenNumberAddedEvent
146+ givenState(evenDecider, evenState)
147+ .whenCommand(addEvenNumberCommand)
148+ .thenState(new EvenNumberState (2 ));
149+
150+ givenEvents(evenDecider, List . of())
151+ .whenCommand(addEvenNumberCommand)
152+ .thenEvents(List . of(evenNumberAddedEvent));
153+
154+ // Combined decider: given state + odd command -> events
155+ givenEvents(decider, List . of())
156+ .whenCommand(addOddNumberCommand)
157+ .thenEvents(List . of(oddNumberAddedEvent));
158+
159+ // Combined decider: given state + odd command -> new state
160+ givenState(decider, state)
161+ .whenCommand(addOddNumberCommand)
162+ .thenState(new NumberState (new EvenNumberState (0 ), new OddNumberState (1 )));
163+
164+ // Combined decider: given state + even command -> new state
165+ givenState(decider, state)
166+ .whenCommand(addEvenNumberCommand)
167+ .thenState(new NumberState (new EvenNumberState (2 ), new OddNumberState (0 )));
142168 }
143169}
144-
145170```
146171
147172</details >
@@ -175,16 +200,20 @@ Notice that `View` implements an interface [`IView`](src/main/java/com/fraktalio
175200communicate the contract.
176201
177202<details >
178- <summary >Example / Test</summary >
203+ <summary >Example / Given-When-Then Test</summary >
204+
205+ A fluent [ test DSL/builder] ( src/test/java/com/fraktalio/fmodel/dsl/ViewDSL.java ) to support ` Given-When-Then ` format
179206
180207``` java
181208class ViewTest {
182209 @Test
183210 void viewTest () {
184211 var oddNumberAddedEvent = new OddNumberAddedEvent (1 );
185212 var evenNumberAddedEvent = new EvenNumberAddedEvent (2 );
213+
186214 var oddState = new OddNumberState (0 );
187215 var evenState = new EvenNumberState (0 );
216+
188217 var state = new NumberState (evenState, oddState);
189218
190219 View<OddNumberState , ? super OddEvent > oddView = new View<> (
@@ -206,25 +235,32 @@ class ViewTest {
206235 );
207236
208237 // Combining two views into one
209- View<Pair<EvenNumberState , OddNumberState > , ? super Event > _decider = View . combine(
238+ View<Pair<EvenNumberState , OddNumberState > , ? super Event > _view = View . combine(
210239 evenView, EvenEvent . class,
211240 oddView, OddEvent . class
212241 );
213242 // Combining two views into one, plus mapping inconvenient `Pair` into more domain specific `NumberState`
214- View<NumberState , ? super Event > decider = View
243+ View<NumberState , ? super Event > view = View
215244 .combine(evenView, EvenEvent . class, oddView, OddEvent . class)
216245 .dimapState(
217246 (ns) - > new Pair<> (ns. evenNumber(), ns. oddNumber()),
218247 (p) - > new NumberState (p. first(), p. second())
219248 );
220249
221- assertEquals(new OddNumberState (1 ), oddView. evolveView(). apply(oddState, oddNumberAddedEvent));
222- assertEquals(new EvenNumberState (2 ), evenView. evolveView(). apply(evenState, evenNumberAddedEvent));
223- assertEquals(new NumberState (new EvenNumberState (0 ), new OddNumberState (1 )), decider. evolveView(). apply(state, oddNumberAddedEvent));
224- assertEquals(new NumberState (new EvenNumberState (2 ), new OddNumberState (0 )), decider. evolveView(). apply(state, evenNumberAddedEvent));
250+ // --- DSL usage ---
251+ givenEvents(oddView, List . of(oddNumberAddedEvent))
252+ .thenState(new OddNumberState (1 ));
253+
254+ givenEvents(evenView, List . of(evenNumberAddedEvent))
255+ .thenState(new EvenNumberState (2 ));
256+
257+ givenEvents(view, List . of(oddNumberAddedEvent))
258+ .thenState(new NumberState (new EvenNumberState (0 ), new OddNumberState (1 )));
259+
260+ givenEvents(view, List . of(evenNumberAddedEvent))
261+ .thenState(new NumberState (new EvenNumberState (2 ), new OddNumberState (0 )));
225262 }
226263}
227-
228264```
229265
230266</details >
0 commit comments