/server/sonar-db-dao/src/test/java/org/sonar/db/DbSessionImplTest.java
Java | 266 lines | 222 code | 24 blank | 20 comment | 2 complexity | aac688988924608e66a2512cc06ec72b MD5 | raw file
- /*
- * SonarQube
- * Copyright (C) 2009-2022 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
- package org.sonar.db;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Random;
- import java.util.function.Consumer;
- import java.util.function.Function;
- import org.apache.ibatis.cursor.Cursor;
- import org.apache.ibatis.executor.BatchResult;
- import org.apache.ibatis.session.Configuration;
- import org.apache.ibatis.session.ResultHandler;
- import org.apache.ibatis.session.RowBounds;
- import org.apache.ibatis.session.SqlSession;
- import org.junit.Test;
- import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
- import static org.assertj.core.api.Assertions.assertThat;
- import static org.mockito.Mockito.mock;
- import static org.mockito.Mockito.reset;
- import static org.mockito.Mockito.verify;
- import static org.mockito.Mockito.verifyNoMoreInteractions;
- import static org.mockito.Mockito.when;
- public class DbSessionImplTest {
- private SqlSession sqlSessionMock = mock(SqlSession.class);
- private DbSessionImpl underTest = new DbSessionImpl(sqlSessionMock);
- @Test
- public void all_methods_to_wrapped_SqlSession() {
- Random random = new Random();
- boolean randomBoolean = random.nextBoolean();
- int randomInt = random.nextInt(200);
- String randomStatement = randomAlphabetic(10);
- Object randomParameter = new Object();
- Cursor<Object> mockCursor = mock(Cursor.class);
- RowBounds rowBounds = new RowBounds();
- Object randomObject = new Object();
- List<Object> randomList = new ArrayList<>();
- Map<Object, Object> randomMap = new HashMap<>();
- String randomMapKey = randomAlphabetic(10);
- ResultHandler randomResultHandler = resultContext -> {
- // don't care
- };
- List<BatchResult> randomBatchResults = new ArrayList<>();
- Configuration randomConfiguration = new Configuration();
- verifyDelegation(DbSessionImpl::commit, s -> verify(s).commit());
- verifyDelegation(t -> t.commit(randomBoolean), s -> verify(s).commit(randomBoolean));
- verifyDelegation(
- sqlSession -> when(sqlSession.selectCursor(randomStatement)).thenReturn(mockCursor),
- dbSession -> dbSession.selectCursor(randomStatement),
- sqlSession -> {
- verify(sqlSession).selectCursor(randomStatement);
- return mockCursor;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectCursor(randomStatement, randomParameter)).thenReturn(mockCursor),
- dbSession -> dbSession.selectCursor(randomStatement, randomParameter),
- sqlSession -> {
- verify(sqlSessionMock).selectCursor(randomStatement, randomParameter);
- return mockCursor;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectCursor(randomStatement, randomParameter, rowBounds)).thenReturn(mockCursor),
- dbSession -> dbSession.selectCursor(randomStatement, randomParameter, rowBounds),
- sqlSession -> {
- verify(sqlSessionMock).selectCursor(randomStatement, randomParameter, rowBounds);
- return mockCursor;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectOne(randomStatement)).thenReturn(randomObject),
- dbSession -> dbSession.selectOne(randomStatement),
- sqlSession -> {
- verify(sqlSession).selectOne(randomStatement);
- return randomObject;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectOne(randomStatement, randomParameter)).thenReturn(randomObject),
- dbSession -> dbSession.selectOne(randomStatement, randomParameter),
- sqlSession -> {
- verify(sqlSessionMock).selectOne(randomStatement, randomParameter);
- return randomObject;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectList(randomStatement)).thenReturn(randomList),
- dbSession -> dbSession.selectList(randomStatement),
- sqlSession -> {
- verify(sqlSession).selectList(randomStatement);
- return randomList;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectList(randomStatement, randomParameter)).thenReturn(randomList),
- dbSession -> dbSession.selectList(randomStatement, randomParameter),
- sqlSession -> {
- verify(sqlSessionMock).selectList(randomStatement, randomParameter);
- return randomList;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectList(randomStatement, randomParameter, rowBounds)).thenReturn(randomList),
- dbSession -> dbSession.selectList(randomStatement, randomParameter, rowBounds),
- sqlSession -> {
- verify(sqlSessionMock).selectList(randomStatement, randomParameter, rowBounds);
- return randomList;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectMap(randomStatement, randomMapKey)).thenReturn(randomMap),
- dbSession -> dbSession.selectMap(randomStatement, randomMapKey),
- sqlSession -> {
- verify(sqlSession).selectMap(randomStatement, randomMapKey);
- return randomMap;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectMap(randomStatement, randomParameter, randomMapKey)).thenReturn(randomMap),
- dbSession -> dbSession.selectMap(randomStatement, randomParameter, randomMapKey),
- sqlSession -> {
- verify(sqlSessionMock).selectMap(randomStatement, randomParameter, randomMapKey);
- return randomMap;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.selectMap(randomStatement, randomParameter, randomMapKey, rowBounds)).thenReturn(randomMap),
- dbSession -> dbSession.selectMap(randomStatement, randomParameter, randomMapKey, rowBounds),
- sqlSession -> {
- verify(sqlSessionMock).selectMap(randomStatement, randomParameter, randomMapKey, rowBounds);
- return randomMap;
- });
- verifyDelegation(
- dbSession -> dbSession.select(randomStatement, randomResultHandler),
- sqlSession -> verify(sqlSessionMock).select(randomStatement, randomResultHandler));
- verifyDelegation(
- dbSession -> dbSession.select(randomStatement, randomParameter, randomResultHandler),
- sqlSession -> verify(sqlSession).select(randomStatement, randomParameter, randomResultHandler));
- verifyDelegation(
- dbSession -> dbSession.select(randomStatement, randomParameter, rowBounds, randomResultHandler),
- sqlSession -> verify(sqlSessionMock).select(randomStatement, randomParameter, rowBounds, randomResultHandler));
- verifyDelegation(
- sqlSession -> when(sqlSession.insert(randomStatement)).thenReturn(randomInt),
- dbSession -> dbSession.insert(randomStatement),
- sqlSession -> {
- verify(sqlSession).insert(randomStatement);
- return randomInt;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.insert(randomStatement, randomParameter)).thenReturn(randomInt),
- dbSession -> dbSession.insert(randomStatement, randomParameter),
- sqlSession -> {
- verify(sqlSessionMock).insert(randomStatement, randomParameter);
- return randomInt;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.update(randomStatement)).thenReturn(randomInt),
- dbSession -> dbSession.update(randomStatement),
- sqlSession -> {
- verify(sqlSession).update(randomStatement);
- return randomInt;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.update(randomStatement, randomParameter)).thenReturn(randomInt),
- dbSession -> dbSession.update(randomStatement, randomParameter),
- sqlSession -> {
- verify(sqlSessionMock).update(randomStatement, randomParameter);
- return randomInt;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.delete(randomStatement)).thenReturn(randomInt),
- dbSession -> dbSession.delete(randomStatement),
- sqlSession -> {
- verify(sqlSession).delete(randomStatement);
- return randomInt;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.delete(randomStatement, randomParameter)).thenReturn(randomInt),
- dbSession -> dbSession.delete(randomStatement, randomParameter),
- sqlSession -> {
- verify(sqlSessionMock).delete(randomStatement, randomParameter);
- return randomInt;
- });
- verifyDelegation(DbSessionImpl::rollback, s -> verify(s).rollback());
- verifyDelegation(t -> t.rollback(randomBoolean), s -> verify(s).rollback(randomBoolean));
- verifyDelegation(
- sqlSession -> when(sqlSession.flushStatements()).thenReturn(randomBatchResults),
- DbSessionImpl::flushStatements,
- sqlSession -> {
- verify(sqlSession).flushStatements();
- return randomBatchResults;
- });
- verifyDelegation(DbSessionImpl::close, s -> verify(s).close());
- verifyDelegation(DbSessionImpl::clearCache, s -> verify(s).clearCache());
- verifyDelegation(
- sqlSession -> when(sqlSession.getConfiguration()).thenReturn(randomConfiguration),
- DbSessionImpl::getConfiguration,
- sqlSession -> {
- verify(sqlSession).getConfiguration();
- return randomConfiguration;
- });
- verifyDelegation(
- sqlSession -> when(sqlSession.getMapper(DbSessionImplTest.class)).thenReturn(DbSessionImplTest.this),
- dbSession -> dbSession.getMapper(DbSessionImplTest.class),
- sqlSession -> {
- verify(sqlSession).getMapper(DbSessionImplTest.class);
- return DbSessionImplTest.this;
- });
- verifyDelegation(DbSessionImpl::getConnection, s -> verify(s).getConnection());
- }
- @Test
- public void getSqlSession_returns_wrapped_SqlSession_object() {
- assertThat(underTest.getSqlSession()).isSameAs(sqlSessionMock);
- }
- private void verifyDelegation(Consumer<DbSessionImpl> t, Consumer<SqlSession> s) {
- reset(sqlSessionMock);
- t.accept(underTest);
- s.accept(sqlSessionMock);
- verifyNoMoreInteractions(sqlSessionMock);
- }
- private <T> void verifyDelegation(Consumer<SqlSession> prepare, Function<DbSessionImpl, T> t, Function<SqlSession, T> s) {
- reset(sqlSessionMock);
- prepare.accept(sqlSessionMock);
- T value = t.apply(underTest);
- T expected = s.apply(sqlSessionMock);
- verifyNoMoreInteractions(sqlSessionMock);
- if (expected instanceof Number) {
- assertThat(value).isEqualTo(expected);
- } else {
- assertThat(value).isSameAs(expected);
- }
- }
- }