コード例 #1
0
        public void BuildCommandForSqlQueryWithStoredProcedureWithParameters()
        {
            var sqlQuery = new SqlQuery(
                "EXEC GetTableContents @identifier, @Cust_Name",
                100, "hello");

            var mockDbProviderFactory = new Mock <DbProviderFactory>();

            mockDbProviderFactory.Setup(x => x.CreateCommand()).Returns(new System.Data.SqlClient.SqlCommand());

            var dbDriver = new MsSqlDbDriver();

            dbDriver.DbProviderFactory = mockDbProviderFactory.Object;

            var command = dbDriver.BuildCommand(sqlQuery);

            // The command text should only contain the stored procedure name.
            Assert.Equal("GetTableContents", command.CommandText);
            Assert.Equal(CommandType.StoredProcedure, command.CommandType);
            Assert.Equal(2, command.Parameters.Count);

            var parameter1 = (IDataParameter)command.Parameters[0];

            Assert.Equal(DbType.Int32, parameter1.DbType);
            Assert.Equal(ParameterDirection.Input, parameter1.Direction);
            Assert.Equal("@identifier", parameter1.ParameterName);
            Assert.Equal(sqlQuery.Arguments[0].Value, parameter1.Value);

            var parameter2 = (IDataParameter)command.Parameters[1];

            Assert.Equal(DbType.String, parameter2.DbType);
            Assert.Equal(ParameterDirection.Input, parameter2.Direction);
            Assert.Equal("@Cust_Name", parameter2.ParameterName);
            Assert.Equal(sqlQuery.Arguments[1].Value, parameter2.Value);
        }
コード例 #2
0
ファイル: MsSqlDbDriverTests.cs プロジェクト: Klegy/MicroLite
        public void BuildCommandForSqlQueryWithStoredProcedureWithParameters()
        {
            var command = new SqlCommand();

            var sqlQuery = new SqlQuery(
                "EXEC GetTableContents @identifier, @Cust_Name",
                100, "hello");

            var dbDriver = new MsSqlDbDriver();

            dbDriver.BuildCommand(command, sqlQuery);

            // The command text should only contain the stored procedure name.
            Assert.Equal("GetTableContents", command.CommandText);
            Assert.Equal(CommandType.StoredProcedure, command.CommandType);
            Assert.Equal(2, command.Parameters.Count);

            var parameter1 = (IDataParameter)command.Parameters[0];

            Assert.Equal(DbType.Int32, parameter1.DbType);
            Assert.Equal(ParameterDirection.Input, parameter1.Direction);
            Assert.Equal("@identifier", parameter1.ParameterName);
            Assert.Equal(sqlQuery.Arguments[0].Value, parameter1.Value);

            var parameter2 = (IDataParameter)command.Parameters[1];

            Assert.Equal(DbType.String, parameter2.DbType);
            Assert.Equal(ParameterDirection.Input, parameter2.Direction);
            Assert.Equal("@Cust_Name", parameter2.ParameterName);
            Assert.Equal(sqlQuery.Arguments[1].Value, parameter2.Value);
        }
コード例 #3
0
ファイル: MsSqlDbDriverTests.cs プロジェクト: Klegy/MicroLite
        public void BuildCommandForSqlQueryWithSqlTextWhichUsesSameParameterTwice()
        {
            var command = new SqlCommand();

            var sqlQuery = new SqlQuery(
                "SELECT * FROM [Table] WHERE [Table].[Id] = @p0 AND [Table].[Value1] = @p1 OR @p1 IS NULL",
                100, "hello");

            var dbDriver = new MsSqlDbDriver();

            dbDriver.BuildCommand(command, sqlQuery);

            Assert.Equal(sqlQuery.CommandText, command.CommandText);
            Assert.Equal(CommandType.Text, command.CommandType);
            Assert.Equal(2, command.Parameters.Count);

            var parameter1 = (IDataParameter)command.Parameters[0];

            Assert.Equal(DbType.Int32, parameter1.DbType);
            Assert.Equal(ParameterDirection.Input, parameter1.Direction);
            Assert.Equal("@p0", parameter1.ParameterName);
            Assert.Equal(sqlQuery.Arguments[0].Value, parameter1.Value);

            var parameter2 = (IDataParameter)command.Parameters[1];

            Assert.Equal(DbType.String, parameter2.DbType);
            Assert.Equal(ParameterDirection.Input, parameter2.Direction);
            Assert.Equal("@p1", parameter2.ParameterName);
            Assert.Equal(sqlQuery.Arguments[1].Value, parameter2.Value);
        }
