public void AllCreatesASelectAllQueryExecutesAndReturnsResults()
        {
            var mockSqlDialect = new Mock<ISqlDialect>();
            mockSqlDialect.Setup(x => x.SqlCharacters).Returns(SqlCharacters.Empty);

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);
            mockReader.As<IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock<IDbConnection>();
            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customers = session.Include.All<Customer>();

            session.ExecutePendingQueries();

            Assert.Equal(1, customers.Values.Count);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
Exemple #2
0
            public WhenExecutingMultipleQueriesAndTheSqlDialectUsedDoesNotSupportBatching()
            {
                var mockSqlDialect = new Mock <ISqlDialect>();

                mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull <IObjectInfo>(), It.IsNotNull <object>())).Returns(new SqlQuery(""));

                mockCommand.Setup(x => x.ExecuteReader(It.IsAny <CommandBehavior>())).Returns(() =>
                {
                    var mockReader = new Mock <IDataReader>();
                    mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);

                    return(mockReader.Object);
                });

                mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

                mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object));
                mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(false);

                var session = new ReadOnlySession(
                    ConnectionScope.PerTransaction,
                    mockSqlDialect.Object,
                    mockDbDriver.Object);

                var includeCustomer = session.Include.Single <Customer>(2);
                var customer        = session.SingleAsync <Customer>(1).Result;
            }
Exemple #3
0
 internal static IReadOnlyWebSocketMessage Convert(Spi.Entities.WebSocket.IReadOnlyWebSocketMessage source)
 => new ReadOnlyWebSocketMessage
 {
     Source           = source,
     HandshakeSession = ReadOnlySession.Convert(source.HandshakeSession),
     Opcode           = (WebSocketOpcode)source.Opcode,
 };
        public void SingleSqlQueryExecutesAndReturnsNull()
        {
            var mockSqlDialect = new Mock <ISqlDialect>();

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.Read()).Returns(false);
            mockReader.As <IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.Single <Customer>(new SqlQuery(""));

            Assert.Null(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
        }
Exemple #5
0
        public void SingleSqlQueryExecutesAndReturnsResult()
        {
            var mockSqlDialect = new Mock <ISqlDialect>();

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);
            mockReader.As <IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader(It.IsAny <CommandBehavior>())).Returns(mockReader.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object));

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.SingleAsync <Customer>(new SqlQuery("")).Result;

            Assert.NotNull(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
        }
        public void FetchExecutesAndReturnsResults()
        {
            var mockSqlDialect = new Mock <ISqlDialect>();

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);
            mockReader.As <IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customers = session.Fetch <Customer>(new SqlQuery(""));

            Assert.Equal(1, customers.Count);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
            public WhenExecutingTwoQueriesAndTheSqlDialectUsedSupportsBatching()
            {
                var mockSqlDialect = new Mock <ISqlDialect>();

                mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull <IObjectInfo>(), It.IsNotNull <object>())).Returns(new SqlQuery(""));

                this.mockDbDriver.Setup(x => x.Combine(It.IsNotNull <SqlQuery>(), It.IsNotNull <SqlQuery>())).Returns(new SqlQuery(""));

                var mockReader = new Mock <IDataReader>();

                mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);

                var mockCommand = new Mock <IDbCommand>();

                mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

                var mockConnection = new Mock <IDbConnection>();

                mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

                mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);
                mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(true);

                var session = new ReadOnlySession(
                    ConnectionScope.PerTransaction,
                    mockSqlDialect.Object,
                    mockDbDriver.Object);

                var includeCustomer = session.Include.Single <Customer>(2);
                var customer        = session.Single <Customer>(1);
            }
        public void IncludeReturnsSameSessionByDifferentInterface()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            var includeSession = session.Include;

            Assert.Same(session, includeSession);
        }
        public void AdvancedReturnsSameSessionByDifferentInterface()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            var advancedSession = session.Advanced;

            Assert.Same(session, advancedSession);
        }
        public void AdvancedReturnsSameSessionByDifferentInterface()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            var advancedSession = session.Advanced;

            Assert.Same(session, advancedSession);
        }
