public void TestLoadNumberGenClassDef_ShouldAddClassDef_BUGFIX_ShouldBeThreadSafe()
        {
            //---------------Set up test pack-------------------

            //---------------Assert Precondition----------------
            Assert.AreEqual(0, ClassDef.ClassDefs.Count);
            //---------------Execute Test ----------------------
            var exceptions = new List <Exception>();

            TestUtil.ExecuteInParallelThreads(2, () =>
            {
                try
                {
                    BOSequenceNumber.LoadNumberGenClassDef();
                }
                catch (Exception ex)
                {
                    exceptions.Add(ex);
                }
            });

            //---------------Test Result -----------------------
            if (exceptions.Count > 0)
            {
                Assert.Fail(exceptions[0].ToString());
            }
            Assert.AreEqual(1, ClassDef.ClassDefs.Count);
            Assert.IsNotNull(ClassDef.Get <BOSequenceNumber>());
        }
        private static void CleanupNumberGenerator()
        {
            BOSequenceNumber.LoadNumberGenClassDef();
            INumberGenerator numGen = new NumberGenerator("tmp");

            numGen.SetSequenceNumber(0);
        }
        public static void CleanUpContactPersonNumberGenerator_ForInMemory()
        {
            ContactPersonWithNumberGenerator.LoadDefaultClassDef();
            BOSequenceNumber.LoadNumberGenClassDef();
            INumberGenerator numGen = new NumberGenerator("GeneratedNumber");

            numGen.SetSequenceNumber(0);
        }
        public void TestLoadNumberGenClassDef_ShouldAddClassDef()
        {
            //---------------Set up test pack-------------------

            //---------------Assert Precondition----------------
            Assert.AreEqual(0, ClassDef.ClassDefs.Count);
            //---------------Execute Test ----------------------
            BOSequenceNumber.LoadNumberGenClassDef();
            //---------------Test Result -----------------------
            Assert.AreEqual(1, ClassDef.ClassDefs.Count);
            Assert.IsNotNull(ClassDef.Get <BOSequenceNumber>());
        }
        public void TestSetSequenceNumber()
        {
            //---------------Set up test pack-------------------
            BOSequenceNumber.LoadNumberGenClassDef();
            NumberGenerator numGen = new NumberGenerator("tmp");

            numGen.NextNumber();
            numGen.Save();
            Assert.GreaterOrEqual(numGen.NextNumber(), 1);
            //---------------Execute Test ----------------------
            numGen.SetSequenceNumber(0);
            //---------------Test Result -----------------------
            numGen = new NumberGenerator("tmp");
            Assert.AreEqual(1, numGen.NextNumber());
            //---------------Tear Down -------------------------
        }
        public void TestDifferentTableNameGetSecondNumber_FromSeperateNumberGeneratorInstance_AfterUpdate()
        {
            //---------------Clean Up --------------------------
            BOSequenceNumber.LoadNumberGenClassDef("another_number_generator");
            NumberGenerator numGen = new NumberGenerator("tmp", "another_number_generator");

            numGen.SetSequenceNumber(0);
            //---------------Set up test pack-------------------
            //---------------Execute Test ----------------------
            numGen.NextNumber();
            numGen.Save();
            numGen = new NumberGenerator("tmp", "another_number_generator");
            long nextNum = numGen.NextNumber();

            //---------------Test Result -----------------------
            Assert.AreEqual(2, nextNum);
        }
        public void TestAcceptance_GenerateFirstNumber_NoSeed()
        {
            //Delete entry from database for the number type.
            BOSequenceNumber.LoadNumberGenClassDef();
            DatabaseConnection.CurrentConnection.ExecuteRawSql("Delete From NumberGenerator");
            //Create an instance of the number for a specific type of number (e.g. Invoice number)
            //---------------Set up test pack-------------------
            INumberGenerator numGen = new NumberGenerator("tmp");
            //---------------Execute Test ----------------------
            //get the next number for invoice number
            long sequenceNumber = numGen.NextNumber();

            //---------------Test Result -----------------------
            //test number should be one.
            Assert.AreEqual(1, sequenceNumber);
            //---------------Tear Down -------------------------
        }
        public void TestDifferentTableName()
        {
            //---------------Set up test pack-------------------
            //Delete entry from database for the number type.
            string tableName = "another_number_generator";

            BOSequenceNumber.LoadNumberGenClassDef(tableName);
            DatabaseConnection.CurrentConnection.ExecuteRawSql("Delete From " + tableName);
            //Create an instance of the number for a specific type of number (e.g. Invoice number)
            //---------------Set up test pack-------------------
            INumberGenerator numGen = new NumberGenerator("tmp", tableName);
            //---------------Execute Test ----------------------
            //get the next number for invoice number
            long sequenceNumber = numGen.NextNumber();

            //---------------Test Result -----------------------
            //test number should be one.
            Assert.AreEqual(1, sequenceNumber);
            //---------------Tear Down -------------------------
        }
        public void TestAcceptance_GenerateFirstNumber_SeedNonZero()
        {
            //---------------Set up test pack-------------------
            //Create an entry in the number generator table for entry type to seed with seed = 100.
            BOSequenceNumber.LoadNumberGenClassDef();
            INumberGenerator numGen     = new NumberGenerator("tmp");
            const int        seedNumber = 100;

            numGen.SetSequenceNumber(seedNumber);
            //Create an instance of the number for a specific type of number (e.g. Invoice number)
            numGen = new NumberGenerator("tmp");
            //---------------Execute Test ----------------------
            //get the next number for invoice number
            long nextNumber = numGen.NextNumber();

            //---------------Test Result -----------------------
            //test number should be 101.
            Assert.AreEqual(seedNumber + 1, nextNumber);
            //---------------Tear Down -------------------------
        }
        public void TestAcceptance_GenerateFirstNumber_SeedZero()
        {
            //---------------Clean Up --------------------------
            //Create an entry in the number generator table for entry type to seed.
            BOSequenceNumber.LoadNumberGenClassDef();
            const string numberType = "tmp";

            SetNumberGeneratorSeedZero(numberType);
            //---------------Set up test pack-------------------
            //Create an instance of the number for a specific type of number (e.g. Invoice number)
            INumberGenerator numGen = new NumberGenerator("tmp");

            //---------------Execute Test ----------------------
            //get the next number for invoice number
            long nextNum = numGen.NextNumber();

            //---------------Test Result -----------------------
            //test nextnumber should be one.
            Assert.AreEqual(1, nextNum);
            //---------------Tear Down -------------------------
        }
        public void TestAcceptance_GenerateSecondNumber_IncrementFirstNumber()
        {
            //---------------Set up test pack-------------------
            //Create an entry in the number generator table for entry type to seed with seed = 0.
            const string numberType = "tmp";

            BOSequenceNumber.LoadNumberGenClassDef();
            SetNumberGeneratorSeedZero(numberType);
            //Create an instance of the number for a specific type of number (e.g. Invoice number)
            INumberGenerator numGen = new NumberGenerator(numberType);

            //get the next number for invoice number
            numGen.NextNumber();
            //update to datasource

            //---------------Execute Test ----------------------
            //Get second number
            long nextNum = numGen.NextNumber();

            //---------------Test Result -----------------------
            //test number should be 2.
            Assert.AreEqual(2, nextNum);
        }