예제 #1
0
        public async Task BeginTransactionAsync_SerializableIsolationLevel_IsolationLevelMatchesExpected()
        {
            var mockDatabaseFactory = new Mock <IDatabaseContextFactory>();
            var mockDatabaseContext = new Mock <IDatabaseContext>();

            mockDatabaseFactory.Setup(factory => factory.Create()).Returns(mockDatabaseContext.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockDatabaseContext.Setup(context => context.Connection).Returns(mockConnection.Object);
            var repositoryAdapter = new Mock <IRepositoryAdapter>();

            repositoryAdapter.Setup(adapter => adapter.DefinitionProvider).Returns(new DataAnnotationsDefinitionProvider());
            mockDatabaseContext.Setup(context => context.RepositoryAdapter).Returns(repositoryAdapter.Object);
            mockDatabaseContext.Setup(context => context.BeginTransactionAsync(It.IsAny <IsolationLevel>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(
                (IsolationLevel i, CancellationToken c) =>
            {
                var transaction = new Mock <ITransactionContext>();
                transaction.Setup(dbTransaction => dbTransaction.IsolationLevel).Returns(i);
                return(transaction.Object);
            });

            var databaseFactory = mockDatabaseFactory.Object;

            using (var target = new DatabaseRepositoryProvider(databaseFactory))
            {
                var actual = await target.BeginTransactionAsync(IsolationLevel.Serializable, CancellationToken.None);

                Assert.AreEqual(IsolationLevel.Serializable, actual.IsolationLevel);
            }
        }
예제 #2
0
        public void BeginTransaction_TransactionWithIsolationLevel_ReturnsTransactionWithExpectedIsolationLevel()
        {
            var mockDatabaseFactory = new Mock <IDatabaseContextFactory>();
            var mockDatabaseContext = new Mock <IDatabaseContext>();

            mockDatabaseFactory.Setup(factory => factory.Create()).Returns(mockDatabaseContext.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockDatabaseContext.Setup(context => context.Connection).Returns(mockConnection.Object);
            var repositoryAdapter = new Mock <IRepositoryAdapter>();

            repositoryAdapter.Setup(adapter => adapter.DefinitionProvider).Returns(new DataAnnotationsDefinitionProvider());
            mockDatabaseContext.Setup(context => context.RepositoryAdapter).Returns(repositoryAdapter.Object);
            mockDatabaseContext.Setup(context => context.BeginTransaction(It.IsAny <IsolationLevel>()))
            .Returns(
                (IsolationLevel i) =>
            {
                var transaction = new Mock <ITransactionContext>();
                transaction.Setup(dbTransaction => dbTransaction.IsolationLevel).Returns(i);
                return(transaction.Object);
            });

            var databaseFactory = mockDatabaseFactory.Object;

            using (var target = new DatabaseRepositoryProvider(databaseFactory))
            {
                var actual = target.BeginTransaction(IsolationLevel.Serializable);
                Assert.AreEqual(IsolationLevel.Serializable, actual.IsolationLevel);
            }
        }
예제 #3
0
        public void Insert_NonIdentityKey_MatchesExpected()
        {
            var mockDatabaseFactory = new Mock <IDatabaseContextFactory>();
            var mockDatabaseContext = new Mock <IDatabaseContext>();

            mockDatabaseFactory.Setup(factory => factory.Create()).Returns(mockDatabaseContext.Object);

            var repositoryAdapter = new Mock <IRepositoryAdapter>();

            mockDatabaseContext.Setup(context => context.RepositoryAdapter).Returns(repositoryAdapter.Object);

            var definitionProvider = new DataAnnotationsDefinitionProvider();

            repositoryAdapter.Setup(compiler => compiler.CreateInsertionStatement <DependentRow>()).Returns(string.Empty);
            repositoryAdapter.Setup(adapter => adapter.DefinitionProvider).Returns(definitionProvider);

            var databaseFactory = mockDatabaseFactory.Object;

            using (var target = new DatabaseRepositoryProvider(databaseFactory))
            {
                var expected = new DependentRow
                {
                    FakeDependentEntityId = 234,
                    DependentIntegerValue = 4583,
                    DependentTimeValue    = DateTimeOffset.Now
                };

                var actual = target.Insert(expected);
                Assert.AreSame(expected, actual);
            }
        }
예제 #4
0
        public void ChangeDatabase_DatabaseRepositoryProvider_DatabaseChanged()
        {
            var mockDatabaseFactory = new Mock <IDatabaseContextFactory>();
            var mockDatabaseContext = new Mock <IDatabaseContext>();

            mockDatabaseFactory.Setup(factory => factory.Create()).Returns(mockDatabaseContext.Object);

            var mockConnection = new Mock <IDbConnection>();

            mockDatabaseContext.Setup(context => context.Connection).Returns(mockConnection.Object);
            var repositoryAdapter = new Mock <IRepositoryAdapter>();

            repositoryAdapter.Setup(adapter => adapter.DefinitionProvider).Returns(new DataAnnotationsDefinitionProvider());
            mockDatabaseContext.Setup(context => context.RepositoryAdapter).Returns(repositoryAdapter.Object);
            mockDatabaseContext.Setup(context => context.ChangeDatabase(It.IsAny <string>()))
            .Callback((string s) => { mockConnection.Setup(connection => connection.Database).Returns(s); });

            var databaseFactory = mockDatabaseFactory.Object;

            using (var target = new DatabaseRepositoryProvider(databaseFactory))
            {
                target.DatabaseContext.ChangeDatabase("newDatabase");
                Assert.AreEqual("newDatabase", target.DatabaseContext.Connection.Database);
            }
        }
예제 #5
0
        public void Insert_IdentityPrimaryKey_PrimaryKeyIsSet()
        {
            var mockDatabaseFactory = new Mock <IDatabaseContextFactory>();
            var mockDatabaseContext = new Mock <IDatabaseContext>();

            mockDatabaseFactory.Setup(factory => factory.Create()).Returns(mockDatabaseContext.Object);

            var repositoryAdapter = new Mock <IRepositoryAdapter>();

            mockDatabaseContext.Setup(context => context.RepositoryAdapter).Returns(repositoryAdapter.Object);

            var definitionProvider = new DataAnnotationsDefinitionProvider();

            repositoryAdapter.Setup(compiler => compiler.CreateInsertionStatement <DependentRow>()).Returns(string.Empty);
            repositoryAdapter.Setup(adapter => adapter.DefinitionProvider).Returns(definitionProvider);
            mockDatabaseContext.Setup(context => context.ExecuteScalar <object>(It.IsAny <string>(), It.IsAny <object[]>())).Returns(234);

            var databaseFactory = mockDatabaseFactory.Object;

            using (var target = new DatabaseRepositoryProvider(databaseFactory))
            {
                var expected = new ComplexRaisedRow
                {
                    CreatedByFakeMultiReferenceEntityId  = 87354,
                    ModifiedByFakeMultiReferenceEntityId = 34598,
                    FakeEnumerationId      = 8,
                    FakeOtherEnumerationId = 4,
                    UniqueName             = "MyUniqueName",
                    Description            = "Some Stuff!",
                    FakeSubEntityId        = 4598,
                    CreationTime           = DateTimeOffset.Now,
                    ModifiedTime           = DateTimeOffset.Now
                };

                var actual = target.Insert(expected);

                Assert.AreSame(expected, actual);
                Assert.AreEqual(234, expected.ComplexEntityId);
            }
        }