Exemple #11
0
        public void FetchThrowsArgumentNullExceptionForNullSqlQuery()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            var exception = Assert.Throws <ArgumentNullException>(
                () => session.FetchAsync <Customer>(null).Result);

            Assert.Equal("sqlQuery", exception.ParamName);
        }
        public void PagedThrowsArgumentNullExceptionForNullSqlQuery()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            var exception = Assert.Throws <ArgumentNullException>(
                () => session.Paged <Customer>(null, PagingOptions.ForPage(1, 25)));

            Assert.Equal("sqlQuery", exception.ParamName);
        }
            public void AMicroLiteExceptionIsThrown()
            {
                var session = new ReadOnlySession(
                    ConnectionScope.PerTransaction,
                    new Mock <ISqlDialect>().Object,
                    new Mock <IDbDriver>().Object);

                var exception = Assert.Throws <MicroLiteException>(
                    () => session.Paged <Customer>(new SqlQuery(""), PagingOptions.None));

                Assert.Equal(ExceptionMessages.Session_PagingOptionsMustNotBeNone, exception.Message);
            }
Exemple #14
0
        public void SingleSqlQueryThrowsObjectDisposedExceptionIfDisposed()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            using (session)
            {
            }

            Assert.Throws <ObjectDisposedException>(() => session.SingleAsync <Customer>(new SqlQuery("")).Result);
        }
Exemple #15
0
        public void PagedThrowsObjectDisposedExceptionIfDisposed()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            using (session)
            {
            }

            Assert.Throws <ObjectDisposedException>(() => session.PagedAsync <Customer>(null, PagingOptions.ForPage(1, 25)).Result);
        }
        public void SingleIdentifierThrowsObjectDisposedExceptionIfDisposed()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            using (session)
            {
            }

            Assert.Throws <ObjectDisposedException>(
                () => session.Single <Customer>(1));
        }
        public void SingleSqlQueryThrowsArgumentNullExceptionForNullSqlQuery()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            SqlQuery sqlQuery = null;

            var exception = Assert.Throws <ArgumentNullException>(
                () => session.Single <Customer>(sqlQuery));

            Assert.Equal("sqlQuery", exception.ParamName);
        }
        public void SingleIdentifierThrowsArgumentNullExceptionForNullIdentifier()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock <ISqlDialect>().Object,
                new Mock <IDbDriver>().Object);

            object identifier = null;

            var exception = Assert.Throws <ArgumentNullException>(
                () => session.Single <Customer>(identifier));

            Assert.Equal("identifier", exception.ParamName);
        }
        public void PagedExecutesAndReturnsResultsForTenthPageWithTwentyFivePerPage()
        {
            var sqlQuery      = new SqlQuery("SELECT * FROM TABLE");
            var countQuery    = new SqlQuery("SELECT COUNT(*) FROM TABLE");
            var pagedQuery    = new SqlQuery("SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS MicroLiteRowNumber FROM Customers) AS Customers");
            var combinedQuery = new SqlQuery("SELECT COUNT(*) FROM TABLE;SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS MicroLiteRowNumber FROM Customers) AS Customers");

            var mockSqlDialect = new Mock <ISqlDialect>();

            mockSqlDialect.Setup(x => x.CountQuery(sqlQuery)).Returns(countQuery);
            mockSqlDialect.Setup(x => x.PageQuery(sqlQuery, PagingOptions.ForPage(10, 25))).Returns(pagedQuery);

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.FieldCount).Returns(new Queue <int>(new[] { 1, 0 }).Dequeue);
            mockReader.Setup(x => x[0]).Returns(1000); // Simulate 1000 records in the count query
            mockReader.Setup(x => x.NextResult()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);
            mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false, true, false }).Dequeue);
            mockReader.As <IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);
            mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(true);
            mockDbDriver.Setup(x => x.Combine(countQuery, pagedQuery)).Returns(combinedQuery);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var page = session.Paged <Customer>(sqlQuery, PagingOptions.ForPage(10, 25));

            Assert.Equal(10, page.Page);
            Assert.Equal(1, page.Results.Count);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
