/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.seasar.extension.jdbc.it.auto;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.junit.runner.RunWith;
import org.seasar.extension.jdbc.JdbcManager;
import org.seasar.extension.jdbc.annotation.InOut;
import org.seasar.extension.jdbc.annotation.Out;
import org.seasar.extension.jdbc.annotation.ResultSet;
import org.seasar.extension.jdbc.it.entity.Department;
import org.seasar.extension.jdbc.it.entity.Employee;
import org.seasar.framework.unit.Seasar2;
import org.seasar.framework.unit.annotation.Prerequisite;
import static junit.framework.Assert.*;
import static org.seasar.extension.jdbc.parameter.Parameter.*;
/**
* @author taedium
*
*/
@RunWith(Seasar2.class)
@Prerequisite("#ENV not in {'hsqldb', 'h2', 'standard'}")
public class AutoProcedureCallTest {
private JdbcManager jdbcManager;
/**
*
* @throws Exception
*/
public void testParameter_none() throws Exception {
jdbcManager.call("PROC_NONE_PARAM").execute();
}
/**
*
* @throws Exception
*/
public void testParameter_simpleType() throws Exception {
jdbcManager.call("PROC_SIMPLETYPE_PARAM", 1).execute();
}
/**
*
* @throws Exception
*/
public void testParameter_simpleType_time() throws Exception {
Date date = new Date();
jdbcManager.call("PROC_SIMPLETYPE_TIME_PARAM", time(date)).execute();
}
/**
*
* @throws Exception
*/
public void testParameter_dto() throws Exception {
MyDto dto = new MyDto();
dto.param1 = 3;
dto.param2 = 5;
jdbcManager.call("PROC_DTO_PARAM", dto).execute();
assertEquals(new Integer(3), dto.param1);
assertEquals(new Integer(8), dto.param2);
assertEquals(new Integer(3), dto.param3);
}
/**
*
* @throws Exception
*/
public void testParameter_dto_null() throws Exception {
MyDto dto = new MyDto();
dto.param1 = null;
dto.param2 = 5;
jdbcManager.call("PROC_DTO_PARAM", dto).execute();
assertNull(dto.param1);
assertNull(dto.param2);
assertNull(dto.param3);
}
/**
*
* @throws Exception
*/
public void testParameter_dto_time() throws Exception {
Date date = new SimpleDateFormat("HH:mm:ss").parse("12:11:10");
MyDto2 dto = new MyDto2();
dto.param1 = date;
dto.param2 = date;
jdbcManager.call("PROC_DTO_TIME_PARAM", dto).execute();
assertEquals(date.getTime(), dto.param1.getTime());
assertEquals(date.getTime(), dto.param2.getTime());
assertEquals(date.getTime(), dto.param3.getTimeInMillis());
}
/**
*
* @throws Exception
*/
public void testParameter_resultSet() throws Exception {
ResultSetDto dto = new ResultSetDto();
dto.employeeId = 10;
jdbcManager.call("PROC_RESULTSET", dto).execute();
List<Employee> employees = dto.employees;
assertNotNull(employees);
assertEquals(4, employees.size());
assertEquals(7876, employees.get(0).employeeNo);
assertEquals("ADAMS", employees.get(0).employeeName);
assertEquals(7900, employees.get(1).employeeNo);
assertEquals("JAMES", employees.get(1).employeeName);
assertEquals(7902, employees.get(2).employeeNo);
assertEquals("FORD", employees.get(2).employeeName);
assertEquals(7934, employees.get(3).employeeNo);
assertEquals("MILLER", employees.get(3).employeeName);
}
/**
*
* @throws Exception
*/
public void testParameter_resultSetOut() throws Exception {
ResultSetOutDto dto = new ResultSetOutDto();
dto.employeeId = 10;
jdbcManager.call("PROC_RESULTSET_OUT", dto).execute();
List<Employee> employees = dto.employees;
assertNotNull(employees);
assertEquals(4, employees.size());
assertEquals("ADAMS", employees.get(0).employeeName);
assertEquals("JAMES", employees.get(1).employeeName);
assertEquals("FORD", employees.get(2).employeeName);
assertEquals("MILLER", employees.get(3).employeeName);
assertEquals(14, dto.employeeCount);
}
/**
*
* @throws Exception
*/
public void testParameter_resultSetUpdate() throws Exception {
ResultSetUpdateDto dto = new ResultSetUpdateDto();
dto.employeeId = 10;
jdbcManager.call("PROC_RESULTSET_UPDATE", dto).execute();
List<Employee> employees = dto.employees;
assertNotNull(employees);
assertEquals(4, employees.size());
assertEquals("ADAMS", employees.get(0).employeeName);
assertEquals("JAMES", employees.get(1).employeeName);
assertEquals("FORD", employees.get(2).employeeName);
assertEquals("MILLER", employees.get(3).employeeName);
String departmentName =
jdbcManager
.selectBySql(
String.class,
"select DEPARTMENT_NAME from DEPARTMENT where DEPARTMENT_ID = ?",
1)
.getSingleResult();
assertEquals("HOGE", departmentName);
}
/**
*
* @throws Exception
*/
public void testParameter_resultSetUpdate2() throws Exception {
ResultSetUpdateDto dto = new ResultSetUpdateDto();
dto.employeeId = 10;
jdbcManager.call("PROC_RESULTSET_UPDATE2", dto).execute();
List<Employee> employees = dto.employees;
assertNotNull(employees);
assertEquals(4, employees.size());
assertEquals("ADAMS", employees.get(0).employeeName);
assertEquals("JAMES", employees.get(1).employeeName);
assertEquals("FORD", employees.get(2).employeeName);
assertEquals("MILLER", employees.get(3).employeeName);
String departmentName =
jdbcManager
.selectBySql(
String.class,
"select DEPARTMENT_NAME from DEPARTMENT where DEPARTMENT_ID = ?",
1)
.getSingleResult();
assertEquals("HOGE", departmentName);
}
/**
*
* @throws Exception
*/
public void testParameter_resultSets() throws Exception {
ResultSetsDto dto = new ResultSetsDto();
dto.employeeId = 10;
dto.departmentId = 2;
jdbcManager.call("PROC_RESULTSETS", dto).execute();
List<Employee> employees = dto.employees;
assertNotNull(employees);
assertEquals(4, employees.size());
assertEquals("ADAMS", employees.get(0).employeeName);
assertEquals("JAMES", employees.get(1).employeeName);
assertEquals("FORD", employees.get(2).employeeName);
assertEquals("MILLER", employees.get(3).employeeName);
List<Department> departments = dto.departments;
assertNotNull(departments);
assertEquals(2, departments.size());
assertEquals("SALES", departments.get(0).departmentName);
assertEquals("OPERATIONS", departments.get(1).departmentName);
}
/**
*
* @throws Exception
*/
public void testParameter_resultSetsUpdatesOut() throws Exception {
ResultSetsUpdatesOutDto dto = new ResultSetsUpdatesOutDto();
dto.employeeId = 10;
dto.departmentId = 2;
jdbcManager.call("PROC_RESULTSETS_UPDATES_OUT", dto).execute();
List<Employee> employees = dto.employees;
assertNotNull(employees);
assertEquals(4, employees.size());
assertEquals("ADAMS", employees.get(0).employeeName);
assertEquals("JAMES", employees.get(1).employeeName);
assertEquals("FORD", employees.get(2).employeeName);
assertEquals("MILLER", employees.get(3).employeeName);
List<Department> departments = dto.departments;
assertNotNull(departments);
assertEquals(2, departments.size());
assertEquals("SALES", departments.get(0).departmentName);
assertEquals("OPERATIONS", departments.get(1).departmentName);
String street =
jdbcManager.selectBySql(
String.class,
"select STREET from ADDRESS where ADDRESS_ID = ?",
1).getSingleResult();
assertEquals("HOGE", street);
street =
jdbcManager.selectBySql(
String.class,
"select STREET from ADDRESS where ADDRESS_ID = ?",
2).getSingleResult();
assertEquals("FOO", street);
assertEquals(14, dto.employeeCount);
}
/**
*
* @author taedium
*
*/
public static class MyDto {
/** */
public Integer param1;
/** */
@InOut
public Integer param2;
/** */
@Out
public Integer param3;
}
/**
*
* @author taedium
*
*/
public static class MyDto2 {
/** */
@Temporal(TemporalType.TIME)
public Date param1;
/** */
@InOut
@Temporal(TemporalType.TIME)
public Date param2;
/** */
@Out
@Temporal(TemporalType.TIME)
public Calendar param3;
}
/**
*
* @author taedium
*
*/
public static class ResultSetDto {
/** */
@ResultSet
public List<Employee> employees;
/** */
public int employeeId;
}
/**
*
* @author taedium
*
*/
public static class ResultSetOutDto {
/** */
@ResultSet
public List<Employee> employees;
/** */
public int employeeId;
/** */
@Out
public int employeeCount;
}
/**
*
* @author taedium
*
*/
public static class ResultSetUpdateDto {
/** */
@ResultSet
public List<Employee> employees;
/** */
public int employeeId;
}
/**
*
* @author taedium
*
*/
public static class ResultSetsDto {
/** */
@ResultSet
public List<Employee> employees;
/** */
@ResultSet
public List<Department> departments;
/** */
public int employeeId;
/** */
public int departmentId;
}
/**
*
* @author taedium
*
*/
public static class ResultSetsUpdatesOutDto {
/** */
@ResultSet
public List<Employee> employees;
/** */
@ResultSet
public List<Department> departments;
/** */
public int employeeId;
/** */
public int departmentId;
/** */
@Out
public int employeeCount;
}
}