package Ġcom . tt ul ka . e commerce . warehouse . rest Ċ Ċ import Ġcom . tt ul ka . e commerce . warehouse . Amount Ċ import Ġcom . tt ul ka . e commerce . warehouse . In Stock Ċ import Ġcom . tt ul ka . e commerce . warehouse . ProductId Ċ import Ġcom . tt ul ka . e commerce . warehouse . Warehouse Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . web . servlet . Web Mvc Test Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . test . context . Context Configuration Ċ import Ġorg . springframework . test . web . servlet . MockMvc Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders . get Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . content Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . status Ċ Ċ @ Web Mvc Test Ċ @ Context Configuration ( classes Ġ= Ġ[ Warehouse Controller :: class , ĠW arehouse Controller Test . Test Config :: class ]) Ċ internal Ġclass ĠW arehouse Controller Test ( ĊĠĠĠĠĠĠĠ Ġ@ Autowired Ġval Ġmock Mvc : ĠMock Mvc , ĊĠĠĠĠĠĠĠ Ġ@ Autowired Ġval Ġwarehouse : ĠW arehouse ) Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġleft _ in _ stock () Ġ{ ĊĠĠĠĠĠĠĠ Ġwarehouse . put Into Stock ( ProductId (" test - 1 "), ĠAmount ( 1 2 3 )) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( get ("/ warehouse / stock / test - 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( content (). string (" 1 2 3 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Configuration ĊĠĠĠ Ġclass ĠTest Config Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Bean ĊĠĠĠĠĠĠĠ Ġfun Ġfake Warehouse () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠW arehouse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstock Ġ= Ġmutable Map Of < ProductId , ĠIn Stock >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġleft In Stock ( productId : ĠProduct Id ): ĠIn Stock Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstock . getOrElse ( productId ) Ġ{ ĠIn Stock ( Amount . ZERO ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġput Into Stock ( productId : ĠProduct Id , Ġamount : ĠAmount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstock [ productId ] Ġ= ĠIn Stock ( amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