public void SpecialCharacters() { using (var container = new RhetosTestContainer()) { var repository = container.Resolve <Common.DomRepository>(); var newItem = new TestLogging.Simple { ID = Guid.NewGuid(), Name = @"<>'""&;[]\\//()čćšđžČĆŠĐŽ]]>" }; repository.TestLogging.Simple.Insert(new[] { newItem }); var logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Insert").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be an 'Insert' record in the log."); Assert.AreEqual("", logRecord.Description); repository.TestLogging.Simple.Delete(new[] { newItem }); logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Delete").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be a 'Delete' record in the log."); var xmlText = @"<?xml version=""1.0"" encoding=""UTF-16""?>" + Environment.NewLine + logRecord.Description; Console.WriteLine(xmlText); var xdoc = XDocument.Parse(xmlText); Console.WriteLine(string.Join(", ", xdoc.Root.Attributes().Select(a => a.Name + ":" + a.Value))); var logName = xdoc.Root.Attribute("Name").Value; Assert.AreEqual(newItem.Name, logName); } }
public void DeleteOldNullValues() { using (var container = new RhetosTestContainer()) { var repository = container.Resolve <Common.DomRepository>(); var newItem = new TestLogging.Simple { ID = Guid.NewGuid(), Count = null, Name = null, Created = null }; repository.TestLogging.Simple.Insert(new[] { newItem }); var logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Insert").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be an 'Insert' record in the log."); Assert.AreEqual("", logRecord.Description); newItem.Count = 2; newItem.Name = "abc"; newItem.Created = DateTime.Now; repository.TestLogging.Simple.Delete(new[] { newItem }); logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Delete").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be a 'Delete' record in the log."); var xmlText = @"<?xml version=""1.0"" encoding=""UTF-16""?>" + Environment.NewLine + logRecord.Description; Console.WriteLine(xmlText); var xdoc = XDocument.Parse(xmlText); Console.WriteLine(string.Join(", ", xdoc.Root.Attributes().Select(a => a.Name + ":" + a.Value))); Assert.IsTrue(IsNullOrEmpty(xdoc.Root.Attribute("Count"))); Assert.IsTrue(IsNullOrEmpty(xdoc.Root.Attribute("Name"))); Assert.IsTrue(IsNullOrEmpty(xdoc.Root.Attribute("Created"))); } }
public void Complex() { using (var container = new RhetosTestContainer()) { container.Resolve <ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestLogging.Complex", "DELETE FROM TestLogging.Simple", }); var repository = container.Resolve <Common.DomRepository>(); var id = Guid.NewGuid(); var simple = new TestLogging.Simple { ID = Guid.NewGuid() }; repository.TestLogging.Simple.Insert(new[] { simple }); var complex = new TestLogging.Complex { bi = new byte[] { 1, 2, 3 }, bo = true, da = new DateTime(2001, 2, 3), t = new DateTime(2001, 2, 3, 4, 5, 6), de = 123.4567m, g = Guid.NewGuid(), ls = "abc", m = 11.22m, rID = simple.ID }; repository.TestLogging.Complex.Insert(new[] { complex }); complex.ls = "def"; repository.TestLogging.Complex.Update(new[] { complex }); repository.TestLogging.Complex.Delete(new[] { complex }); var ids = new Guid?[] { simple.ID, complex.ID }; var ins = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Insert" && ids.Contains(log.ItemId)).Single(); var upd = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Update" && ids.Contains(log.ItemId)).Single(); var del = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Delete" && ids.Contains(log.ItemId)).Single(); Assert.AreEqual("", ins.Description); Assert.AreEqual(@"<PREVIOUS ls=""abc"" />", upd.Description); Console.WriteLine(del.Description); var description = del.Description.Split(' ').OrderBy(x => x).ToList(); Assert.AreEqual(@"/>", description[0]); Assert.AreEqual(@"<PREVIOUS", description[1]); Assert.AreEqual(@"bi=""0x010203""", description[2]); Assert.AreEqual(@"bo=""1""", description[3]); Assert.AreEqual(@"da=""2001-02-03""", description[4]); Assert.IsTrue(new Regex(@"^de=""123\.45670*""$").IsMatch(description[5]));// optional additional zeros Assert.AreEqual(@"g=""" + SqlUtility.GuidToString(complex.g.Value) + @"""", description[6]); Assert.AreEqual(@"ls=""def""", description[7]); Assert.AreEqual(@"m=""11.2200""", description[8]); Assert.AreEqual(@"rID=""" + SqlUtility.GuidToString(simple.ID) + @"""", description[9]); Assert.IsTrue(new Regex(@"^t=""2001-02-03T04:05:06(.0+)?""$").IsMatch(description[10]));// optional milliseconds } }
public void Complex() { using (var container = new RhetosTestContainer()) { container.Resolve<ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestLogging.Complex", "DELETE FROM TestLogging.Simple", }); var repository = container.Resolve<Common.DomRepository>(); var id = Guid.NewGuid(); var simple = new TestLogging.Simple { ID = Guid.NewGuid() }; repository.TestLogging.Simple.Insert(new[] { simple }); var complex = new TestLogging.Complex { bi = new byte[] { 1, 2, 3 }, bo = true, da = new DateTime(2001, 2, 3), t = new DateTime(2001, 2, 3, 4, 5, 6), de = 123.4567m, g = Guid.NewGuid(), ls = "abc", m = 11.22m, r = simple }; repository.TestLogging.Complex.Insert(new[] { complex }); complex.ls = "def"; repository.TestLogging.Complex.Update(new[] { complex }); repository.TestLogging.Complex.Delete(new[] { complex }); var ids = new Guid?[] { simple.ID, complex.ID }; var ins = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Insert" && ids.Contains(log.ItemId)).Single(); var upd = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Update" && ids.Contains(log.ItemId)).Single(); var del = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Delete" && ids.Contains(log.ItemId)).Single(); Assert.AreEqual("", ins.Description); Assert.AreEqual(@"<PREVIOUS ls=""abc"" />", upd.Description); Console.WriteLine(del.Description); var description = del.Description.Split(' ').OrderBy(x => x).ToList(); Assert.AreEqual(@"/>", description[0]); Assert.AreEqual(@"<PREVIOUS", description[1]); Assert.AreEqual(@"bi=""0x010203""", description[2]); Assert.AreEqual(@"bo=""1""", description[3]); Assert.AreEqual(@"da=""2001-02-03""", description[4]); Assert.IsTrue(new Regex(@"^de=""123\.45670*""$").IsMatch(description[5]));// optional additional zeros Assert.AreEqual(@"g=""" + SqlUtility.GuidToString(complex.g.Value) + @"""", description[6]); Assert.AreEqual(@"ls=""def""", description[7]); Assert.AreEqual(@"m=""11.2200""", description[8]); Assert.AreEqual(@"rID=""" + SqlUtility.GuidToString(simple.ID) + @"""", description[9]); Assert.IsTrue(new Regex(@"^t=""2001-02-03T04:05:06(.0+)?""$").IsMatch(description[10]));// optional millisconds } }
public void DeleteIntegerStringDataTime() { using (var container = new RhetosTestContainer()) { var repository = container.Resolve <Common.DomRepository>(); var newItem = new TestLogging.Simple { ID = Guid.NewGuid(), Count = -2, Name = "abc", Created = DateTime.Now }; repository.TestLogging.Simple.Insert(new[] { newItem }); var logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Insert").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be 'Insert' record in the log."); Assert.AreEqual("", logRecord.Description); repository.TestLogging.Simple.Delete(new[] { newItem }); logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Delete").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be 'Delete' record in the log."); Assert.AreEqual(SqlUtility.UserContextInfoText(container.Resolve <IUserInfo>()), logRecord.ContextInfo); Assert.IsTrue(container.Resolve <IUserInfo>().IsUserRecognized); TestUtility.AssertContains(logRecord.ContextInfo, container.Resolve <IUserInfo>().UserName); TestUtility.AssertContains(logRecord.ContextInfo, container.Resolve <IUserInfo>().Workstation); var now = SqlUtility.GetDatabaseTime(container.Resolve <ISqlExecuter>()); Assert.IsTrue(logRecord.Created.Value.Subtract(now).TotalSeconds < 5); Assert.AreEqual("TestLogging.Simple", logRecord.TableName); Assert.IsTrue(!string.IsNullOrWhiteSpace(logRecord.UserName)); Assert.IsTrue(!string.IsNullOrWhiteSpace(logRecord.Workstation)); // Description is XML: var xmlText = @"<?xml version=""1.0"" encoding=""UTF-16""?>" + Environment.NewLine + logRecord.Description; Console.WriteLine(xmlText); var xdoc = XDocument.Parse(xmlText); Console.WriteLine(string.Join(", ", xdoc.Root.Attributes().Select(a => a.Name + ":" + a.Value))); var logCount = int.Parse(xdoc.Root.Attribute("Count").Value); Assert.AreEqual(newItem.Count, logCount); var logName = xdoc.Root.Attribute("Name").Value; Assert.AreEqual(newItem.Name, logName); var logCreated = DateTime.Parse(xdoc.Root.Attribute("Created").Value); Assert.IsTrue(Math.Abs(newItem.Created.Value.Subtract(logCreated).TotalMilliseconds) <= 1000, "Error made by converting DataTime to XML should be less than a second."); } }
public void DeleteIntegerStringDataTime() { using (var container = new RhetosTestContainer()) { var repository = container.Resolve<Common.DomRepository>(); var newItem = new TestLogging.Simple { ID = Guid.NewGuid(), Count = -2, Name = "abc", Created = DateTime.Now }; repository.TestLogging.Simple.Insert(new[] { newItem }); var logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Insert").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be 'Insert' record in the log."); Assert.AreEqual("", logRecord.Description); repository.TestLogging.Simple.Delete(new[] { newItem }); logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Delete").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be 'Delete' record in the log."); Assert.AreEqual(SqlUtility.UserContextInfoText(container.Resolve<IUserInfo>()), logRecord.ContextInfo); Assert.IsTrue(container.Resolve<IUserInfo>().IsUserRecognized); TestUtility.AssertContains(logRecord.ContextInfo, container.Resolve<IUserInfo>().UserName); TestUtility.AssertContains(logRecord.ContextInfo, container.Resolve<IUserInfo>().Workstation); var now = SqlUtility.GetDatabaseTime(container.Resolve<ISqlExecuter>()); Assert.IsTrue(logRecord.Created.Value.Subtract(now).TotalSeconds < 5); Assert.AreEqual("TestLogging.Simple", logRecord.TableName); Assert.IsTrue(!string.IsNullOrWhiteSpace(logRecord.UserName)); Assert.IsTrue(!string.IsNullOrWhiteSpace(logRecord.Workstation)); // Description is XML: var xmlText = @"<?xml version=""1.0"" encoding=""UTF-16""?>" + Environment.NewLine + logRecord.Description; Console.WriteLine(xmlText); var xdoc = XDocument.Parse(xmlText); Console.WriteLine(string.Join(", ", xdoc.Root.Attributes().Select(a => a.Name + ":" + a.Value))); var logCount = int.Parse(xdoc.Root.Attribute("Count").Value); Assert.AreEqual(newItem.Count, logCount); var logName = xdoc.Root.Attribute("Name").Value; Assert.AreEqual(newItem.Name, logName); var logCreated = DateTime.Parse(xdoc.Root.Attribute("Created").Value); Assert.IsTrue(Math.Abs(newItem.Created.Value.Subtract(logCreated).TotalMilliseconds) <= 1000, "Error made by converting DataTime to XML should be less than a second."); } }
public void SpecialCharacters() { using (var container = new RhetosTestContainer()) { var repository = container.Resolve<Common.DomRepository>(); var newItem = new TestLogging.Simple { ID = Guid.NewGuid(), Name = @"<>'""&;[]\\//()čćšđžČĆŠĐŽ]]>" }; repository.TestLogging.Simple.Insert(new[] { newItem }); var logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Insert").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be an 'Insert' record in the log."); Assert.AreEqual("", logRecord.Description); repository.TestLogging.Simple.Delete(new[] { newItem }); logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Delete").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be a 'Delete' record in the log."); var xmlText = @"<?xml version=""1.0"" encoding=""UTF-16""?>" + Environment.NewLine + logRecord.Description; Console.WriteLine(xmlText); var xdoc = XDocument.Parse(xmlText); Console.WriteLine(string.Join(", ", xdoc.Root.Attributes().Select(a => a.Name + ":" + a.Value))); var logName = xdoc.Root.Attribute("Name").Value; Assert.AreEqual(newItem.Name, logName); } }
public void DeleteOldNullValues() { using (var container = new RhetosTestContainer()) { var repository = container.Resolve<Common.DomRepository>(); var newItem = new TestLogging.Simple { ID = Guid.NewGuid(), Count = null, Name = null, Created = null }; repository.TestLogging.Simple.Insert(new[] { newItem }); var logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Insert").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be an 'Insert' record in the log."); Assert.AreEqual("", logRecord.Description); newItem.Count = 2; newItem.Name = "abc"; newItem.Created = DateTime.Now; repository.TestLogging.Simple.Delete(new[] { newItem }); logRecord = repository.Common.Log.Query().Where(log => log.ItemId == newItem.ID && log.Action == "Delete").SingleOrDefault(); Assert.IsNotNull(logRecord, "There should be a 'Delete' record in the log."); var xmlText = @"<?xml version=""1.0"" encoding=""UTF-16""?>" + Environment.NewLine + logRecord.Description; Console.WriteLine(xmlText); var xdoc = XDocument.Parse(xmlText); Console.WriteLine(string.Join(", ", xdoc.Root.Attributes().Select(a => a.Name + ":" + a.Value))); Assert.IsTrue(IsNullOrEmpty(xdoc.Root.Attribute("Count"))); Assert.IsTrue(IsNullOrEmpty(xdoc.Root.Attribute("Name"))); Assert.IsTrue(IsNullOrEmpty(xdoc.Root.Attribute("Created"))); } }