コード例 #4
0
        public void BuildCommandForSqlQueryWithSqlTextWhichUsesSameParameterTwice()
        {
            var sqlQuery = new SqlQuery(
                "SELECT * FROM [Table] WHERE [Table].[Id] = @p0 AND [Table].[Value1] = @p1 OR @p1 IS NULL",
                100, "hello");

            var mockDbProviderFactory = new Mock <DbProviderFactory>();

            mockDbProviderFactory.Setup(x => x.CreateCommand()).Returns(new System.Data.SqlClient.SqlCommand());

            var dbDriver = new MsSqlDbDriver();

            dbDriver.DbProviderFactory = mockDbProviderFactory.Object;

            var command = dbDriver.BuildCommand(sqlQuery);

            Assert.Equal(sqlQuery.CommandText, command.CommandText);
            Assert.Equal(CommandType.Text, command.CommandType);
            Assert.Equal(2, command.Parameters.Count);

            var parameter1 = (IDataParameter)command.Parameters[0];

            Assert.Equal(DbType.Int32, parameter1.DbType);
            Assert.Equal(ParameterDirection.Input, parameter1.Direction);
            Assert.Equal("@p0", parameter1.ParameterName);
            Assert.Equal(sqlQuery.Arguments[0].Value, parameter1.Value);

            var parameter2 = (IDataParameter)command.Parameters[1];

            Assert.Equal(DbType.String, parameter2.DbType);
            Assert.Equal(ParameterDirection.Input, parameter2.Direction);
            Assert.Equal("@p1", parameter2.ParameterName);
            Assert.Equal(sqlQuery.Arguments[1].Value, parameter2.Value);
        }
コード例 #5
0
            public WhenCallingCombine_WithAnTwoSqlQueries_AndAnSqlQueryIsForAStoredProcedure()
            {
                this.sqlQuery1 = new SqlQuery("SELECT [Column1], [Column2], [Column3] FROM [dbo].[Table1] WHERE [Column1] = @p0 AND [Column2] > @p1", "Foo", 100);
                this.sqlQuery2 = new SqlQuery("EXEC CustomersByStatus @StatusId", 2);

                var dbDriver = new MsSqlDbDriver();

                this.combinedQuery = dbDriver.Combine(this.sqlQuery1, this.sqlQuery2);
            }
