Package org.togglz.core.repository.jdbc

Source Code of org.togglz.core.repository.jdbc.JDBCRepositoryAutoCommitTest$AutoCommitTestDataSource

package org.togglz.core.repository.jdbc;

import static org.assertj.core.api.Assertions.assertThat;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;

import javax.sql.DataSource;

import org.h2.jdbcx.JdbcConnectionPool;
import org.junit.Test;
import org.togglz.core.Feature;
import org.togglz.core.repository.FeatureState;
import org.togglz.core.repository.util.DefaultMapSerializer;

public class JDBCRepositoryAutoCommitTest {

    private DataSource dataSource;

    private JDBCStateRepository repository;

    @Test
    public void shouldUpdateWithAutoCommitEnabled() {
        givenSomeDataSourceWithAutoCommitSetTo(true);
        whenTheFeatureIsEnabled();
        thenTheDatabaseShouldBeUpdated();
    }

    @Test
    public void shouldUpdateWithAutoCommitDisabled() {
        givenSomeDataSourceWithAutoCommitSetTo(false);
        whenTheFeatureIsEnabled();
        thenTheDatabaseShouldBeUpdated();
    }

    private void givenSomeDataSourceWithAutoCommitSetTo(boolean autoCommit) {
        String url = "jdbc:h2:mem:" + this.getClass().getSimpleName() + System.currentTimeMillis();
        JdbcConnectionPool pool = JdbcConnectionPool.create(url, "sa", "");
        dataSource = new AutoCommitTestDataSource(pool, autoCommit);
        repository = new JDBCStateRepository(dataSource, "TOGGLZ", true,
            DefaultMapSerializer.multiline());
    }

    private void whenTheFeatureIsEnabled() {
        FeatureState state = new FeatureState(AutoCommitFeature.F1)
            .enable()
            .setStrategyId("foobar");
        repository.setFeatureState(state);
    }

    private void thenTheDatabaseShouldBeUpdated() {
        FeatureState state = repository.getFeatureState(AutoCommitFeature.F1);
        assertThat(state).isNotNull();
        assertThat(state.isEnabled()).isTrue();
        assertThat(state.getStrategyId()).isEqualTo("foobar");
    }

    private static enum AutoCommitFeature implements Feature {
        F1;
    }

    private static class AutoCommitTestDataSource implements DataSource {

        private final DataSource delegate;

        private final boolean autoCommit;

        public AutoCommitTestDataSource(DataSource delegate, boolean autoCommit) {
            this.delegate = delegate;
            this.autoCommit = autoCommit;
        }

        @Override
        public PrintWriter getLogWriter() throws SQLException {
            return delegate.getLogWriter();
        }

        @Override
        public void setLogWriter(PrintWriter out) throws SQLException {
            delegate.setLogWriter(out);
        }

        @Override
        public void setLoginTimeout(int seconds) throws SQLException {
            delegate.setLoginTimeout(seconds);
        }

        @Override
        public int getLoginTimeout() throws SQLException {
            return delegate.getLoginTimeout();
        }

        // No @Override, because of interface compatibility issue
        public Logger getParentLogger() throws SQLFeatureNotSupportedException {
            throw new SQLFeatureNotSupportedException();
        }

        @Override
        public <T> T unwrap(Class<T> iface) throws SQLException {
            return delegate.unwrap(iface);
        }

        @Override
        public boolean isWrapperFor(Class<?> iface) throws SQLException {
            return delegate.isWrapperFor(iface);
        }

        @Override
        public Connection getConnection() throws SQLException {
            Connection connection = delegate.getConnection();
            connection.setAutoCommit(autoCommit);
            return connection;
        }

        @Override
        public Connection getConnection(String username, String password) throws SQLException {
            throw new IllegalStateException("Should not happen in the test");
        }

    }

}
TOP

Related Classes of org.togglz.core.repository.jdbc.JDBCRepositoryAutoCommitTest$AutoCommitTestDataSource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.