コード例 #1
0
        public void Test_CommitTransaction_WithAutoIncrementBo_ShouldUseNumberGeneratorsInDatastore()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            IClassDef classDef = TestAutoInc.LoadClassDefWithAutoIncrementingID();

            DataStoreInMemory dataStore = MockRepository.GeneratePartialMock <DataStoreInMemory>();

            dataStore.Replay();

            int nextAutoIncNumber = TestUtil.GetRandomInt();

            dataStore.Stub(t => t.GetNextAutoIncrementingNumber(classDef)).Return(nextAutoIncNumber);

            ITransactionCommitter transactionCommitter = new TransactionCommitterInMemory(dataStore);

            TestAutoInc bo = new TestAutoInc();

            bo.SetPropertyValue("testfield", "testing 123");
            transactionCommitter.AddBusinessObject(bo);
            //---------------Assert Precondition----------------
            Assert.IsFalse(bo.TestAutoIncID.HasValue);
            Assert.AreSame(classDef, bo.ClassDef);
            Assert.IsTrue(bo.Props.HasAutoIncrementingField);
            //---------------Execute Test ----------------------
            transactionCommitter.CommitTransaction();
            //---------------Test Result -----------------------
            dataStore.AssertWasCalled(memory => memory.GetNextAutoIncrementingNumber(classDef));
            Assert.IsNotNull(bo.TestAutoIncID);
            Assert.AreEqual(nextAutoIncNumber, bo.TestAutoIncID);
            Assert.IsFalse(bo.Status.IsDirty);
        }
コード例 #2
0
        public void Test_InitialiseProp_InvalidBusinessObject_IDNotGuid()
        {
            //---------------Set up test pack-------------------
            TestAutoInc.LoadClassDefWithAutoIncrementingID();
            BOProp boProp = new BOProp(_propDef);
            //Use auto incrementing because it is the only bo prop that has
            TestAutoInc bo = new TestAutoInc();

            bo.SetPropertyValue("testautoincid", 1);
            //---------------Assert Precondition----------------
            Assert.IsNull(boProp.Value);
            //---------------Execute Test ----------------------
            try
            {
                boProp.InitialiseProp(bo);
                Assert.Fail("expected Err");
            }
            //---------------Test Result -----------------------
            catch (HabaneroDeveloperException ex)
            {
                StringAssert.Contains(boProp.PropertyName + " cannot be set to " + bo.ToString(), ex.Message);
                StringAssert.Contains("It is not a type of ", ex.Message);
                StringAssert.Contains("Guid", ex.Message);
                Assert.AreEqual(null, boProp.Value);
                Assert.IsTrue(boProp.IsValid);
            }
        }
コード例 #3
0
        public void TestAutoIncrementObj()
        {
            ClassDef.ClassDefs.Clear();
            TestAutoInc.LoadClassDefWithAutoIncrementingID();
            TestAutoInc bo = new TestAutoInc();
            InsertStatementGenerator gen = new InsertStatementGenerator(bo, DatabaseConnection.CurrentConnection);
            var statementCol             = gen.Generate();
            InsertSqlStatement statement = (InsertSqlStatement)statementCol.First();

            Assert.AreSame(typeof(SupportsAutoIncrementingFieldBO), statement.SupportsAutoIncrementingField.GetType());
        }
コード例 #4
0
        public void TestInsertStatementExcludesAutoField_MySql()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            TestAutoInc.LoadClassDefWithAutoIncrementingID();
            TestAutoInc bo = new TestAutoInc();
            InsertStatementGenerator gen = CreateInsertStatementGenerator(bo, DatabaseConfig.MySql);
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            var statementCol = gen.Generate();
            //---------------Test Result -----------------------
            var statement = statementCol.First();

            Assert.AreEqual("INSERT INTO `testautoinc` (`testfield`) VALUES (?Param0)", statement.Statement.ToString());
        }
