66import java .util .ArrayList ;
77import java .util .List ;
88import java .util .Map ;
9+ import java .util .Optional ;
910
1011import javax .annotation .Resource ;
1112
12- import org .junit .jupiter .api .BeforeEach ;
1313import org .junit .jupiter .api .DisplayName ;
1414import org .junit .jupiter .api .Test ;
1515import org .mockito .InjectMocks ;
1616import org .mockito .Mock ;
1717import org .mockito .Mockito ;
18- import org .mockito .MockitoAnnotations ;
1918
2019import net .laffyco .javamatchingengine .engine .Order ;
2120import net .laffyco .javamatchingengine .engine .OrderBook ;
2221import net .laffyco .javamatchingengine .engine .Side ;
2322import net .laffyco .javamatchingengine .engine .Trade ;
23+ import test .utils .AbstractTest ;
2424
2525/**
2626 * Tests for the OrderController class.
2727 *
2828 * @author Laffini
2929 *
3030 */
31- public class OrderControllerTests {
31+ public class OrderControllerTests extends AbstractTest {
3232
3333 /**
3434 * Mock order book.
@@ -44,12 +44,27 @@ public class OrderControllerTests {
4444 private OrderController controller ;
4545
4646 /**
47- * Setup .
47+ * Test data id .
4848 */
49- @ BeforeEach
50- public void setUp () {
51- // Initialise mocks created above
52- MockitoAnnotations .openMocks (this );
49+ private final String id = "id" ;
50+
51+ /**
52+ * Test data side.
53+ */
54+ private final Side side = Side .BUY ;
55+
56+ /** Create a mock order to return. */
57+ private final Order mockOrder = Mockito .mock (Order .class );
58+
59+ /**
60+ * Test data amount.
61+ */
62+ private final double amt = 25.0 ;
63+
64+ @ Override
65+ public final void init () {
66+ Mockito .when (this .orderBook .findOrder (this .id , this .side ))
67+ .thenReturn (this .mockOrder );
5368 }
5469
5570 /**
@@ -73,13 +88,10 @@ public void getOrders() {
7388 @ Test
7489 @ DisplayName ("Get an order by ID" )
7590 public void getOrderById () {
76- final Order found = Mockito .mock (Order .class );
77- final String id = "testId" ;
78- final Side side = Side .BUY ;
79- Mockito .when (this .orderBook .findOrder (id , side )).thenReturn (found );
80- final Map <String , Order > result = this .controller .getOrder (id , side );
91+ final Map <String , Order > result = this .controller .getOrder (this .id ,
92+ this .side );
8193 assertTrue (result .containsKey ("order" ));
82- assertEquals (result .get ("order" ), found );
94+ assertEquals (result .get ("order" ), this . mockOrder );
8395 }
8496
8597 /**
@@ -88,17 +100,15 @@ public void getOrderById() {
88100 @ Test
89101 @ DisplayName ("Add an order" )
90102 public void addOrder () {
91- final Side side = Side .BUY ;
92- final double amt = 10 ;
93103 final double price = 25 ;
94104
95105 final List <Trade > trades = new ArrayList <Trade >();
96106 Mockito .when (this .orderBook .process (Mockito .any ())).thenReturn (trades );
97107
98- final Map <String , Object > result = this .controller .addOrder (side , amt ,
99- price );
108+ final Map <String , Object > result = this .controller .addOrder (this . side ,
109+ this . amt , price );
100110
101- assertTrue (result .containsKey ("id" ));
111+ assertTrue (result .containsKey (this . id ));
102112 assertTrue (result .containsKey ("trades" ));
103113 assertEquals (result .get ("trades" ), trades );
104114 }
@@ -109,17 +119,53 @@ public void addOrder() {
109119 @ Test
110120 @ DisplayName ("Delete an order" )
111121 public void deleteOrder () {
112- final String id = "id" ;
113- final Side side = Side .BUY ;
114122
115- Mockito .when (this .orderBook .cancelOrder (id , side )).thenReturn (true );
123+ Mockito .when (this .orderBook .cancelOrder (this .id , this .side ))
124+ .thenReturn (true );
116125
117- final Map <String , Object > result = this .controller .deleteOrder (id ,
118- side );
126+ final Map <String , Object > result = this .controller .deleteOrder (this . id ,
127+ this . side );
119128
120129 assertTrue ((boolean ) result .get ("order_deleted" ));
121130
122- Mockito .verify (this .orderBook ).cancelOrder (id , side );
131+ Mockito .verify (this .orderBook ).cancelOrder (this . id , this . side );
123132 }
124133
134+ /**
135+ * Update an order.
136+ */
137+ @ Test
138+ @ DisplayName ("Update an order" )
139+ public void updateOrder () {
140+ final double price = 35.0 ;
141+ final Side newSide = Side .SELL ;
142+
143+ final Map <String , Object > result = this .controller .updateOrder (this .id ,
144+ this .side , Optional .of (this .amt ), Optional .of (price ),
145+ Optional .of (newSide ));
146+
147+ assertTrue ((boolean ) result .get ("updated" ));
148+ Mockito .verify (this .mockOrder ).setAmount (this .amt );
149+ Mockito .verify (this .mockOrder ).setPrice (price );
150+ Mockito .verify (this .mockOrder ).setSide (newSide );
151+ }
152+
153+ /**
154+ * Update an order with one parameter.
155+ */
156+ @ Test
157+ @ DisplayName ("Update an order with one parameter" )
158+ public void updateOrder1Param () {
159+
160+ final Map <String , Object > result = this .controller .updateOrder (this .id ,
161+ this .side , Optional .of (this .amt ), Optional .empty (),
162+ Optional .empty ());
163+
164+ assertTrue ((boolean ) result .get ("updated" ));
165+ Mockito .verify (this .mockOrder ).setAmount (this .amt );
166+ Mockito .verify (this .mockOrder , Mockito .times (0 ))
167+ .setPrice (Mockito .anyDouble ());
168+ Mockito .verify (this .mockOrder , Mockito .times (0 ))
169+ .setSide (Mockito .any (Side .class ));
170+ }
125171}
0 commit comments