コード例 #6
0
        public static void InitImpl()
        {
            if (BooksApp != null)
            {
                return;
            }
            LogFilePath = ConfigurationManager.AppSettings["LogFilePath"];
            DeleteLocalLogFile();

            var protectedSection = (NameValueCollection)ConfigurationManager.GetSection("protected");
            var loginCryptoKey   = protectedSection["LoginInfoCryptoKey"];
            var connString       = protectedSection["MsSqlConnectionString"];
            var logConnString    = protectedSection["MsSqlLogConnectionString"];

            BooksApp = new BooksEntityApp(loginCryptoKey);
            //Add mock email/sms service
            NotificationListener = new NotificationListener(BooksApp, blockAll: true);
            //Set magic captcha in login settings, so we can pass captcha in unit tests
            var loginStt = BooksApp.GetConfig <Vita.Modules.Login.LoginModuleSettings>();

            loginStt.MagicCaptcha = "Magic";
            BooksApp.Init();
            //connect to database
            var driver     = MsSqlDbDriver.Create(connString);
            var dbOptions  = MsSqlDbDriver.DefaultMsSqlDbOptions;
            var dbSettings = new DbSettings(driver, dbOptions, connString, upgradeMode: DbUpgradeMode.Always); // schemas);
            var resetDb    = ConfigurationManager.AppSettings["ResetDatabase"] == "true";

            if (resetDb)
            {
                Vita.UnitTests.Common.TestUtil.DropSchemaObjects(dbSettings);
            }
            BooksApp.ConnectTo(dbSettings);
            var logDbSettings = new DbSettings(driver, dbOptions, logConnString);

            BooksApp.LoggingApp.ConnectTo(logDbSettings);
            BooksApp.LoggingApp.LogPath = LogFilePath;
            TestUtil.DeleteAllData(BooksApp, exceptEntities: new [] { typeof(IDbInfo), typeof(IDbModuleInfo) });
            TestUtil.DeleteAllData(BooksApp.LoggingApp);

            SampleDataGenerator.CreateUnitTestData(BooksApp);

            // Start service
            var serviceUrl      = ConfigurationManager.AppSettings["ServiceUrl"];
            var jsonNames       = ConfigurationManager.AppSettings["JsonStyleNames"] == "true";
            var jsonMappingMode = jsonNames ? ApiNameMapping.UnderscoreAllLower : ApiNameMapping.Default;

            StartService(serviceUrl, jsonMappingMode);
            // create client
            var clientContext = new OperationContext(BooksApp);

            // change options to None to disable logging of test client calls
            Client = new WebApiClient(clientContext, serviceUrl, clientName: "TestClient", nameMapping: jsonMappingMode,
                                      options: ClientOptions.EnableLog, badRequestContentType: typeof(List <ClientFault>));
            WebApiClient.SharedHttpClientHandler.AllowAutoRedirect = false; //we need it for Redirect test
        }
コード例 #7
0
            public WhenCallingCombine_WithTwoSqlQueries()
            {
                this.sqlQuery1         = new SqlQuery("SELECT [Column1], [Column2], [Column3] FROM [dbo].[Table1] WHERE [Column1] = @p0 AND [Column2] > @p1", "Foo", 100);
                this.sqlQuery1.Timeout = 38;

                this.sqlQuery2         = new SqlQuery("SELECT [Column_1], [Column_2] FROM [dbo].[Table_2] WHERE ([Column_1] = @p0 OR @p0 IS NULL) AND [Column_2] < @p1", "Bar", -1);
                this.sqlQuery2.Timeout = 42;

                var dbDriver = new MsSqlDbDriver();

                this.combinedQuery = dbDriver.Combine(this.sqlQuery1, this.sqlQuery2);
            }
コード例 #8
0
        public void BuildCommandThrowsMicroLiteExceptionForParameterCountMismatch()
        {
            var sqlQuery = new SqlQuery(
                "SELECT * FROM [Table] WHERE [Table].[Id] = @p0 AND [Table].[Value] = @p1",
                100);

            var dbDriver = new MsSqlDbDriver();

            var exception = Assert.Throws <MicroLiteException>(
                () => dbDriver.BuildCommand(sqlQuery));

            Assert.Equal(ExceptionMessages.DbDriver_ArgumentsCountMismatch.FormatWith("2", "1"), exception.Message);
        }
コード例 #9
0
ファイル: MsSqlDbDriverTests.cs プロジェクト: Klegy/MicroLite
        public void DbTypeTimeIsIncorrectlyHandledAsDateTime()
        {
            var command = new SqlCommand();

            var sqlQuery = new SqlQuery(
                "SELECT * FROM [Table] WHERE [TimeStamp] > @p0",
                new SqlArgument(new TimeSpan(5, 30, 1), DbType.Time));

            var dbDriver = new MsSqlDbDriver();

            dbDriver.BuildCommand(command, sqlQuery);

            Assert.Equal(SqlDbType.Time, command.Parameters[0].SqlDbType);
        }