Exemple #20
0
        public void SessionTest()
        {
            var requestLineSource =
                @"GET / HTTP/1.1
";

            Nekoxy2.ApplicationLayer.Entities.Http.HttpRequestLine.TryParse(requestLineSource, out var line);
            var requestHeaderSource =
                @"Host: example.com

";

            Nekoxy2.ApplicationLayer.Entities.Http.HttpHeaders.TryParse(requestHeaderSource, out var requestHeaders);

            var spiRequest = new Nekoxy2.ApplicationLayer.Entities.Http.HttpRequest(line, requestHeaders, new byte[0], Nekoxy2.ApplicationLayer.Entities.Http.HttpHeaders.Empty);

            var statusLineSource =
                @"HTTP/1.1 200 OK
";

            Nekoxy2.ApplicationLayer.Entities.Http.HttpStatusLine.TryParse(statusLineSource, out var statusLine);
            var responseHeaderSource =
                @"Content-Length: 8

";

            Nekoxy2.ApplicationLayer.Entities.Http.HttpHeaders.TryParse(responseHeaderSource, out var responseHeaders);
            var responseBodySource = "hogefuga";

            var spiResponse = new Nekoxy2.ApplicationLayer.Entities.Http.HttpResponse(statusLine, responseHeaders, Encoding.ASCII.GetBytes(responseBodySource), Nekoxy2.ApplicationLayer.Entities.Http.HttpHeaders.Empty);

            var spiSession  = new Nekoxy2.ApplicationLayer.Entities.Http.Session(spiRequest, spiResponse);
            var apiSession  = ReadOnlySession.Convert(spiSession);
            var apiSession2 = ReadOnlySession.Convert(spiSession);

            apiSession.ToString().Is(spiSession.ToString());
            apiSession.GetHashCode().Is(apiSession2.GetHashCode());
            apiSession.Equals(apiSession2).IsTrue();

            (apiSession is Spi.Entities.Http.IReadOnlySession).IsTrue();
            (apiSession is Nekoxy2.Entities.Http.IReadOnlySession).IsTrue();
            apiSession.Source.Is(spiSession);
        }
        public void MicroLiteExceptionsCaughtByExecutePendingQueriesShouldNotBeWrappedInAnotherMicroLiteException()
        {
            var mockSqlDialect = new Mock <ISqlDialect>();

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.BuildCommand(It.IsNotNull <IDbCommand>(), It.IsNotNull <SqlQuery>())).Throws <MicroLiteException>();

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            // We need at least 1 queued query otherwise we will get an exception when doing queries.Dequeue() instead.
            session.Include.Scalar <int>(new SqlQuery(""));

            var exception = Assert.Throws <MicroLiteException>(() => session.ExecutePendingQueries());

            Assert.IsNotType <MicroLiteException>(exception.InnerException);
        }
