package com.napa.pulse.dao.impl; import com.google.gson.Gson; import com.napa.pulse.dao.interfaces.SessionDAO; import com.napa.pulse.entity.security.User; import com.napa.pulse.service.impl.SessionServiceImpl; import org.junit.Test; import org.junit.jupiter.api.BeforeEach; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedConstruction; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.jdbc.core.simple.SimpleJdbcCall; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import static org.mockito.Mockito.*; import static org.mockito.MockitoAnnotations.initMocks; /** * @author Rahul Chaudhary * 6/1/2022 */ @SpringBootTest @RunWith(MockitoJUnitRunner.class) public class SessionDAOImplUnitTest { @InjectMocks private SessionDAOImpl sessionDAOImplMock; @Mock private JdbcTemplate jdbcTemplate; @Mock private SimpleJdbcCall simpleJdbcCall; @Mock private NamedParameterJdbcTemplate namedParameterJdbcTemplate; @Mock private SessionDAO sessionDAO; @Mock private SessionServiceImpl sessionServiceImpl; @Mock private HttpServletResponse response; @Mock private User user; @Mock private PrintWriter printWriter; @Mock private DataSource dataSource; MockedConstruction mockConstruct; private Gson gson; @BeforeEach public void setup() throws Exception{ initMocks(this); when(response.getWriter()).thenReturn(printWriter); } @Test public void testRecalculateSessionTotals() { sessionDAOImplMock = mock(SessionDAOImpl.class); Map inParamMap = new HashMap<>(); inParamMap.put("SESSIONID_IN", 0); inParamMap.put("SITEID_IN", 2); sessionDAOImplMock.reCalculateSessionTotals(0, 2); verify(sessionDAOImplMock, times(1)).reCalculateSessionTotals(0, 2); } @Test(expected = Exception.class) public void testRecalculateSessionTotalsForException() { sessionDAOImplMock = mock(SessionDAOImpl.class); Map inParamMap = new HashMap<>(); inParamMap.put("SESSIONID_IN", 0); inParamMap.put("SITEID_IN", null); SqlParameterSource in = new MapSqlParameterSource(inParamMap); SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("RECALC_SESSION_TOTALS"); when(simpleJdbcCall.execute(in)).thenThrow(Exception.class); } @Test public void testGetMinMaxSessionDashboardData_SalesHistoryMinMax() throws Exception { PrintWriter pwt = mock(PrintWriter.class); when(sessionDAO.isSessionFinalized(anyInt())).thenReturn(true); when(jdbcTemplate.queryForObject(anyString(), eq(String.class))).thenReturn("DIT"); when(namedParameterJdbcTemplate.queryForList(anyString(), anyMap())).thenReturn(new ArrayList<>()); HttpServletResponse resp = mock(HttpServletResponse.class); PrintWriter writer = new PrintWriter("somefile.txt"); when(resp.getWriter()).thenReturn(writer); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "[1,2]", "[\"A\",\"B\"]", "G1", true, "true", "line", "asc", 1, 10, "", resp, user, 10, null); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "[]", "[]", "", false, "false", "salesHistory", "asc", 1, 10, "", resp, user, 10, null); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "group", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "reviewed", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "percar", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "firstStockDate", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "siteName", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "newMin", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "newMax", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "currMin", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "currMax", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "partDescription", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "recommended", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "change", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "currentInv", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "partNumber", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "topApp", "asc", 1, 10, "", resp, user, null, 20); sessionDAOImplMock.getMinMaxSessionDashboardData( 1, "", "", "G1", true, "true", "salesHistory", "desc", 1, 10, "", resp, user, null, 20); verify(resp, times(1)); } @Test public void testGetMinMaxSessionDashboardCnt_AllParameters() { Mockito.when(sessionDAO.isSessionFinalized(anyInt())).thenReturn(false); Mockito.when(jdbcTemplate.queryForObject(anyString(), eq(String.class))).thenReturn("DIT"); mockConstruct = Mockito.mockConstruction(NamedParameterJdbcTemplate.class, (mock, context) -> { when(mock.queryForObject(eq(anyString()), any(SqlParameterSource.class), Integer.class)).thenReturn(4); }); Integer result = sessionDAOImplMock.getMinMaxSessionDashboardCnt(1, "[1,2]", "[\"A\",\"B\"]", "10", true, "true", 10, 100); Integer result1 = sessionDAOImplMock.getMinMaxSessionDashboardCnt(1, null, null, null, null, "false", 10, null); Integer result2 = sessionDAOImplMock.getMinMaxSessionDashboardCnt(1, "[]", "[]", "10", false, "false", null, 100); } }