コード例 #10
0
ファイル: MsSqlDbDriverTests.cs プロジェクト: Klegy/MicroLite
        public void BuildCommandForSqlQueryWithStoredProcedureWithoutParameters()
        {
            var command = new SqlCommand();

            var sqlQuery = new SqlQuery("EXEC GetTableContents");

            var dbDriver = new MsSqlDbDriver();

            dbDriver.BuildCommand(command, sqlQuery);

            // The command text should only contain the stored procedure name.
            Assert.Equal("GetTableContents", command.CommandText);
            Assert.Equal(CommandType.StoredProcedure, command.CommandType);
            Assert.Equal(0, command.Parameters.Count);
        }
コード例 #11
0
ファイル: Program.cs プロジェクト: rivantsov/VitaGuideSample
        static void Init()
        {
            // clear log
            if (File.Exists(LogFileName))
            {
                File.Delete(LogFileName);
            }
            // create and connect the app
            _app              = new BooksEntityApp();
            _app.LogPath      = LogFileName;
            _app.ErrorLogPath = "_errors.log";
            var driver     = new MsSqlDbDriver();
            var dbSettings = new DbSettings(driver, MsSqlDbDriver.DefaultMsSqlDbOptions, ConnString);

            _app.ConnectTo(dbSettings);
        }
コード例 #12
0
        public void DbTypeTimeIsIncorrectlyHandledAsDateTime()
        {
            var sqlQuery = new SqlQuery(
                "SELECT * FROM [Table] WHERE [TimeStamp] > @p0",
                new SqlArgument(new TimeSpan(5, 30, 1), DbType.Time));

            var mockDbProviderFactory = new Mock <DbProviderFactory>();

            mockDbProviderFactory.Setup(x => x.CreateCommand()).Returns(new System.Data.SqlClient.SqlCommand());

            var dbDriver = new MsSqlDbDriver();

            dbDriver.DbProviderFactory = mockDbProviderFactory.Object;

            var command = (System.Data.SqlClient.SqlCommand)dbDriver.BuildCommand(sqlQuery);

            Assert.Equal(SqlDbType.Time, command.Parameters[0].SqlDbType);
        }
コード例 #13
0
        public void BuildCommandForSqlQueryWithStoredProcedureWithoutParameters()
        {
            var sqlQuery = new SqlQuery("EXEC GetTableContents");

            var mockDbProviderFactory = new Mock <DbProviderFactory>();

            mockDbProviderFactory.Setup(x => x.CreateCommand()).Returns(new System.Data.SqlClient.SqlCommand());

            var dbDriver = new MsSqlDbDriver();

            dbDriver.DbProviderFactory = mockDbProviderFactory.Object;

            var command = dbDriver.BuildCommand(sqlQuery);

            // The command text should only contain the stored procedure name.
            Assert.Equal("GetTableContents", command.CommandText);
            Assert.Equal(CommandType.StoredProcedure, command.CommandType);
            Assert.Equal(0, command.Parameters.Count);
        }
コード例 #14
0
        private BooksEntityApp CreateBooksEntityApp(string connString)
        {
            // If we are running WebTests, the BooksApp is already setup
            if (BooksEntityApp.Instance != null)
            {
                return(BooksEntityApp.Instance);
            }

            var booksApp = new BooksEntityApp();

            booksApp.Init();

            //connect to db
            var driver     = new MsSqlDbDriver();
            var dbOptions  = driver.GetDefaultOptions();
            var dbSettings = new DbSettings(driver, dbOptions, connString, upgradeMode: DbUpgradeMode.Always);

            booksApp.ConnectTo(dbSettings);
            return(booksApp);
        }
