コード例 #1
0
        public void VerifyThatColumnsOfAllTypesCanBeCreatedAndRemoved()
        {
            var template = new AllTypeMySqlThing();

            DatabaseSession.Instance.Connector.CreateTableWithColumns(template);

            var firstProperty = template.GetType().GetProperties().First();
            Assert.DoesNotThrow(() => DatabaseSession.Instance.Connector.DeleteColumn(firstProperty, template));
            Assert.DoesNotThrow(() => DatabaseSession.Instance.Connector.CreateColumn(firstProperty, template));

            foreach (var property in template.GetType().GetProperties().Where(p => !Attribute.IsDefined(p, typeof(IgnoreDataMemberAttribute))).ToList())
            {
                Assert.Throws<InvalidDataException>(() => DatabaseSession.Instance.Connector.CreateColumn(property, template));
            }

            foreach (var property in template.GetType().GetProperties().Where(p => p.Name != "SomeString" && !Attribute.IsDefined(p, typeof(IgnoreDataMemberAttribute))).ToList())
            {
                var transaction = DatabaseSession.Instance.CreateTransaction();
                DatabaseSession.Instance.Connector.DeleteColumn(property, template, transaction);
                DatabaseSession.Instance.CommitTransaction(transaction);
            }

            Assert.Throws<NotSupportedException>(() => DatabaseSession.Instance.Connector.CreateTableWithColumns(new NoTypes()));

            DatabaseSession.Instance.Connector.DeleteTable(new AllTypeMySqlThing());
        }
コード例 #2
0
        public void VerifyThatChecksWork()
        {
            var template = new AllTypeMySqlThing();

            DatabaseSession.Instance.Connector.CreateTableWithColumns(template);

            Assert.IsTrue(DatabaseSession.Instance.Connector.CheckTableExists(template));
            Assert.IsTrue(DatabaseSession.Instance.Connector.CheckColumnExists(template.GetType().GetProperty("SomeFloat"), template));
            Assert.IsFalse(DatabaseSession.Instance.Connector.CheckColumnExists(template.GetType().GetProperty("SomeHidden"), template));

            DatabaseSession.Instance.Connector.DeleteTable(new AllTypeMySqlThing());
        }
コード例 #3
0
        public void VerifyThatWhereReturns()
        {
            var allTypeThing = new AllTypeMySqlThing();

            DatabaseSession.Instance.Connector.CreateTableWithColumnsAndPrimaryKey(allTypeThing);

            var saveItem1 = new AllTypeMySqlThing
            {
                Id = Guid.NewGuid(),
                SomeString = string.Empty,
                SomeDate = DateTime.Now,
                SomeEnum = ConnectorType.Postgresql
            };

            var saveItem2 = new AllTypeMySqlThing
            {
                Id = Guid.NewGuid(),
                SomeDate = DateTime.Now,
                SomeString = string.Empty,
                SomeInt = 13
            };

            var saveItem3 = new AllTypeMySqlThing
            {
                Id = Guid.NewGuid(),
                SomeDate = DateTime.Now,
                SomeString = string.Empty,
                SomeInt = 13
            };

            saveItem1.Save();
            saveItem2.Save();
            saveItem3.Save();

            Assert.AreEqual(2, AllTypeMySqlThing.Where(saveItem3.GetType().GetProperty("SomeInt"), "=", 13).Count);
            Assert.AreEqual(1, AllTypeMySqlThing.Where(saveItem3.GetType().GetProperty("Id"), "=", saveItem3.Id).Count);

            DatabaseSession.Instance.Connector.DeleteTable(allTypeThing);
        }
コード例 #4
0
        public void VerifyThatTransactionSafeCreateTableWorks()
        {
            var fromObject = new User()
            {
                Id = Guid.NewGuid(),
                Name = "John Doe"
            };

            var transaction = DatabaseSession.Instance.CreateTransaction();
            var prop = fromObject.GetType().GetProperties().First();
            DatabaseSession.Instance.Connector.CreateTableWithColumns(fromObject, transaction);
            DatabaseSession.Instance.CommitTransaction(transaction);

            DatabaseSession.Instance.Connector.DeleteTable(fromObject);

            var allTypes = new AllTypeMySqlThing();

            DatabaseSession.Instance.Connector.CreateTableWithColumns(allTypes);

            Assert.IsFalse(DatabaseSession.Instance.Connector.CheckTableExists(fromObject));

            var transaction1 = DatabaseSession.Instance.CreateTransaction();
            DatabaseSession.Instance.Connector.CreateTableWithColumns(fromObject, transaction1);
            Assert.Throws<InvalidDataException>(() => allTypes.Save(transaction: transaction1));
            DatabaseSession.Instance.CommitTransaction(transaction1);

            DatabaseSession.Instance.Connector.DeleteTable(allTypes);

            // mysql CREATE TABLE ignores transactions
            Assert.IsTrue(DatabaseSession.Instance.Connector.CheckTableExists(fromObject));
            DatabaseSession.Instance.Connector.DeleteTable(fromObject);

            Assert.IsFalse(DatabaseSession.Instance.Connector.CheckTableExists(fromObject));
        }
