Skip to content

Commit

Permalink
Merge pull request #982 from hazendaz/tests
Browse files Browse the repository at this point in the history
Cleanup tests
  • Loading branch information
hazendaz authored Aug 11, 2024
2 parents dd4cb0b + 8639ceb commit d308c57
Show file tree
Hide file tree
Showing 68 changed files with 494 additions and 520 deletions.
10 changes: 5 additions & 5 deletions src/test/java/org/mybatis/spring/AbstractMyBatisSpringTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2022 the original author or authors.
* Copyright 2010-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -50,7 +50,7 @@ public abstract class AbstractMyBatisSpringTest {
@BeforeAll
public static void setupBase() throws Exception {
// create an SqlSessionFactory that will use SpringManagedTransactions
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
var factoryBean = new SqlSessionFactoryBean();
factoryBean.setMapperLocations(new ClassPathResource("org/mybatis/spring/TestMapper.xml"));
// note running without SqlSessionFactoryBean.configLocation set => default configuration
factoryBean.setDataSource(dataSource);
Expand Down Expand Up @@ -111,7 +111,7 @@ protected void assertExecuteCount(int count) {

protected void assertConnectionClosed(MockConnection connection) {
try {
if ((connection != null) && !connection.isClosed()) {
if (connection != null && !connection.isClosed()) {
fail("Connection is not closed");
}
} catch (SQLException sqle) {
Expand All @@ -121,10 +121,10 @@ protected void assertConnectionClosed(MockConnection connection) {

protected MockConnection createMockConnection() {
// this query must be the same as the query in TestMapper.xml
MockResultSet rs = new MockResultSet("SELECT 1");
var rs = new MockResultSet("SELECT 1");
rs.addRow(new Object[] { 1 });

MockConnection con = new MockConnection();
var con = new MockConnection();
con.getPreparedStatementResultSetHandler().prepareResultSet("SELECT 1", rs);

return con;
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/org/mybatis/spring/ExecutorInterceptor.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2022 the original author or authors.
* Copyright 2010-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2023 the original author or authors.
* Copyright 2010-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -15,8 +15,10 @@
*/
package org.mybatis.spring;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.times;

import com.mockrunner.mock.jdbc.MockDataSource;

Expand All @@ -25,60 +27,58 @@
import org.apache.ibatis.exceptions.PersistenceException;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.UncategorizedSQLException;
import org.springframework.jdbc.support.SQLExceptionTranslator;

class MyBatisExceptionTranslatorTest {

@Test
void shouldNonPersistenceExceptionBeTranslatedToNull() {
MockDataSource mockDataSource = new MockDataSource();
MyBatisExceptionTranslator translator = new MyBatisExceptionTranslator(mockDataSource, false);
DataAccessException e = translator.translateExceptionIfPossible(new RuntimeException());
var mockDataSource = new MockDataSource();
var translator = new MyBatisExceptionTranslator(mockDataSource, false);
var e = translator.translateExceptionIfPossible(new RuntimeException());
assertNull(e);
}

@Test
void shouldSqlExceptionBeTranslatedToUncategorizedSqlException() {
String msg = "Error!";
SQLException sqlException = new SQLException(msg);
SQLExceptionTranslator sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
MyBatisExceptionTranslator translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
DataAccessException e = translator.translateExceptionIfPossible(new PersistenceException(sqlException));
var msg = "Error!";
var sqlException = new SQLException(msg);
var sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
var translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
var e = translator.translateExceptionIfPossible(new PersistenceException(sqlException));
assertTrue(e instanceof UncategorizedSQLException);
Mockito.verify(sqlExceptionTranslator, times(1)).translate(SQLException.class.getName() + ": " + msg + "\n", null,
sqlException);
}

@Test
void shouldPersistenceExceptionBeTranslatedToMyBatisSystemException() {
String msg = "Error!";
SQLExceptionTranslator sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
MyBatisExceptionTranslator translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
DataAccessException e = translator.translateExceptionIfPossible(new PersistenceException(msg));
var msg = "Error!";
var sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
var translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
var e = translator.translateExceptionIfPossible(new PersistenceException(msg));
assertTrue(e instanceof MyBatisSystemException);
assertEquals(msg, e.getMessage());
}

@Test
void shouldNestedPersistenceExceptionReportsMsgOfParentException() {
String msg = "Error!";
SQLExceptionTranslator sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
MyBatisExceptionTranslator translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
DataAccessException e = translator
var msg = "Error!";
var sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
var translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
var e = translator
.translateExceptionIfPossible(new PersistenceException(msg, new PersistenceException("Inner error!")));
assertTrue(e instanceof MyBatisSystemException);
assertEquals(msg, e.getMessage());
}

@Test
void shouldNestedPersistenceExceptionReportsMsgOfChildExceptionIfParentsMsgIsNull() {
String msg = "Error!";
SQLExceptionTranslator sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
MyBatisExceptionTranslator translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
DataAccessException e = translator
.translateExceptionIfPossible(new PersistenceException(null, new PersistenceException(msg)));
var msg = "Error!";
var sqlExceptionTranslator = Mockito.mock(SQLExceptionTranslator.class);
var translator = new MyBatisExceptionTranslator(() -> sqlExceptionTranslator, false);
var e = translator.translateExceptionIfPossible(new PersistenceException(null, new PersistenceException(msg)));
assertTrue(e instanceof MyBatisSystemException);
assertEquals(msg, e.getMessage());
}
Expand Down
82 changes: 41 additions & 41 deletions src/test/java/org/mybatis/spring/MyBatisSpringTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2023 the original author or authors.
* Copyright 2010-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -47,7 +47,7 @@ class MyBatisSpringTest extends AbstractMyBatisSpringTest {
@AfterEach
void validateSessionClose() {
// assume if the Executor is closed, the Session is too
if ((session != null) && !executorInterceptor.isExecutorClosed()) {
if (session != null && !executorInterceptor.isExecutorClosed()) {
session = null;
fail("SqlSession is not closed");
} else {
Expand Down Expand Up @@ -140,8 +140,8 @@ void testSpringAPIWithMyBatisClose() {
// Spring API should work with a MyBatis TransactionFactories
@Test
void testWithNonSpringTransactionFactory() {
Environment original = sqlSessionFactory.getConfiguration().getEnvironment();
Environment nonSpring = new Environment("non-spring", new JdbcTransactionFactory(), dataSource);
var original = sqlSessionFactory.getConfiguration().getEnvironment();
var nonSpring = new Environment("non-spring", new JdbcTransactionFactory(), dataSource);
sqlSessionFactory.getConfiguration().setEnvironment(nonSpring);

try {
Expand All @@ -162,8 +162,8 @@ void testWithNonSpringTransactionFactory() {
// this should not work since the DS will be out of sync with MyBatis
@Test
void testNonSpringTxFactoryWithTx() throws Exception {
Environment original = sqlSessionFactory.getConfiguration().getEnvironment();
Environment nonSpring = new Environment("non-spring", new JdbcTransactionFactory(), dataSource);
var original = sqlSessionFactory.getConfiguration().getEnvironment();
var nonSpring = new Environment("non-spring", new JdbcTransactionFactory(), dataSource);
sqlSessionFactory.getConfiguration().setEnvironment(nonSpring);

TransactionStatus status = null;
Expand All @@ -186,12 +186,12 @@ void testNonSpringTxFactoryWithTx() throws Exception {
// this should work since the DS is managed MyBatis
@Test
void testNonSpringTxFactoryNonSpringDSWithTx() throws java.sql.SQLException {
Environment original = sqlSessionFactory.getConfiguration().getEnvironment();
var original = sqlSessionFactory.getConfiguration().getEnvironment();

MockDataSource mockDataSource = new MockDataSource();
var mockDataSource = new MockDataSource();
mockDataSource.setupConnection(createMockConnection());

Environment nonSpring = new Environment("non-spring", new JdbcTransactionFactory(), mockDataSource);
var nonSpring = new Environment("non-spring", new JdbcTransactionFactory(), mockDataSource);
sqlSessionFactory.getConfiguration().setEnvironment(nonSpring);

TransactionStatus status;
Expand All @@ -211,7 +211,7 @@ void testNonSpringTxFactoryNonSpringDSWithTx() throws java.sql.SQLException {

// SqlSession uses its own connection
// that connection will not have committed since no SQL was executed by the session
MockConnection mockConnection = (MockConnection) mockDataSource.getConnection();
var mockConnection = (MockConnection) mockDataSource.getConnection();
assertThat(mockConnection.getNumberCommits()).as("should call commit on Connection").isEqualTo(0);
assertThat(mockConnection.getNumberRollbacks()).as("should not call rollback on Connection").isEqualTo(0);
assertCommitSession();
Expand Down Expand Up @@ -248,16 +248,16 @@ void testChangeExecutorTypeInTxRequiresNew() throws Exception {

try {
txManager.setDataSource(dataSource);
TransactionStatus status = txManager.getTransaction(new DefaultTransactionDefinition());
var status = txManager.getTransaction(new DefaultTransactionDefinition());

session = SqlSessionUtils.getSqlSession(sqlSessionFactory);

// start a new tx while the other is in progress
DefaultTransactionDefinition txRequiresNew = new DefaultTransactionDefinition();
var txRequiresNew = new DefaultTransactionDefinition();
txRequiresNew.setPropagationBehaviorName("PROPAGATION_REQUIRES_NEW");
TransactionStatus status2 = txManager.getTransaction(txRequiresNew);
var status2 = txManager.getTransaction(txRequiresNew);

SqlSession session2 = SqlSessionUtils.getSqlSession(sqlSessionFactory, ExecutorType.BATCH, exceptionTranslator);
var session2 = SqlSessionUtils.getSqlSession(sqlSessionFactory, ExecutorType.BATCH, exceptionTranslator);

SqlSessionUtils.closeSqlSession(session2, sqlSessionFactory);
txManager.rollback(status2);
Expand All @@ -277,12 +277,12 @@ void testChangeExecutorTypeInTxRequiresNew() throws Exception {

@Test
void testWithJtaTxManager() {
JtaTransactionManager jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class));
var jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class));

DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");

TransactionStatus status = jtaManager.getTransaction(txDef);
var status = jtaManager.getTransaction(txDef);

session = SqlSessionUtils.getSqlSession(sqlSessionFactory);
session.getMapper(TestMapper.class).findTest();
Expand All @@ -298,20 +298,20 @@ void testWithJtaTxManager() {

@Test
void testWithJtaTxManagerAndNonSpringTxManager() throws java.sql.SQLException {
Environment original = sqlSessionFactory.getConfiguration().getEnvironment();
var original = sqlSessionFactory.getConfiguration().getEnvironment();

MockDataSource mockDataSource = new MockDataSource();
var mockDataSource = new MockDataSource();
mockDataSource.setupConnection(createMockConnection());

Environment nonSpring = new Environment("non-spring", new ManagedTransactionFactory(), mockDataSource);
var nonSpring = new Environment("non-spring", new ManagedTransactionFactory(), mockDataSource);
sqlSessionFactory.getConfiguration().setEnvironment(nonSpring);

JtaTransactionManager jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class));
var jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class));

DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");

TransactionStatus status = jtaManager.getTransaction(txDef);
var status = jtaManager.getTransaction(txDef);

try {
session = SqlSessionUtils.getSqlSession(sqlSessionFactory);
Expand All @@ -326,7 +326,7 @@ void testWithJtaTxManagerAndNonSpringTxManager() throws java.sql.SQLException {
assertNoCommitJdbc();
assertCommitSession();

MockConnection mockConnection = (MockConnection) mockDataSource.getConnection();
var mockConnection = (MockConnection) mockDataSource.getConnection();
assertThat(mockConnection.getNumberCommits()).as("should call commit on Connection").isEqualTo(0);
assertThat(mockConnection.getNumberRollbacks()).as("should not call rollback on Connection").isEqualTo(0);

Expand All @@ -345,10 +345,10 @@ void testWithJtaTxManagerAndNonSpringTxManager() throws java.sql.SQLException {

@Test
void testWithTxSupports() {
DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_SUPPORTS");

TransactionStatus status = txManager.getTransaction(txDef);
var status = txManager.getTransaction(txDef);

session = SqlSessionUtils.getSqlSession(sqlSessionFactory);
session.getMapper(TestMapper.class).findTest();
Expand All @@ -363,10 +363,10 @@ void testWithTxSupports() {

@Test
void testRollbackWithTxSupports() {
DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_SUPPORTS");

TransactionStatus status = txManager.getTransaction(txDef);
var status = txManager.getTransaction(txDef);

session = SqlSessionUtils.getSqlSession(sqlSessionFactory);
session.getMapper(TestMapper.class).findTest();
Expand All @@ -381,10 +381,10 @@ void testRollbackWithTxSupports() {

@Test
void testWithTxRequired() {
DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");

TransactionStatus status = txManager.getTransaction(txDef);
var status = txManager.getTransaction(txDef);

session = SqlSessionUtils.getSqlSession(sqlSessionFactory);
session.getMapper(TestMapper.class).findTest();
Expand All @@ -399,10 +399,10 @@ void testWithTxRequired() {

@Test
void testSqlSessionCommitWithTx() {
DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");

TransactionStatus status = txManager.getTransaction(txDef);
var status = txManager.getTransaction(txDef);

session = SqlSessionUtils.getSqlSession(sqlSessionFactory);
session.getMapper(TestMapper.class).findTest();
Expand All @@ -429,7 +429,7 @@ void testWithInterleavedTx() {
session.getMapper(TestMapper.class).findTest();

// this transaction should use another Connection
TransactionStatus status = txManager.getTransaction(new DefaultTransactionDefinition());
var status = txManager.getTransaction(new DefaultTransactionDefinition());

// session continues using original connection
session.getMapper(TestMapper.class).insertTest("test2");
Expand Down Expand Up @@ -463,16 +463,16 @@ void testSuspendAndResume() {

try {
txManager.setDataSource(dataSource);
TransactionStatus status = txManager.getTransaction(new DefaultTransactionDefinition());
var status = txManager.getTransaction(new DefaultTransactionDefinition());

session = SqlSessionUtils.getSqlSession(sqlSessionFactory);

// start a new tx while the other is in progress
DefaultTransactionDefinition txRequiresNew = new DefaultTransactionDefinition();
var txRequiresNew = new DefaultTransactionDefinition();
txRequiresNew.setPropagationBehaviorName("PROPAGATION_REQUIRES_NEW");
TransactionStatus status2 = txManager.getTransaction(txRequiresNew);
var status2 = txManager.getTransaction(txRequiresNew);

SqlSession session2 = SqlSessionUtils.getSqlSession(sqlSessionFactory);
var session2 = SqlSessionUtils.getSqlSession(sqlSessionFactory);

assertThat(session).as("getSqlSession() should not return suspended SqlSession").isNotSameAs(session2);

Expand Down Expand Up @@ -535,10 +535,10 @@ void testBatch() {
void testBatchInTx() {
setupBatchStatements();

DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");

TransactionStatus status = txManager.getTransaction(txDef);
var status = txManager.getTransaction(txDef);

session = SqlSessionUtils.getSqlSession(sqlSessionFactory, ExecutorType.BATCH, exceptionTranslator);

Expand Down Expand Up @@ -577,10 +577,10 @@ void testBatchWithError() {
void testBatchInTxWithError() {
setupBatchStatements();

DefaultTransactionDefinition txDef = new DefaultTransactionDefinition();
var txDef = new DefaultTransactionDefinition();
txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED");

TransactionStatus status = txManager.getTransaction(txDef);
var status = txManager.getTransaction(txDef);

session = SqlSessionUtils.getSqlSession(sqlSessionFactory, ExecutorType.BATCH, exceptionTranslator);

Expand Down
2 changes: 1 addition & 1 deletion src/test/java/org/mybatis/spring/PooledMockDataSource.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2022 the original author or authors.
* Copyright 2010-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Loading

0 comments on commit d308c57

Please sign in to comment.