package com.napa.pulse.dao.impl; import com.napa.pulse.dao.interfaces.SessionDAO; import com.napa.pulse.dto.SKUTableWidgetData; import com.napa.pulse.entity.security.User; import com.napa.pulse.service.interfaces.CommonService; import com.napa.pulse.utils.SiteQueueMap; import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.InvalidResultSetAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.simple.SimpleJdbcCall; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; import org.springframework.test.util.ReflectionTestUtils; import java.math.BigDecimal; import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; import java.util.*; import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; /** * @author Rahul Chaudhary * 6/1/2022 */ @SpringBootTest @RunWith(MockitoJUnitRunner.class) public class ReviewDAOImplUnitTest { @InjectMocks ReviewDAOImpl mockReviewDAO; @InjectMocks SessionDAOImpl mockSessionDAO; @Mock CommonService commonService; @Mock JdbcTemplate jdbcTemplate; @Mock SimpleJdbcCall simpleJdbcCall; @Mock SiteQueueMap siteQueueMap; @Mock SessionDAO sessionDAO; @Before public void setUp() { initMocks(this); jdbcTemplate = mock(JdbcTemplate.class); } @Before public void setUpp() { initMocks(this); simpleJdbcCall = mock(SimpleJdbcCall.class); } @Test public void test_getStockedNonStockedData(){ mockReviewDAO = new ReviewDAOImpl(); int sessionId = 277562; String count= "1"; ReflectionTestUtils.setField(mockReviewDAO, "jdbcTemplate", jdbcTemplate); when(jdbcTemplate.queryForObject(anyString(), eq(String.class) ,anyInt())).thenReturn(count); String result= mockReviewDAO.getStockedNonStockedData(sessionId); assertNotNull(result); assertThat(result).isEqualTo(count); } @Test public void testGetSkuTableData_whenGivenDCLastSales() { mockReviewDAO = new ReviewDAOImpl(); Map resultMap = new HashMap<>(); resultMap.put("a", "sku1"); resultMap.put("b", "sku2"); List> skuTableData = new ArrayList<>(); skuTableData.add(resultMap); ReflectionTestUtils.setField(mockReviewDAO, "jdbcTemplate", jdbcTemplate); when(jdbcTemplate.queryForList(anyString(), anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(skuTableData); List> result = mockReviewDAO.getSKUTableData(buildSKUTableWidgetData(), buildUser()); assertEquals(1, result.size()); assertNotNull(result); } @Test public void getSKUTableDataTestFSD() throws Exception{ Map resultMap = new HashMap<>(); resultMap.put("a", "sku1"); resultMap.put("b", "sku2"); List> skuTableData = new ArrayList<>(); skuTableData.add(resultMap); ReflectionTestUtils.setField(mockReviewDAO, "jdbcTemplate", jdbcTemplate); when(jdbcTemplate.queryForList(anyString() ,anyInt(),anyInt(),anyInt(),anyInt())).thenReturn(skuTableData); List> result =mockReviewDAO.getSKUTableData(buildSKUTableFSDWidgetData(),buildUser()); Assertions.assertEquals(skuTableData,result); } @Test public void reviewBulkEditTestFSD() throws Exception{ Map resultMap = new HashMap<>(); resultMap.put("a", "sku1"); resultMap.put("b", "sku2"); Map inParam = new HashMap<>(); inParam.put("SESSIONID_IN",277732); inParam.put("SITEID_IN",1); List> skuTableData = new ArrayList<>(); skuTableData.add(resultMap); ReflectionTestUtils.setField(mockReviewDAO, "jdbcTemplate", jdbcTemplate); //ReflectionTestUtils.setField(mockSessionDAO,"SimpleJdbcCall", simpleJdbcCall); when(jdbcTemplate.queryForRowSet(anyString() ,anyInt())).thenReturn(rs); Boolean result =mockReviewDAO.reviewBulkEdit(buildSKUTableFSDWidgetData()); Assertions.assertEquals(true,result); } @Test public void getSKUTableDataTestDC() throws Exception{ Map resultMap = new HashMap<>(); resultMap.put("a", "sku1"); resultMap.put("b", "sku2"); List> skuTableData = new ArrayList<>(); skuTableData.add(resultMap); Integer count=1; ReflectionTestUtils.setField(mockReviewDAO, "jdbcTemplate", jdbcTemplate); when(jdbcTemplate.queryForObject(anyString(), eq(Integer.class) ,anyInt())).thenReturn(count); when(jdbcTemplate.queryForList(anyString() ,anyInt(),anyInt(),anyInt(),anyInt())).thenReturn(skuTableData); List> result =mockReviewDAO.getSKUTableData(buildSKUTableFSDWidgetData(),buildUser()); Assertions.assertEquals(skuTableData,result); } private SKUTableWidgetData buildSKUTableWidgetData() { SKUTableWidgetData skuTableWidgetData = new SKUTableWidgetData(); skuTableWidgetData.setSortingOrder("asc"); skuTableWidgetData.setSessionId(277562); skuTableWidgetData.setPageNumber(1); skuTableWidgetData.setNumberOfRecordsPerPage(5); skuTableWidgetData.setDcSalesMonth(12); skuTableWidgetData.setDcSalesMax(5); skuTableWidgetData.setDcSalesMin(4); skuTableWidgetData.setSortBy("sku"); return skuTableWidgetData; } private SKUTableWidgetData buildSKUTableFSDWidgetData() { SKUTableWidgetData skuTableWidgetData = new SKUTableWidgetData(); skuTableWidgetData.setSortingOrder("asc"); skuTableWidgetData.setSessionId(277562); skuTableWidgetData.setPageNumber(1); skuTableWidgetData.setNumberOfRecordsPerPage(5); skuTableWidgetData.setFirstStockFromDt("28-AUG-2019"); skuTableWidgetData.setFirstStockFromDt("20-AUG-2022"); skuTableWidgetData.setSortBy("sku"); skuTableWidgetData.setUser(buildUser()); skuTableWidgetData.setOrderOption("recommended"); skuTableWidgetData.setAction("orderAll"); skuTableWidgetData.setReturn(true); skuTableWidgetData.setOrder(true); return skuTableWidgetData; } private User buildUser() { User testUser = new User(); testUser.setUserId(1); testUser.setFirstName("Test"); testUser.setLastName("user"); testUser.setLogin("login"); testUser.setRoleId(1); testUser.setAccessItemIds(Arrays.asList(1, 2, 3)); testUser.setLanguage("EN"); testUser.setBusinessUnit(1); testUser.setDeactivated("N"); testUser.setSiteTypes(Arrays.asList("dc", "sku", "ab")); return testUser; } SqlRowSet rs=new SqlRowSet() { @Override public SqlRowSetMetaData getMetaData() { return null; } @Override public int findColumn(String columnLabel) throws InvalidResultSetAccessException { return 0; } @Override public BigDecimal getBigDecimal(int columnIndex) throws InvalidResultSetAccessException { return null; } @Override public BigDecimal getBigDecimal(String columnLabel) throws InvalidResultSetAccessException { return null; } @Override public boolean getBoolean(int columnIndex) throws InvalidResultSetAccessException { return false; } @Override public boolean getBoolean(String columnLabel) throws InvalidResultSetAccessException { return false; } @Override public byte getByte(int columnIndex) throws InvalidResultSetAccessException { return 0; } @Override public byte getByte(String columnLabel) throws InvalidResultSetAccessException { return 0; } @Override public Date getDate(int columnIndex) throws InvalidResultSetAccessException { return null; } @Override public Date getDate(String columnLabel) throws InvalidResultSetAccessException { return null; } @Override public Date getDate(int columnIndex, Calendar cal) throws InvalidResultSetAccessException { return null; } @Override public Date getDate(String columnLabel, Calendar cal) throws InvalidResultSetAccessException { return null; } @Override public double getDouble(int columnIndex) throws InvalidResultSetAccessException { return 0; } @Override public double getDouble(String columnLabel) throws InvalidResultSetAccessException { return 0; } @Override public float getFloat(int columnIndex) throws InvalidResultSetAccessException { return 0; } @Override public float getFloat(String columnLabel) throws InvalidResultSetAccessException { return 0; } @Override public int getInt(int columnIndex) throws InvalidResultSetAccessException { return 0; } @Override public int getInt(String columnLabel) throws InvalidResultSetAccessException { return 1; } @Override public long getLong(int columnIndex) throws InvalidResultSetAccessException { return 0; } @Override public long getLong(String columnLabel) throws InvalidResultSetAccessException { return 0; } @Override public String getNString(int columnIndex) throws InvalidResultSetAccessException { return null; } @Override public String getNString(String columnLabel) throws InvalidResultSetAccessException { return null; } @Override public Object getObject(int columnIndex) throws InvalidResultSetAccessException { return null; } @Override public Object getObject(String columnLabel) throws InvalidResultSetAccessException { return null; } @Override public Object getObject(int columnIndex, Map> map) throws InvalidResultSetAccessException { return null; } @Override public Object getObject(String columnLabel, Map> map) throws InvalidResultSetAccessException { return null; } @Override public T getObject(int columnIndex, Class type) throws InvalidResultSetAccessException { return null; } @Override public T getObject(String columnLabel, Class type) throws InvalidResultSetAccessException { return null; } @Override public short getShort(int columnIndex) throws InvalidResultSetAccessException { return 0; } @Override public short getShort(String columnLabel) throws InvalidResultSetAccessException { return 0; } @Override public String getString(int columnIndex) throws InvalidResultSetAccessException { return null; } @Override public String getString(String columnLabel) throws InvalidResultSetAccessException { return null; } @Override public Time getTime(int columnIndex) throws InvalidResultSetAccessException { return null; } @Override public Time getTime(String columnLabel) throws InvalidResultSetAccessException { return null; } @Override public Time getTime(int columnIndex, Calendar cal) throws InvalidResultSetAccessException { return null; } @Override public Time getTime(String columnLabel, Calendar cal) throws InvalidResultSetAccessException { return null; } @Override public Timestamp getTimestamp(int columnIndex) throws InvalidResultSetAccessException { return null; } @Override public Timestamp getTimestamp(String columnLabel) throws InvalidResultSetAccessException { return null; } @Override public Timestamp getTimestamp(int columnIndex, Calendar cal) throws InvalidResultSetAccessException { return null; } @Override public Timestamp getTimestamp(String columnLabel, Calendar cal) throws InvalidResultSetAccessException { return null; } @Override public boolean absolute(int row) throws InvalidResultSetAccessException { return false; } @Override public void afterLast() throws InvalidResultSetAccessException { } @Override public void beforeFirst() throws InvalidResultSetAccessException { } @Override public boolean first() throws InvalidResultSetAccessException { return false; } @Override public int getRow() throws InvalidResultSetAccessException { return 0; } @Override public boolean isAfterLast() throws InvalidResultSetAccessException { return false; } @Override public boolean isBeforeFirst() throws InvalidResultSetAccessException { return false; } @Override public boolean isFirst() throws InvalidResultSetAccessException { return false; } @Override public boolean isLast() throws InvalidResultSetAccessException { return false; } @Override public boolean last() throws InvalidResultSetAccessException { return false; } @Override public boolean next() throws InvalidResultSetAccessException { return false; } @Override public boolean previous() throws InvalidResultSetAccessException { return false; } @Override public boolean relative(int rows) throws InvalidResultSetAccessException { return false; } @Override public boolean wasNull() throws InvalidResultSetAccessException { return false; } }; }