public void ChangeConnectionTest()
        {
            #region arrange
            var db = new SqlServerDatabase();

            // make sure you have a valid connection string in the app.config
            var validConnection = ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>().ToArray()[1].ConnectionString;

            var invalidConnection = validConnection.Replace("Source=", "Source=sdagda");
            #endregion

            #region act
            var error1 = db.ChangeConnection(validConnection);

            var error2 = db.ChangeConnection(invalidConnection);

            db.Dispose();
            #endregion

            #region assert
            if (error1 != string.Empty)
                Assert.Fail("shouldn't have thrown an error: " + error1);

            if (error2 == string.Empty)
                Assert.Fail("didn't detect invalid connection string");
            #endregion
        }
        public void DatabaseAccessTests()
        {
            #region arrange
            var db = new SqlServerDatabase();

            // make sure you have a valid connection string in the app.config
            var validConnection = ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>().ToArray()[1].ConnectionString;

            #endregion

            #region act

            var errorConnection = db.ChangeConnection(validConnection);

            var databases = db.GetDatabases();

            if (databases.Count == 0)
                Assert.Fail("didn't return any database");

            var errorDatabase = db.ChangeDatabase(validConnection, databases[0]);

            #endregion

            #region assert
            if (errorConnection != string.Empty)
                Assert.Fail("when connecting to server: " + errorConnection);

            if (databases.Count == 0)
                Assert.Fail("no databases returned");

            if (errorDatabase != string.Empty)
                Assert.Fail("when connecting to database: " + errorDatabase);
            #endregion

            /// uses the already existing connection to continue testing

            #region act

            var tables = db.GetTables();

            var storedProcedures = db.GetStoredProcedures();

            #endregion

            #region assert
            if (tables.Count == 0)
                Assert.Fail("no tables returned");

            if (storedProcedures.Count == 0)
                Assert.Fail("no SPs returned");
            #endregion

            #region act
            var columnsTable = db.GetColumnsForTable(tables[0]);
            var columnsStoredProcedures = db.GetColumnsForStoredProcedure(storedProcedures[0]);
            #endregion

            #region assert
            if (columnsTable.Count == 0)
                Assert.Fail("no columns for table {0} returned", tables[0]);

            if (columnsStoredProcedures.Count == 0)
                Assert.Fail("no input parameters for SP {0} returned", storedProcedures[0]);
            #endregion

            #region act
            var storedProcedureText = db.GetStoredProcedureBody(storedProcedures[0]);

            string errorSP = string.Empty;

            var result = db.ExecuteStoredProcedure(storedProcedures[0], columnsStoredProcedures, out errorSP);
            #endregion

            if (string.IsNullOrEmpty(storedProcedureText))
                Assert.Fail("stored procedure body not returned");

            if (errorSP != string.Empty || result == null)
                Assert.Fail("error when executing sp: {0}", errorSP);

            db.Dispose();
        }