Skip to content

Commit 4980972

Browse files
Feature/as 3281 unit test endpoint for crop unit conversion (#50)
* AS-3281: Drop the check on insert when the insert is optional. * AS-3281: Implement CropUnitConversionEndpointsTest. * AS-3281: Implement CropUnitConversionEndpointsTest. * AS-3281: Implement CropUnitConversionEndpointsTest. * AS-3281: Implement CropUnitConversionEndpointsTest. * AS-3281: Implement CropUnitConversionEndpointsTest. * AS-3281: Implement CropUnitConversionEndpointsTest.
1 parent 7ff8994 commit 4980972

File tree

5 files changed

+241
-19
lines changed

5 files changed

+241
-19
lines changed
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
package ca.bc.gov.farms.api.rest.v1.endpoints;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.mockito.Mockito.mock;
5+
import static org.mockito.Mockito.when;
6+
7+
import java.math.BigDecimal;
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.ws.rs.client.Entity;
13+
import javax.ws.rs.core.Application;
14+
import javax.ws.rs.core.Response;
15+
16+
import org.junit.jupiter.api.MethodOrderer;
17+
import org.junit.jupiter.api.Order;
18+
import org.junit.jupiter.api.Test;
19+
import org.junit.jupiter.api.TestInstance;
20+
import org.junit.jupiter.api.TestMethodOrder;
21+
import org.springframework.context.ApplicationContext;
22+
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
23+
24+
import ca.bc.gov.brmb.common.api.rest.code.endpoints.spring.CodeEndpointsSpringConfig;
25+
import ca.bc.gov.farms.api.rest.v1.endpoints.impl.CropUnitConversionEndpointsImpl;
26+
import ca.bc.gov.farms.api.rest.v1.resource.ConversionUnitRsrc;
27+
import ca.bc.gov.farms.api.rest.v1.resource.CropUnitConversionRsrc;
28+
import ca.bc.gov.farms.api.rest.v1.spring.EndpointsSpringConfigTest;
29+
import ca.bc.gov.farms.api.rest.v1.spring.ResourceFactorySpringConfig;
30+
import ca.bc.gov.farms.model.v1.ConversionUnit;
31+
import ca.bc.gov.farms.service.api.v1.spring.ServiceApiSpringConfig;
32+
33+
import org.glassfish.jersey.internal.inject.AbstractBinder;
34+
import org.glassfish.jersey.server.ResourceConfig;
35+
import org.glassfish.jersey.test.JerseyTest;
36+
import org.json.JSONArray;
37+
import org.json.JSONObject;
38+
39+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
40+
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
41+
public class CropUnitConversionEndpointsTest extends JerseyTest {
42+
43+
@Override
44+
protected Application configure() {
45+
HttpServletRequest mockRequest = mock(HttpServletRequest.class);
46+
when(mockRequest.getHeader("X-Forwarded-Proto")).thenReturn("http");
47+
when(mockRequest.getHeader("X-Forwarded-Host")).thenReturn("localhost");
48+
when(mockRequest.getHeader("If-Match")).thenReturn("*");
49+
50+
// Load Spring context manually
51+
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(EndpointsSpringConfigTest.class,
52+
ServiceApiSpringConfig.class, ResourceFactorySpringConfig.class, CodeEndpointsSpringConfig.class);
53+
54+
// Create Jersey ResourceConfig and integrate Spring context
55+
ResourceConfig config = new ResourceConfig();
56+
config.register(ObjectMapperContextResolver.class);
57+
config.register(CropUnitConversionEndpointsImpl.class);
58+
config.property("contextConfig", applicationContext);
59+
60+
// Bind the mockRequest so it can be injected
61+
config.register(new AbstractBinder() {
62+
@Override
63+
protected void configure() {
64+
bind(mockRequest).to(HttpServletRequest.class);
65+
}
66+
});
67+
68+
return config;
69+
}
70+
71+
@Test
72+
@Order(1)
73+
public void testCreateCropUnitConversion() throws Exception {
74+
CropUnitConversionRsrc cropUnitConversion = new CropUnitConversionRsrc();
75+
cropUnitConversion.setInventoryItemCode("5560");
76+
cropUnitConversion.setCropUnitCode("2");
77+
List<ConversionUnit> conversionUnits = new ArrayList<>();
78+
ConversionUnit conversionUnit = new ConversionUnitRsrc();
79+
conversionUnit.setConversionFactor(new BigDecimal("2204.622600"));
80+
conversionUnit.setTargetCropUnitCode("1");
81+
conversionUnits.add(conversionUnit);
82+
cropUnitConversion.setConversionUnits(conversionUnits);
83+
cropUnitConversion.setUserEmail("jsmith@gmail.com");
84+
85+
Response response = target("/cropUnitConversions").request().post(Entity.json(cropUnitConversion));
86+
assertEquals(201, response.getStatus());
87+
88+
String jsonString = response.readEntity(String.class);
89+
JSONObject jsonObject = new JSONObject(jsonString);
90+
assertEquals("CropUnitConversionRsrc", jsonObject.getString("@type"));
91+
assertEquals(1681, jsonObject.getInt("cropUnitDefaultId"));
92+
assertEquals("5560", jsonObject.getString("inventoryItemCode"));
93+
assertEquals("Alfalfa Dehy", jsonObject.getString("inventoryItemDesc"));
94+
assertEquals("2", jsonObject.getString("cropUnitCode"));
95+
assertEquals("Tonnes", jsonObject.getString("cropUnitDesc"));
96+
97+
JSONArray conversionUnitList = jsonObject.getJSONArray("conversionUnits");
98+
JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0);
99+
100+
assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId"));
101+
assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor"));
102+
assertEquals("1", conversionUnitJson.getString("targetCropUnitCode"));
103+
assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc"));
104+
}
105+
106+
@Test
107+
@Order(2)
108+
public void testGetAllCropUnitConversions() throws Exception {
109+
Response response = target("/cropUnitConversions").request().get();
110+
assertEquals(200, response.getStatus());
111+
112+
String jsonString = response.readEntity(String.class);
113+
JSONObject jsonObject = new JSONObject(jsonString);
114+
115+
assertEquals("CropUnitConversionListRsrc", jsonObject.getString("@type"));
116+
117+
JSONArray cropUnitConversionList = jsonObject.getJSONArray("cropUnitConversionList");
118+
JSONObject cropUnitConversion = cropUnitConversionList.getJSONObject(0);
119+
assertEquals("CropUnitConversionRsrc", cropUnitConversion.getString("@type"));
120+
assertEquals(1681, cropUnitConversion.getInt("cropUnitDefaultId"));
121+
assertEquals("5560", cropUnitConversion.getString("inventoryItemCode"));
122+
assertEquals("Alfalfa Dehy", cropUnitConversion.getString("inventoryItemDesc"));
123+
assertEquals("2", cropUnitConversion.getString("cropUnitCode"));
124+
assertEquals("Tonnes", cropUnitConversion.getString("cropUnitDesc"));
125+
126+
JSONArray conversionUnitList = cropUnitConversion.getJSONArray("conversionUnits");
127+
JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0);
128+
129+
assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId"));
130+
assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor"));
131+
assertEquals("1", conversionUnitJson.getString("targetCropUnitCode"));
132+
assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc"));
133+
}
134+
135+
@Test
136+
@Order(3)
137+
public void testGetAllCropUnitConversions1() throws Exception {
138+
Response response = target("/cropUnitConversions").queryParam("inventoryItemCode", "5560").request().get();
139+
assertEquals(200, response.getStatus());
140+
141+
String jsonString = response.readEntity(String.class);
142+
JSONObject jsonObject = new JSONObject(jsonString);
143+
144+
assertEquals("CropUnitConversionListRsrc", jsonObject.getString("@type"));
145+
146+
JSONArray cropUnitConversionList = jsonObject.getJSONArray("cropUnitConversionList");
147+
JSONObject cropUnitConversion = cropUnitConversionList.getJSONObject(0);
148+
assertEquals("CropUnitConversionRsrc", cropUnitConversion.getString("@type"));
149+
assertEquals(1681, cropUnitConversion.getInt("cropUnitDefaultId"));
150+
assertEquals("5560", cropUnitConversion.getString("inventoryItemCode"));
151+
assertEquals("Alfalfa Dehy", cropUnitConversion.getString("inventoryItemDesc"));
152+
assertEquals("2", cropUnitConversion.getString("cropUnitCode"));
153+
assertEquals("Tonnes", cropUnitConversion.getString("cropUnitDesc"));
154+
155+
JSONArray conversionUnitList = cropUnitConversion.getJSONArray("conversionUnits");
156+
JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0);
157+
158+
assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId"));
159+
assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor"));
160+
assertEquals("1", conversionUnitJson.getString("targetCropUnitCode"));
161+
assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc"));
162+
}
163+
164+
@Test
165+
@Order(4)
166+
public void testGetCropUnitConversion() throws Exception {
167+
Response response = target("/cropUnitConversions/1681").request().get();
168+
assertEquals(200, response.getStatus());
169+
170+
String jsonString = response.readEntity(String.class);
171+
JSONObject jsonObject = new JSONObject(jsonString);
172+
assertEquals("CropUnitConversionRsrc", jsonObject.getString("@type"));
173+
assertEquals(1681, jsonObject.getInt("cropUnitDefaultId"));
174+
assertEquals("5560", jsonObject.getString("inventoryItemCode"));
175+
assertEquals("Alfalfa Dehy", jsonObject.getString("inventoryItemDesc"));
176+
assertEquals("2", jsonObject.getString("cropUnitCode"));
177+
assertEquals("Tonnes", jsonObject.getString("cropUnitDesc"));
178+
179+
JSONArray conversionUnitList = jsonObject.getJSONArray("conversionUnits");
180+
JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0);
181+
182+
assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId"));
183+
assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor"));
184+
assertEquals("1", conversionUnitJson.getString("targetCropUnitCode"));
185+
assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc"));
186+
}
187+
188+
@Test
189+
@Order(5)
190+
public void testUpdateCropUnitConversion() throws Exception {
191+
CropUnitConversionRsrc cropUnitConversion = new CropUnitConversionRsrc();
192+
cropUnitConversion.setCropUnitDefaultId(1681L);
193+
cropUnitConversion.setInventoryItemCode("5560");
194+
cropUnitConversion.setCropUnitCode("1");
195+
List<ConversionUnit> conversionUnits = new ArrayList<>();
196+
ConversionUnit conversionUnit = new ConversionUnitRsrc();
197+
conversionUnit.setCropUnitConversionFactorId(1981L);
198+
conversionUnit.setConversionFactor(new BigDecimal("3204.622600"));
199+
conversionUnit.setTargetCropUnitCode("2");
200+
conversionUnits.add(conversionUnit);
201+
cropUnitConversion.setConversionUnits(conversionUnits);
202+
cropUnitConversion.setUserEmail("jsmith@gmail.com");
203+
204+
Response response = target("/cropUnitConversions/1681").request().put(Entity.json(cropUnitConversion));
205+
assertEquals(200, response.getStatus());
206+
207+
String jsonString = response.readEntity(String.class);
208+
JSONObject jsonObject = new JSONObject(jsonString);
209+
assertEquals("CropUnitConversionRsrc", jsonObject.getString("@type"));
210+
assertEquals(1681, jsonObject.getInt("cropUnitDefaultId"));
211+
assertEquals("5560", jsonObject.getString("inventoryItemCode"));
212+
assertEquals("Alfalfa Dehy", jsonObject.getString("inventoryItemDesc"));
213+
assertEquals("1", jsonObject.getString("cropUnitCode"));
214+
assertEquals("Pounds", jsonObject.getString("cropUnitDesc"));
215+
216+
JSONArray conversionUnitList = jsonObject.getJSONArray("conversionUnits");
217+
JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0);
218+
219+
assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId"));
220+
assertEquals(3204.622600, conversionUnitJson.getDouble("conversionFactor"));
221+
assertEquals("2", conversionUnitJson.getString("targetCropUnitCode"));
222+
assertEquals("Tonnes", conversionUnitJson.getString("targetCropUnitDesc"));
223+
}
224+
225+
@Test
226+
@Order(6)
227+
public void testDeleteCropUnitConversion() throws Exception {
228+
Response response = target("/cropUnitConversions/1681").request().delete();
229+
assertEquals(204, response.getStatus());
230+
}
231+
}

farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/CropUnitConversionDaoImpl.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,29 +87,25 @@ public List<CropUnitConversionDto> fetchByInventoryItemCode(String inventoryItem
8787
public void insert(CropUnitConversionDto dto, String userId) throws DaoException {
8888
logger.debug("<insert");
8989

90-
Long cropUnitDefaultId = null;
91-
9290
try {
9391
Map<String, Object> parameters = new HashMap<>();
9492

9593
parameters.put("dto", dto);
9694
parameters.put("userId", userId);
97-
int count = this.mapper.insertCropUnitDefault(parameters);
98-
if (count == 0) {
99-
throw new DaoException("Record not inserted: " + count);
100-
}
10195

102-
cropUnitDefaultId = (Long) parameters.get("cropUnitDefaultId");
103-
dto.setCropUnitDefaultId(cropUnitDefaultId);
96+
this.mapper.insertCropUnitDefault(parameters);
10497

10598
parameters.put("inventoryItemCode", dto.getInventoryItemCode());
10699
for (ConversionUnitDto conversionUnit : dto.getConversionUnits()) {
107100
parameters.put("dto", conversionUnit);
108-
count = this.mapper.insertCropUnitConversionFactor(parameters);
101+
int count = this.mapper.insertCropUnitConversionFactor(parameters);
109102
if (count == 0) {
110103
throw new DaoException("Record not inserted: " + count);
111104
}
112105
}
106+
107+
List<CropUnitConversionDto> dtos = this.mapper.fetchBy(parameters);
108+
dto.setCropUnitDefaultId(dtos.iterator().next().getCropUnitDefaultId());
113109
} catch (RuntimeException e) {
114110
handleException(e);
115111
}

farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/FruitVegTypeDetailDaoImpl.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,8 @@ public void insert(FruitVegTypeDetailDto dto, String userId) throws DaoException
7171

7272
parameters.put("dto", dto);
7373
parameters.put("userId", userId);
74-
int count = this.mapper.insertFruitVegTypeCode(parameters);
75-
76-
if (count == 0) {
77-
throw new DaoException("Record not inserted: " + count);
78-
}
79-
80-
count = this.mapper.insertFruitVegTypeDetail(parameters);
74+
this.mapper.insertFruitVegTypeCode(parameters);
75+
int count = this.mapper.insertFruitVegTypeDetail(parameters);
8176

8277
if (count == 0) {
8378
throw new DaoException("Record not inserted: " + count);

farms-api/farms-persistence/src/main/resources/ca/bc/gov/farms/persistence/v1/dao/mybatis/mapper/CropUnitConversionMapper.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
from farms.farm_crop_unit_defaults cud
4444
join farms.farm_inventory_item_codes iic on cud.inventory_item_code = iic.inventory_item_code
4545
join farms.farm_crop_unit_codes cuc on cud.crop_unit_code = cuc.crop_unit_code
46-
join farms.farm_crop_unit_conversn_fctrs cucf on cud.inventory_item_code = cucf.inventory_item_code
47-
join farms.farm_crop_unit_codes tcuc on tcuc.crop_unit_code = cucf.target_crop_unit_code
46+
left join farms.farm_crop_unit_conversn_fctrs cucf on cud.inventory_item_code = cucf.inventory_item_code
47+
left join farms.farm_crop_unit_codes tcuc on tcuc.crop_unit_code = cucf.target_crop_unit_code
4848
</sql>
4949

5050
<select id="fetch" resultMap="CropUnitConversionDtoMap">

farms-api/farms-persistence/src/test/resources/farms/tables/data.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ insert into farms.farm_crop_unit_defaults (
337337
who_updated,
338338
when_updated
339339
) values (
340-
nextval('farms.farm_fmv_seq'),
340+
nextval('farms.farm_cud_seq'),
341341
'5560',
342342
'2',
343343
1,

0 commit comments

Comments
 (0)