コード例 #5
0
        public void TestDelimitedTableNameWithSpaces()
        {
            ClassDef.ClassDefs.Clear();
            TestAutoInc.LoadClassDefWithAutoIncrementingID();
            TestAutoInc bo = new TestAutoInc();

            ClassDef.ClassDefs[typeof(TestAutoInc)].TableName = "test autoinc";

            DeleteStatementGenerator gen = new DeleteStatementGenerator(bo, DatabaseConnection.CurrentConnection);
            var           statementCol   = gen.Generate();
            ISqlStatement statement      = statementCol.First();
            var           tableName      = DatabaseConnection.CurrentConnection.SqlFormatter.DelimitTable("test autoinc");

            StringAssert.Contains(tableName, statement.Statement.ToString());
        }
コード例 #6
0
        public void TestGetBusinessObjectByIDIntSavenewAutoIncNumber()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            TestAutoInc.LoadClassDefWithAutoIncrementingID();
            TestAutoInc autoInc = new TestAutoInc();

            autoInc.Save();

            //---------------Execute Test ----------------------
            Criteria    criteria = new Criteria("testautoincid", Criteria.ComparisonOp.Equals, autoInc.TestAutoIncID);
            TestAutoInc tai1     = BORegistry.DataAccessor.BusinessObjectLoader.GetBusinessObject <TestAutoInc>(criteria);
            TestAutoInc tai2     = BORegistry.DataAccessor.BusinessObjectLoader.GetBusinessObject <TestAutoInc>(tai1.ID);

            ////---------------Test Result -----------------------
            Assert.AreSame(tai1, tai2);
            Assert.AreEqual("testing", tai2.TestField);
        }
コード例 #7
0
        public void TestDelimitedTableNameWithSpaces_SqlServer()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            TestAutoInc.LoadClassDefWithAutoIncrementingID();
            TestAutoInc bo = new TestAutoInc();

            bo.Save();
            ClassDef.ClassDefs[typeof(TestAutoInc)].TableName = "test autoinc";
            bo.TestField = TestUtil.GetRandomString();
            var gen = CreateUpdateStatementGenerator(bo, DatabaseConfig.SqlServer);
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var statementCol = gen.Generate();
            //---------------Test Result -----------------------
            ISqlStatement statement = statementCol.First();

            StringAssert.Contains("[test autoinc]", statement.Statement.ToString());
        }
コード例 #8
0
        public void Test_CommitTransaction_WithAutoIncrementBo_ShouldAutoIncrementAfterInsert()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            TestAutoInc.LoadClassDefWithAutoIncrementingID();

            DataStoreInMemory     dataStore            = new DataStoreInMemory();
            ITransactionCommitter transactionCommitter = new TransactionCommitterInMemory(dataStore);

            TestAutoInc bo = new TestAutoInc();

            bo.SetPropertyValue("testfield", "testing 123");
            transactionCommitter.AddBusinessObject(bo);
            //---------------Assert Precondition----------------
            Assert.IsFalse(bo.TestAutoIncID.HasValue);
            //---------------Execute Test ----------------------
            transactionCommitter.CommitTransaction();
            //---------------Test Result -----------------------
            Assert.IsNotNull(bo.TestAutoIncID);
            Assert.AreNotEqual(0, bo.TestAutoIncID);
            Assert.IsFalse(bo.Status.IsDirty);
        }
コード例 #9
0
        public void TestSaveUpdatesAutoIncrementingField()
        {
            //---------------Set up test pack-------------------
            ClassDef.ClassDefs.Clear();
            TestAutoInc.LoadClassDefWithAutoIncrementingID();
            var newIds = new ConcurrentBag <int?>();

            //---------------Execute Test ----------------------
            Parallel.For(0, 1000, i => {
                //---------------Set up test pack-------------------
                var bo = new TestAutoInc();
                bo.SetPropertyValue("testfield", "testing 123");
                //---------------Assert Precondition----------------
                Assert.IsFalse(bo.TestAutoIncID.HasValue);
                //---------------Execute Test ----------------------
                bo.Save();
                //---------------Test Result -----------------------
                newIds.Add(bo.TestAutoIncID);
            });
            //---------------Test Result -----------------------
            Assert.IsTrue(newIds.All(i => i.HasValue));
            Assert.IsTrue(newIds.All(i => i > 0));
            Assert.That(newIds.Distinct().Count(), Is.EqualTo(1000), "Every generated ID must be unique");
        }