Exemple #22
0
        public void IncludeScalarSqlQueryExecutesAndReturnsResult()
        {
            var sqlQuery = new SqlQuery("");

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.FieldCount).Returns(1);
            mockReader.Setup(x => x[0]).Returns(10);
            mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);
            mockReader.As <IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);
            mockCommand.As <IDisposable>().Setup(x => x.Dispose());

            var mockConnection = new Mock <IDbConnection>();

            var mockSqlDialect = new Mock <ISqlDialect>();

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);
            mockDbDriver.Setup(x => x.BuildCommand(sqlQuery)).Returns(mockCommand.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var includeScalar = session.Include.Scalar <int>(sqlQuery);

            session.ExecutePendingQueries();

            Assert.Equal(10, includeScalar.Value);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void AllCreatesASelectAllQueryExecutesAndReturnsResults()
        {
            var mockSqlDialect = new Mock <ISqlDialect>();

            mockSqlDialect.Setup(x => x.SqlCharacters).Returns(SqlCharacters.Empty);

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);
            mockReader.As <IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customers = session.Include.All <Customer>();

            session.ExecutePendingQueries();

            Assert.Equal(1, customers.Values.Count);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void SingleIdentifierExecutesAndReturnsResult()
        {
            object identifier = 100;

            var mockSqlDialect = new Mock <ISqlDialect>();

            mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull <IObjectInfo>(), identifier)).Returns(new SqlQuery(""));

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.Read()).Returns(new Queue <bool>(new[] { true, false }).Dequeue);
            mockReader.As <IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.Single <Customer>(identifier);

            Assert.NotNull(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
Exemple #25
0
        public void SingleIdentifierExecutesAndReturnsNull()
        {
            object identifier = 100;

            var mockSqlDialect = new Mock <ISqlDialect>();

            mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull <IObjectInfo>(), identifier)).Returns(new SqlQuery(""));

            var mockReader = new Mock <IDataReader>();

            mockReader.Setup(x => x.Read()).Returns(false);

            var mockCommand = new Mock <IDbCommand>();

            mockCommand.Setup(x => x.ExecuteReader(It.IsAny <CommandBehavior>())).Returns(mockReader.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock <IDbDriver>();

            mockDbDriver.Setup(x => x.CreateConnection()).Returns(new MockDbConnectionWrapper(mockConnection.Object));

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.SingleAsync <Customer>(identifier).Result;

            Assert.Null(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void PagedExecutesAndReturnsResultsForTenthPageWithTwentyFivePerPage()
        {
            var sqlQuery = new SqlQuery("SELECT * FROM TABLE");
            var countQuery = new SqlQuery("SELECT COUNT(*) FROM TABLE");
            var pagedQuery = new SqlQuery("SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RowNumber FROM Customers) AS Customers");
            var combinedQuery = new SqlQuery("SELECT COUNT(*) FROM TABLE;SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RowNumber FROM Customers) AS Customers");

            var mockSqlDialect = new Mock<ISqlDialect>();
            mockSqlDialect.Setup(x => x.CountQuery(sqlQuery)).Returns(countQuery);
            mockSqlDialect.Setup(x => x.PageQuery(sqlQuery, PagingOptions.ForPage(10, 25))).Returns(pagedQuery);

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.FieldCount).Returns(new Queue<int>(new[] { 1, 0 }).Dequeue);
            mockReader.Setup(x => x[0]).Returns(1000); // Simulate 1000 records in the count query
            mockReader.Setup(x => x.NextResult()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);
            mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false, true, false }).Dequeue);
            mockReader.As<IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock<IDbConnection>();
            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);
            mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(true);
            mockDbDriver.Setup(x => x.Combine(countQuery, pagedQuery)).Returns(combinedQuery);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var page = session.Paged<Customer>(sqlQuery, PagingOptions.ForPage(10, 25));

            Assert.Equal(10, page.Page);
            Assert.Equal(1, page.Results.Count);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void IncludeReturnsSameSessionByDifferentInterface()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            var includeSession = session.Include;

            Assert.Same(session, includeSession);
        }
        public void PagedThrowsArgumentNullExceptionForNullSqlQuery()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            var exception = Assert.Throws<ArgumentNullException>(
                () => session.Paged<Customer>(null, PagingOptions.ForPage(1, 25)));

            Assert.Equal("sqlQuery", exception.ParamName);
        }
        public void IncludeScalarSqlQueryExecutesAndReturnsResult()
        {
            var mockSqlDialect = new Mock<ISqlDialect>();

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.FieldCount).Returns(1);
            mockReader.Setup(x => x[0]).Returns(10);
            mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);
            mockReader.As<IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock<IDbConnection>();
            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var includeScalar = session.Include.Scalar<int>(new SqlQuery(""));

            session.ExecutePendingQueries();

            Assert.Equal(10, includeScalar.Value);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void SingleIdentifierExecutesAndReturnsResult()
        {
            object identifier = 100;

            var mockSqlDialect = new Mock<ISqlDialect>();
            mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull<IObjectInfo>(), identifier)).Returns(new SqlQuery(""));

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);
            mockReader.As<IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock<IDbConnection>();
            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.Single<Customer>(identifier);

            Assert.NotNull(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void PagedThrowsObjectDisposedExceptionIfDisposed()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            using (session)
            {
            }

            Assert.Throws<ObjectDisposedException>(
                () => session.Paged<Customer>(null, PagingOptions.ForPage(1, 25)));
        }
        public void SingleSqlQueryExecutesAndReturnsResult()
        {
            var sqlQuery = new SqlQuery("");

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);
            var reader = mockReader.Object;

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(reader);
            mockCommand.As<IDisposable>().Setup(x => x.Dispose());

            var mockConnection = new Mock<IDbConnection>();

            var mockSqlDialect = new Mock<ISqlDialect>();

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.GetConnection(ConnectionScope.PerTransaction)).Returns(mockConnection.Object);
            mockDbDriver.Setup(x => x.BuildCommand(sqlQuery)).Returns(mockCommand.Object);

            IReadOnlySession session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.Single<Customer>(sqlQuery);

            Assert.NotNull(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
        }
        public void SingleIdentifierExecutesAndReturnsNull()
        {
            object identifier = 100;

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.Read()).Returns(false);
            var reader = mockReader.Object;

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(reader);
            mockCommand.As<IDisposable>().Setup(x => x.Dispose());

            var mockConnection = new Mock<IDbConnection>();

            var mockSqlDialect = new Mock<ISqlDialect>();
            mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull<IObjectInfo>(), identifier)).Returns(new SqlQuery(""));

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.GetConnection(ConnectionScope.PerTransaction)).Returns(mockConnection.Object);
            mockDbDriver.Setup(x => x.BuildCommand(It.IsNotNull<SqlQuery>())).Returns(mockCommand.Object);

            IReadOnlySession session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.Single<Customer>(identifier);

            Assert.Null(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void SingleIdentifierThrowsArgumentNullExceptionForNullIdentifier()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            object identifier = null;

            var exception = Assert.Throws<ArgumentNullException>(
                () => session.Single<Customer>(identifier));

            Assert.Equal("identifier", exception.ParamName);
        }
            public WhenExecutingMultipleQueriesAndTheSqlDialectUsedDoesNotSupportBatching()
            {
                var mockSqlDialect = new Mock<ISqlDialect>();
                mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull<IObjectInfo>(), It.IsNotNull<object>())).Returns(new SqlQuery(""));

                mockDbDriver.Setup(x => x.GetConnection(ConnectionScope.PerTransaction)).Returns(new Mock<IDbConnection>().Object);
                mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(false);
                mockDbDriver.Setup(x => x.BuildCommand(It.IsNotNull<SqlQuery>())).Returns(() =>
                {
                    var mockCommand = new Mock<IDbCommand>();
                    mockCommand.Setup(x => x.ExecuteReader()).Returns(() =>
                    {
                        var mockReader = new Mock<IDataReader>();
                        mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);

                        return mockReader.Object;
                    });

                    return mockCommand.Object;
                });

                IReadOnlySession session = new ReadOnlySession(
                    ConnectionScope.PerTransaction,
                    mockSqlDialect.Object,
                    mockDbDriver.Object);

                var includeCustomer = session.Include.Single<Customer>(2);
                var customer = session.Single<Customer>(1);
            }
        public void Export(ExportConfiguration configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            if (string.IsNullOrWhiteSpace(configuration.SourceFileNamePath))
            {
                throw new ArgumentNullException("SourceFileNamePath");
            }

            //See if the local file even exists..
            Console.WriteLine("Opening Source File '{0}'...", configuration.SourceFileNamePath);
            using (var sourceFileStream = File.OpenRead(configuration.SourceFileNamePath))
            {
                if (GLFReader.IsGLF(sourceFileStream) == false)
                {
                    throw new InvalidOperationException("Specified source file is not a Loupe Log file (glf)");
                }

                var sessionCollection = new SessionCollection();
                var session           = sessionCollection.Add(sourceFileStream);

                if (session == null)
                {
                    throw new InvalidOperationException("Unable to find session data in source data file");
                }

                Console.WriteLine("Initializing {0} Export...", configuration.LogMessageFormat);
                using (session)
                {
                    //instance the correct exporter...
                    LogMessageFormatter messageFormatter;
                    switch (configuration.LogMessageFormat)
                    {
                    case LogMessageFormat.Default:
                        messageFormatter = new DefaultLogMessageFormatter(configuration);
                        break;

                    case LogMessageFormat.Summary:
                        messageFormatter = new SummaryLogMessageFormatter(configuration);
                        break;

                    case LogMessageFormat.Detailed:
                        messageFormatter = new DetailedLogMessageFormatter(configuration);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    ISession readOnlySession = new ReadOnlySession(session);

                    var stopwatch = Stopwatch.StartNew();
                    Console.WriteLine("Exporting Session Data into '{0}'...", configuration.TargetFileNamePath);

                    messageFormatter.Export(readOnlySession);

                    stopwatch.Stop();
                    Console.WriteLine("Completed export in {0:T}.", stopwatch.Elapsed);
                }
            }
        }
        public void SingleSqlQueryThrowsArgumentNullExceptionForNullSqlQuery()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            SqlQuery sqlQuery = null;

            var exception = Assert.Throws<ArgumentNullException>(
                () => session.Single<Customer>(sqlQuery));

            Assert.Equal("sqlQuery", exception.ParamName);
        }
        public void SingleSqlQueryThrowsObjectDisposedExceptionIfDisposed()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            using (session)
            {
            }

            Assert.Throws<ObjectDisposedException>(
                () => session.Single<Customer>(new SqlQuery("")));
        }
            public void AMicroLiteExceptionIsThrown()
            {
                var session = new ReadOnlySession(
                    ConnectionScope.PerTransaction,
                    new Mock<ISqlDialect>().Object,
                    new Mock<IDbDriver>().Object);

                var exception = Assert.Throws<MicroLiteException>(
                    () => session.Paged<Customer>(new SqlQuery(""), PagingOptions.None));

                Assert.Equal(ExceptionMessages.Session_PagingOptionsMustNotBeNone, exception.Message);
            }
        public void MicroLiteExceptionsCaughtByExecutePendingQueriesShouldNotBeWrappedInAnotherMicroLiteException()
        {
            var mockSqlDialect = new Mock<ISqlDialect>();

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.BuildCommand(It.IsNotNull<IDbCommand>(), It.IsNotNull<SqlQuery>())).Throws<MicroLiteException>();

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            // We need at least 1 queued query otherwise we will get an exception when doing queries.Dequeue() instead.
            session.Include.Scalar<int>(new SqlQuery(""));

            var exception = Assert.Throws<MicroLiteException>(() => session.ExecutePendingQueries());

            Assert.IsNotType<MicroLiteException>(exception.InnerException);
        }
            public WhenExecutingTwoQueriesAndTheSqlDialectUsedSupportsBatching()
            {
                var mockSqlDialect = new Mock<ISqlDialect>();
                mockSqlDialect.Setup(x => x.BuildSelectSqlQuery(It.IsNotNull<IObjectInfo>(), It.IsNotNull<object>())).Returns(new SqlQuery(""));

                this.mockDbDriver.Setup(x => x.Combine(It.IsNotNull<SqlQuery>(), It.IsNotNull<SqlQuery>())).Returns(new SqlQuery(""));

                var mockReader = new Mock<IDataReader>();
                mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);

                var mockCommand = new Mock<IDbCommand>();
                mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

                var mockConnection = new Mock<IDbConnection>();
                mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

                mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);
                mockDbDriver.Setup(x => x.SupportsBatchedQueries).Returns(true);

                var session = new ReadOnlySession(
                    ConnectionScope.PerTransaction,
                    mockSqlDialect.Object,
                    mockDbDriver.Object);

                var includeCustomer = session.Include.Single<Customer>(2);
                var customer = session.Single<Customer>(1);
            }
        public void FetchExecutesAndReturnsResults()
        {
            var mockSqlDialect = new Mock<ISqlDialect>();

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.Read()).Returns(new Queue<bool>(new[] { true, false }).Dequeue);
            mockReader.As<IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock<IDbConnection>();
            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customers = session.Fetch<Customer>(new SqlQuery(""));

            Assert.Equal(1, customers.Count);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
            mockSqlDialect.VerifyAll();
        }
        public void SingleSqlQueryExecutesAndReturnsNull()
        {
            var mockSqlDialect = new Mock<ISqlDialect>();

            var mockReader = new Mock<IDataReader>();
            mockReader.Setup(x => x.Read()).Returns(false);
            mockReader.As<IDisposable>().Setup(x => x.Dispose());

            var mockCommand = new Mock<IDbCommand>();
            mockCommand.Setup(x => x.ExecuteReader()).Returns(mockReader.Object);

            var mockConnection = new Mock<IDbConnection>();
            mockConnection.Setup(x => x.CreateCommand()).Returns(mockCommand.Object);

            var mockDbDriver = new Mock<IDbDriver>();
            mockDbDriver.Setup(x => x.CreateConnection()).Returns(mockConnection.Object);

            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                mockSqlDialect.Object,
                mockDbDriver.Object);

            var customer = session.Single<Customer>(new SqlQuery(""));

            Assert.Null(customer);

            mockReader.VerifyAll();
            mockCommand.VerifyAll();
            mockConnection.VerifyAll();
        }
        public void FetchThrowsObjectDisposedExceptionIfDisposed()
        {
            var session = new ReadOnlySession(
                ConnectionScope.PerTransaction,
                new Mock<ISqlDialect>().Object,
                new Mock<IDbDriver>().Object);

            using (session)
            {
            }

            Assert.Throws<ObjectDisposedException>(
                () => session.Fetch<Customer>(null));
        }