public void Decorate_TxAction_Rollback_Test()
        {
            // Arrange
            TransactionDecorator target = new TransactionDecorator();
            ConnectionDecorator  cd     = new ConnectionDecorator();

            cd.DataSource = new TestDataSource();
            FieldInfo cdField = target.GetType().GetField(
                "_connectionDecorator", BindingFlags.NonPublic | BindingFlags.Instance);

            cdField.SetValue(target, cd);

            // Act/Assert
            TestUtils.ExecuteExcectedException <QuillException>(
                () => {
                target.Decorate(connection => {
                    throw new QuillException("TestException");
                });
            });

            // Assert
            Assert.IsFalse(TestTx.IsCalledCommit);
            Assert.IsTrue(TestTx.IsCalledDispose);
            Assert.IsTrue(TestTx.IsCalledRollbacked);
        }
        public void Decorate_TxFunc_Test()
        {
            // Arrange
            const int            EXPECTED = 12345;
            TransactionDecorator target   = new TransactionDecorator();
            ConnectionDecorator  cd       = new ConnectionDecorator();

            cd.DataSource = new TestDataSource();
            FieldInfo cdField = target.GetType().GetField(
                "_connectionDecorator", BindingFlags.NonPublic | BindingFlags.Instance);

            cdField.SetValue(target, cd);

            // Act/Assert
            var actual = target.Decorate(tx => {
                Assert.IsNotNull(tx);
                Assert.AreEqual(ConnectionState.Open, tx.Connection.State);
                return(EXPECTED);
            });

            // Assert
            Assert.AreEqual(EXPECTED, actual);
            Assert.IsTrue(TestTx.IsCalledCommit);
            Assert.IsTrue(TestTx.IsCalledDispose);
            Assert.IsFalse(TestTx.IsCalledRollbacked);
        }
        public void Decorate_Action_Test()
        {
            // Arrange
            ConnectionDecorator target = new ConnectionDecorator();

            target.DataSource = new TestDataSource();

            // Act/Assert
            target.Decorate(connection => {
                Assert.IsNotNull(connection);
                Assert.AreEqual(ConnectionState.Open, connection.State);
            });
        }
        public void Decorate_MultiDataSource_Default_Test()
        {
            // Arrange
            const string        NOT_EXPECTED_DS_NAME = "Hoge";
            ConnectionDecorator target      = new ConnectionDecorator();
            MultiDataSource     dataSources = new MultiDataSource();

            dataSources.DefaultDataSource = new TestDataSource();
            dataSources.RegisterDataSource(NOT_EXPECTED_DS_NAME, new TestDataSource2());
            target.DataSource = dataSources;

            // Act/Assert
            target.Decorate(TestActionNoAttr);
        }
        public void Decorate_Twice_Test()
        {
            // Arrange
            ConnectionDecorator target = new ConnectionDecorator();
            DataSourceImpl      ds     = new DataSourceImpl(() => new DbConnectionForConnectionDecorator());

            target.DataSource = ds;

            // Act/Assert
            target.Decorate(connection => {
                target.Decorate(connection2 => {
                    Assert.AreEqual(ConnectionState.Open, connection2.State);
                    Assert.AreEqual(connection, connection2);
                });
                Assert.AreEqual(ConnectionState.Open, connection.State);
            });
        }
        public void Decorate_MultiDataSource_Exception_Test()
        {
            // Arrange
            const string        NOT_EXPECTED_DS_NAME = "Huga";
            ConnectionDecorator target      = new ConnectionDecorator();
            MultiDataSource     dataSources = new MultiDataSource();

            dataSources.RegisterDataSource(NOT_EXPECTED_DS_NAME, new TestDataSource());
            target.DataSource = dataSources;

            var scopeArgs = new Dictionary <string, object>();

            scopeArgs[QuillKey.DATA_SOURCE_NAME] = "HogeSource";

            // Act/Assert
            TestUtils.ExecuteExcectedException <ArgumentException>(
                () => target.Decorate(TestAction, scopeArgs));
        }
        public void Decorate_Func_Test()
        {
            // Arrange
            const int           EXPECTED = 12345;
            ConnectionDecorator target   = new ConnectionDecorator();

            target.DataSource = new TestDataSource();

            // Act/Assert
            int result = target.Decorate(conection => {
                Assert.IsNotNull(conection);
                Assert.AreEqual(ConnectionState.Open, conection.State);
                return(EXPECTED);
            });

            Assert.AreEqual(EXPECTED, result);
            Assert.AreEqual(ConnectionState.Closed, target.DataSource.GetConnection().State);
        }
        public void Decorate_MultiDataSource_Test()
        {
            // Arrange
            const string        EXPECTED_DS_NAME     = "Hoge";
            const string        NOT_EXPECTED_DS_NAME = "Huga";
            ConnectionDecorator target      = new ConnectionDecorator();
            MultiDataSource     dataSources = new MultiDataSource();

            dataSources.RegisterDataSource(EXPECTED_DS_NAME, new TestDataSource2());
            dataSources.RegisterDataSource(NOT_EXPECTED_DS_NAME, new TestDataSource());
            target.DataSource = dataSources;

            var scopeArgs = new Dictionary <string, object>();

            scopeArgs[QuillKey.DATA_SOURCE_NAME] = EXPECTED_DS_NAME;

            // Act/Assert
            target.Decorate(TestAction, scopeArgs);
        }