コード例 #5
0
        public void VerifyThatTableWithColumnsCanBeCreatedAndRemoved()
        {
            var template = new AllTypeMySqlThing();

            Assert.Throws<InvalidDataException>(() => AllTypeMySqlThing.All());

            DatabaseSession.Instance.Connector.CreateTableWithColumns(template);
            DatabaseSession.Instance.Connector.CreatePrimaryKeyConstraint(template);

            Assert.IsTrue(DatabaseSession.Instance.Connector.CheckTableExists(template));

            var saveItem1 = new AllTypeMySqlThing
            {
                Id = Guid.NewGuid(),
                SomeString = string.Empty,
                SomeDate = DateTime.Now,
                SomeEnum = ConnectorType.Postgresql
            };

            var saveItem2 = new AllTypeMySqlThing
            {
                Id = Guid.NewGuid(),
                SomeString = string.Empty,
                SomeDate = DateTime.Now
            };

            saveItem1.Save();
            saveItem2.Save();

            Assert.AreEqual(2, DatabaseSession.Instance.Connector.ReadRecords<AllTypeMySqlThing>().ToList().Count);
            Assert.AreEqual(1, DatabaseSession.Instance.Connector.ReadRecords<AllTypeMySqlThing>(limit: 1, offset: 1, orderBy: template.GetType().GetProperty(template.PrimaryKey)).ToList().Count);

            var newString = "IsSome";

            saveItem1.SomeString = newString;

            saveItem1.Save(ignoreNull: true);

            var getSave1 = AllTypeMySqlThing.Find(saveItem1.Id);
            Assert.AreEqual(newString, getSave1.SomeString);

            saveItem1.Delete();
            saveItem2.Delete();

            saveItem1.Save();
            saveItem2.Save();

            var transaction = DatabaseSession.Instance.CreateTransaction();
            saveItem1.Save(transaction: transaction);
            saveItem2.Save(transaction: transaction);
            DatabaseSession.Instance.CommitTransaction(transaction);

            transaction = DatabaseSession.Instance.CreateTransaction();
            saveItem1.Delete(transaction);
            saveItem2.Delete(transaction);
            DatabaseSession.Instance.CommitTransaction(transaction);
            DatabaseSession.Instance.Connector.DeletePrimaryKeyConstraint(template.GetType().GetProperty(template.PrimaryKey), template);
            Assert.Throws<InvalidDataException>(
                () =>
                    DatabaseSession.Instance.Connector.DeletePrimaryKeyConstraint(
                        template.GetType().GetProperty(template.PrimaryKey), template));

            DatabaseSession.Instance.Connector.CreatePrimaryKeyConstraint(template);
            transaction = DatabaseSession.Instance.CreateTransaction();
            DatabaseSession.Instance.Connector.DeletePrimaryKeyConstraint(template.GetType().GetProperty(template.PrimaryKey), template, transaction);
            DatabaseSession.Instance.CommitTransaction(transaction);

            Assert.IsEmpty(DatabaseSession.Instance.Connector.ReadRecords<AllTypeMySqlThing>().ToList());

            DatabaseSession.Instance.Connector.DeleteTable(new AllTypeMySqlThing());
        }
コード例 #6
0
        public void VerifyThatTableCanBeCreatedFullAndRemoved()
        {
            var allTypeThing = new AllTypeMySqlThing();

            DatabaseSession.Instance.Connector.CreateTableWithColumnsAndPrimaryKey(allTypeThing);
            Assert.IsTrue(DatabaseSession.Instance.Connector.CheckTableExists(allTypeThing));
            Assert.Throws<InvalidDataException>(() => DatabaseSession.Instance.Connector.CreateTableWithColumns(allTypeThing));

            DatabaseSession.Instance.Connector.DeleteTable(allTypeThing);
        }