diff --git a/farms-api/farms-api-rest-endpoints/src/test/java/ca/bc/gov/farms/api/rest/v1/endpoints/CropUnitConversionEndpointsTest.java b/farms-api/farms-api-rest-endpoints/src/test/java/ca/bc/gov/farms/api/rest/v1/endpoints/CropUnitConversionEndpointsTest.java new file mode 100644 index 000000000..0b2f53e0b --- /dev/null +++ b/farms-api/farms-api-rest-endpoints/src/test/java/ca/bc/gov/farms/api/rest/v1/endpoints/CropUnitConversionEndpointsTest.java @@ -0,0 +1,231 @@ +package ca.bc.gov.farms.api.rest.v1.endpoints; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.Response; + +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import ca.bc.gov.brmb.common.api.rest.code.endpoints.spring.CodeEndpointsSpringConfig; +import ca.bc.gov.farms.api.rest.v1.endpoints.impl.CropUnitConversionEndpointsImpl; +import ca.bc.gov.farms.api.rest.v1.resource.ConversionUnitRsrc; +import ca.bc.gov.farms.api.rest.v1.resource.CropUnitConversionRsrc; +import ca.bc.gov.farms.api.rest.v1.spring.EndpointsSpringConfigTest; +import ca.bc.gov.farms.api.rest.v1.spring.ResourceFactorySpringConfig; +import ca.bc.gov.farms.model.v1.ConversionUnit; +import ca.bc.gov.farms.service.api.v1.spring.ServiceApiSpringConfig; + +import org.glassfish.jersey.internal.inject.AbstractBinder; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.json.JSONArray; +import org.json.JSONObject; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class CropUnitConversionEndpointsTest extends JerseyTest { + + @Override + protected Application configure() { + HttpServletRequest mockRequest = mock(HttpServletRequest.class); + when(mockRequest.getHeader("X-Forwarded-Proto")).thenReturn("http"); + when(mockRequest.getHeader("X-Forwarded-Host")).thenReturn("localhost"); + when(mockRequest.getHeader("If-Match")).thenReturn("*"); + + // Load Spring context manually + ApplicationContext applicationContext = new AnnotationConfigApplicationContext(EndpointsSpringConfigTest.class, + ServiceApiSpringConfig.class, ResourceFactorySpringConfig.class, CodeEndpointsSpringConfig.class); + + // Create Jersey ResourceConfig and integrate Spring context + ResourceConfig config = new ResourceConfig(); + config.register(ObjectMapperContextResolver.class); + config.register(CropUnitConversionEndpointsImpl.class); + config.property("contextConfig", applicationContext); + + // Bind the mockRequest so it can be injected + config.register(new AbstractBinder() { + @Override + protected void configure() { + bind(mockRequest).to(HttpServletRequest.class); + } + }); + + return config; + } + + @Test + @Order(1) + public void testCreateCropUnitConversion() throws Exception { + CropUnitConversionRsrc cropUnitConversion = new CropUnitConversionRsrc(); + cropUnitConversion.setInventoryItemCode("5560"); + cropUnitConversion.setCropUnitCode("2"); + List conversionUnits = new ArrayList<>(); + ConversionUnit conversionUnit = new ConversionUnitRsrc(); + conversionUnit.setConversionFactor(new BigDecimal("2204.622600")); + conversionUnit.setTargetCropUnitCode("1"); + conversionUnits.add(conversionUnit); + cropUnitConversion.setConversionUnits(conversionUnits); + cropUnitConversion.setUserEmail("jsmith@gmail.com"); + + Response response = target("/cropUnitConversions").request().post(Entity.json(cropUnitConversion)); + assertEquals(201, response.getStatus()); + + String jsonString = response.readEntity(String.class); + JSONObject jsonObject = new JSONObject(jsonString); + assertEquals("CropUnitConversionRsrc", jsonObject.getString("@type")); + assertEquals(1681, jsonObject.getInt("cropUnitDefaultId")); + assertEquals("5560", jsonObject.getString("inventoryItemCode")); + assertEquals("Alfalfa Dehy", jsonObject.getString("inventoryItemDesc")); + assertEquals("2", jsonObject.getString("cropUnitCode")); + assertEquals("Tonnes", jsonObject.getString("cropUnitDesc")); + + JSONArray conversionUnitList = jsonObject.getJSONArray("conversionUnits"); + JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0); + + assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId")); + assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor")); + assertEquals("1", conversionUnitJson.getString("targetCropUnitCode")); + assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc")); + } + + @Test + @Order(2) + public void testGetAllCropUnitConversions() throws Exception { + Response response = target("/cropUnitConversions").request().get(); + assertEquals(200, response.getStatus()); + + String jsonString = response.readEntity(String.class); + JSONObject jsonObject = new JSONObject(jsonString); + + assertEquals("CropUnitConversionListRsrc", jsonObject.getString("@type")); + + JSONArray cropUnitConversionList = jsonObject.getJSONArray("cropUnitConversionList"); + JSONObject cropUnitConversion = cropUnitConversionList.getJSONObject(0); + assertEquals("CropUnitConversionRsrc", cropUnitConversion.getString("@type")); + assertEquals(1681, cropUnitConversion.getInt("cropUnitDefaultId")); + assertEquals("5560", cropUnitConversion.getString("inventoryItemCode")); + assertEquals("Alfalfa Dehy", cropUnitConversion.getString("inventoryItemDesc")); + assertEquals("2", cropUnitConversion.getString("cropUnitCode")); + assertEquals("Tonnes", cropUnitConversion.getString("cropUnitDesc")); + + JSONArray conversionUnitList = cropUnitConversion.getJSONArray("conversionUnits"); + JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0); + + assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId")); + assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor")); + assertEquals("1", conversionUnitJson.getString("targetCropUnitCode")); + assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc")); + } + + @Test + @Order(3) + public void testGetAllCropUnitConversions1() throws Exception { + Response response = target("/cropUnitConversions").queryParam("inventoryItemCode", "5560").request().get(); + assertEquals(200, response.getStatus()); + + String jsonString = response.readEntity(String.class); + JSONObject jsonObject = new JSONObject(jsonString); + + assertEquals("CropUnitConversionListRsrc", jsonObject.getString("@type")); + + JSONArray cropUnitConversionList = jsonObject.getJSONArray("cropUnitConversionList"); + JSONObject cropUnitConversion = cropUnitConversionList.getJSONObject(0); + assertEquals("CropUnitConversionRsrc", cropUnitConversion.getString("@type")); + assertEquals(1681, cropUnitConversion.getInt("cropUnitDefaultId")); + assertEquals("5560", cropUnitConversion.getString("inventoryItemCode")); + assertEquals("Alfalfa Dehy", cropUnitConversion.getString("inventoryItemDesc")); + assertEquals("2", cropUnitConversion.getString("cropUnitCode")); + assertEquals("Tonnes", cropUnitConversion.getString("cropUnitDesc")); + + JSONArray conversionUnitList = cropUnitConversion.getJSONArray("conversionUnits"); + JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0); + + assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId")); + assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor")); + assertEquals("1", conversionUnitJson.getString("targetCropUnitCode")); + assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc")); + } + + @Test + @Order(4) + public void testGetCropUnitConversion() throws Exception { + Response response = target("/cropUnitConversions/1681").request().get(); + assertEquals(200, response.getStatus()); + + String jsonString = response.readEntity(String.class); + JSONObject jsonObject = new JSONObject(jsonString); + assertEquals("CropUnitConversionRsrc", jsonObject.getString("@type")); + assertEquals(1681, jsonObject.getInt("cropUnitDefaultId")); + assertEquals("5560", jsonObject.getString("inventoryItemCode")); + assertEquals("Alfalfa Dehy", jsonObject.getString("inventoryItemDesc")); + assertEquals("2", jsonObject.getString("cropUnitCode")); + assertEquals("Tonnes", jsonObject.getString("cropUnitDesc")); + + JSONArray conversionUnitList = jsonObject.getJSONArray("conversionUnits"); + JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0); + + assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId")); + assertEquals(2204.622600, conversionUnitJson.getDouble("conversionFactor")); + assertEquals("1", conversionUnitJson.getString("targetCropUnitCode")); + assertEquals("Pounds", conversionUnitJson.getString("targetCropUnitDesc")); + } + + @Test + @Order(5) + public void testUpdateCropUnitConversion() throws Exception { + CropUnitConversionRsrc cropUnitConversion = new CropUnitConversionRsrc(); + cropUnitConversion.setCropUnitDefaultId(1681L); + cropUnitConversion.setInventoryItemCode("5560"); + cropUnitConversion.setCropUnitCode("1"); + List conversionUnits = new ArrayList<>(); + ConversionUnit conversionUnit = new ConversionUnitRsrc(); + conversionUnit.setCropUnitConversionFactorId(1981L); + conversionUnit.setConversionFactor(new BigDecimal("3204.622600")); + conversionUnit.setTargetCropUnitCode("2"); + conversionUnits.add(conversionUnit); + cropUnitConversion.setConversionUnits(conversionUnits); + cropUnitConversion.setUserEmail("jsmith@gmail.com"); + + Response response = target("/cropUnitConversions/1681").request().put(Entity.json(cropUnitConversion)); + assertEquals(200, response.getStatus()); + + String jsonString = response.readEntity(String.class); + JSONObject jsonObject = new JSONObject(jsonString); + assertEquals("CropUnitConversionRsrc", jsonObject.getString("@type")); + assertEquals(1681, jsonObject.getInt("cropUnitDefaultId")); + assertEquals("5560", jsonObject.getString("inventoryItemCode")); + assertEquals("Alfalfa Dehy", jsonObject.getString("inventoryItemDesc")); + assertEquals("1", jsonObject.getString("cropUnitCode")); + assertEquals("Pounds", jsonObject.getString("cropUnitDesc")); + + JSONArray conversionUnitList = jsonObject.getJSONArray("conversionUnits"); + JSONObject conversionUnitJson = conversionUnitList.getJSONObject(0); + + assertEquals(1981, conversionUnitJson.getInt("cropUnitConversionFactorId")); + assertEquals(3204.622600, conversionUnitJson.getDouble("conversionFactor")); + assertEquals("2", conversionUnitJson.getString("targetCropUnitCode")); + assertEquals("Tonnes", conversionUnitJson.getString("targetCropUnitDesc")); + } + + @Test + @Order(6) + public void testDeleteCropUnitConversion() throws Exception { + Response response = target("/cropUnitConversions/1681").request().delete(); + assertEquals(204, response.getStatus()); + } +} diff --git a/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/CropUnitConversionDaoImpl.java b/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/CropUnitConversionDaoImpl.java index a9395dfcb..e67344a33 100644 --- a/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/CropUnitConversionDaoImpl.java +++ b/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/CropUnitConversionDaoImpl.java @@ -87,29 +87,25 @@ public List fetchByInventoryItemCode(String inventoryItem public void insert(CropUnitConversionDto dto, String userId) throws DaoException { logger.debug(" parameters = new HashMap<>(); parameters.put("dto", dto); parameters.put("userId", userId); - int count = this.mapper.insertCropUnitDefault(parameters); - if (count == 0) { - throw new DaoException("Record not inserted: " + count); - } - cropUnitDefaultId = (Long) parameters.get("cropUnitDefaultId"); - dto.setCropUnitDefaultId(cropUnitDefaultId); + this.mapper.insertCropUnitDefault(parameters); parameters.put("inventoryItemCode", dto.getInventoryItemCode()); for (ConversionUnitDto conversionUnit : dto.getConversionUnits()) { parameters.put("dto", conversionUnit); - count = this.mapper.insertCropUnitConversionFactor(parameters); + int count = this.mapper.insertCropUnitConversionFactor(parameters); if (count == 0) { throw new DaoException("Record not inserted: " + count); } } + + List dtos = this.mapper.fetchBy(parameters); + dto.setCropUnitDefaultId(dtos.iterator().next().getCropUnitDefaultId()); } catch (RuntimeException e) { handleException(e); } diff --git a/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/FruitVegTypeDetailDaoImpl.java b/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/FruitVegTypeDetailDaoImpl.java index 17484602d..1bfad40ac 100644 --- a/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/FruitVegTypeDetailDaoImpl.java +++ b/farms-api/farms-persistence/src/main/java/ca/bc/gov/farms/persistence/v1/dao/mybatis/FruitVegTypeDetailDaoImpl.java @@ -71,13 +71,8 @@ public void insert(FruitVegTypeDetailDto dto, String userId) throws DaoException parameters.put("dto", dto); parameters.put("userId", userId); - int count = this.mapper.insertFruitVegTypeCode(parameters); - - if (count == 0) { - throw new DaoException("Record not inserted: " + count); - } - - count = this.mapper.insertFruitVegTypeDetail(parameters); + this.mapper.insertFruitVegTypeCode(parameters); + int count = this.mapper.insertFruitVegTypeDetail(parameters); if (count == 0) { throw new DaoException("Record not inserted: " + count); diff --git a/farms-api/farms-persistence/src/main/resources/ca/bc/gov/farms/persistence/v1/dao/mybatis/mapper/CropUnitConversionMapper.xml b/farms-api/farms-persistence/src/main/resources/ca/bc/gov/farms/persistence/v1/dao/mybatis/mapper/CropUnitConversionMapper.xml index d6a1a396c..c1e071ba8 100644 --- a/farms-api/farms-persistence/src/main/resources/ca/bc/gov/farms/persistence/v1/dao/mybatis/mapper/CropUnitConversionMapper.xml +++ b/farms-api/farms-persistence/src/main/resources/ca/bc/gov/farms/persistence/v1/dao/mybatis/mapper/CropUnitConversionMapper.xml @@ -43,8 +43,8 @@ from farms.farm_crop_unit_defaults cud join farms.farm_inventory_item_codes iic on cud.inventory_item_code = iic.inventory_item_code join farms.farm_crop_unit_codes cuc on cud.crop_unit_code = cuc.crop_unit_code - join farms.farm_crop_unit_conversn_fctrs cucf on cud.inventory_item_code = cucf.inventory_item_code - join farms.farm_crop_unit_codes tcuc on tcuc.crop_unit_code = cucf.target_crop_unit_code + left join farms.farm_crop_unit_conversn_fctrs cucf on cud.inventory_item_code = cucf.inventory_item_code + left join farms.farm_crop_unit_codes tcuc on tcuc.crop_unit_code = cucf.target_crop_unit_code