コード例 #15
0
ファイル: Global.asax.cs プロジェクト: kouweizhong/vita
        public static BooksEntityApp CreateConfigureBooksApp()
        {
            // set up application
            var protectedSection = (NameValueCollection)ConfigurationManager.GetSection("protected");
            var cryptoKey        = protectedSection["LoginInfoCryptoKey"];
            var booksApp         = new BooksEntityApp(cryptoKey);

            booksApp.Init();
            var connString    = protectedSection["MsSqlConnectionString"];
            var logConnString = protectedSection["MsSqlLogConnectionString"];
            var driver        = MsSqlDbDriver.Create(connString);
            var dbOptions     = MsSqlDbDriver.DefaultMsSqlDbOptions;
            var logDbSettings = new DbSettings(driver, dbOptions, logConnString);

            booksApp.LoggingApp.ConnectTo(logDbSettings);
            var dbSettings = new DbSettings(driver, dbOptions, connString, upgradeMode: DbUpgradeMode.Always);

            booksApp.ConnectTo(dbSettings);
            //Web Api
            WebHelper.ConfigureWebApi(GlobalConfiguration.Configuration, booksApp, logLevel: Entities.Services.LogLevel.Details

                                      );
            return(booksApp);
        }
コード例 #16
0
ファイル: _Startup.cs プロジェクト: ibrahim-elsakka/vita
        public static void InitImpl()
        {
            if (BooksApp != null)
            {
                return;
            }
            LoadAppConfig();
            LogFilePath = AppConfiguration["LogFilePath"];
            if (File.Exists(LogFilePath))
            {
                File.Delete(LogFilePath);
            }

            BooksApp         = new BooksEntityApp();
            BooksApp.LogPath = LogFilePath;
            //Add mock email/sms service
            // NotificationListener = new NotificationListener(BooksApp, blockAll: true);
            // Setup mock messaging service
            LoginMessagingService = new MockLoginMessagingService();
            var loginConfig = BooksApp.GetConfig <Modules.Login.LoginModuleSettings>();

            loginConfig.MessagingService = LoginMessagingService;
            BooksApp.Init();
            //connect to database
            var driver     = new MsSqlDbDriver();
            var dbOptions  = MsSqlDbDriver.DefaultMsSqlDbOptions;
            var connString = AppConfiguration["MsSqlConnectionString"];
            var dbSettings = new DbSettings(driver, dbOptions, connString, upgradeMode: DbUpgradeMode.Always); // schemas);

            BooksApp.ConnectTo(dbSettings);

            // Logging app
            LoggingApp = new DbLoggingEntityApp();
            LoggingApp.ListenTo(BooksApp);
            var logConnString = AppConfiguration["MsSqlLogConnectionString"];
            var logDbSettings = new DbSettings(driver, dbOptions, logConnString, upgradeMode: DbUpgradeMode.Always); // schemas);

            LoggingApp.ConnectTo(logDbSettings);

            // create sample data
            DataUtility.DeleteAllData(BooksApp,
                                      exceptEntities: new Type[] { typeof(IDbInfo), typeof(IDbModuleInfo) });
            SampleDataGenerator.CreateUnitTestData(BooksApp);

            // Start service
            var serviceUrl = AppConfiguration["ServiceUrl"];

            StartService(serviceUrl);
            // create client
            var useXml = false;

            if (useXml)
            {
                var clientSettings = new RestClientSettings(serviceUrl, serializer: new XmlContentSerializer(), badRequestContentType: typeof(string)); // typeof(List<ClientFault>));
                Client = new RestClient(clientSettings);
            }
            else
            {
                Client = new RestClient(serviceUrl, badRequestContentType: typeof(List <ClientFault>)); //json, very simple setup
            }
            RestClient.SharedHttpClientHandler.AllowAutoRedirect = false;                               //we need it for Redirect test
            // Setup handler converting BadRequestException into ClientFaultException, with list of faults already converted
            Client.Settings.Events.ReceivedError += (s, e) => {
                if (e.CallData.Exception is BadRequestException bre)
                {
                    e.CallData.Exception = new ClientFaultException((IList <ClientFault>)bre.Details);
                }
            };
        }
コード例 #17
0
        public void SupportsBatchedQueriesReturnsTrue()
        {
            var dbDriver = new MsSqlDbDriver();

            Assert.True(dbDriver.SupportsBatchedQueries);
        }