Exemple #1
0
        private List <ConceptApplication> LoadOldConceptApplicationsFromDatabase()
        {
            var previoslyAppliedConcepts = new List <ConceptApplication>();

            _sqlExecuter.ExecuteReader(
                "SELECT ID, InfoType, ConceptInfoKey, ImplementationType, CreateQuery, RemoveQuery, ModificationOrder FROM Rhetos.AppliedConcept ORDER BY ModificationOrder",
                dataReader =>
            {
                previoslyAppliedConcepts.Add(new ConceptApplication
                {
                    Id = SqlUtility.ReadGuid(dataReader, 0),
                    ConceptInfoTypeName           = dataReader.GetString(1),
                    ConceptInfoKey                = dataReader.GetString(2),
                    ConceptImplementationTypeName = dataReader.GetString(3),
                    CreateQuery      = SqlUtility.EmptyNullString(dataReader, 4),
                    RemoveQuery      = SqlUtility.EmptyNullString(dataReader, 5),
                    OldCreationOrder = SqlUtility.ReadInt(dataReader, 6),
                    DependsOn        = null  // It will be set later
                });
            });

            var invalidCa = previoslyAppliedConcepts.FirstOrDefault(ca => ca.ConceptInfoKey == ObsoleteConceptApplicationMark);

            if (invalidCa != null)
            {
                throw new FrameworkException($"Obsolete concept application loaded from database" +
                                             $" (Rhetos.ConceptApplication, ID = {SqlUtility.GuidToString(invalidCa.Id)})." +
                                             $" The update procedure for old version of the system should include deployment" +
                                             $" with empty DslScripts folder (using old version of Rhetos framework and packages)" +
                                             $" to remove old database structure and keep the data.");
            }

            return(previoslyAppliedConcepts);
        }
        public void LoadPreviouslyAppliedConceptsTest_DuplicateAppliedConcepts()
        {
            try
            {
                var ca1 = MockSqlExecuter.ConceptApplication;
                var ca2 = MockSqlExecuter.ConceptApplicationCopy;
                Assert.AreEqual(ca1.GetConceptApplicationKey(), ca2.GetConceptApplicationKey());
                var expected = new[] { ca1, ca2 };

                var conceptApplicationRepository = TestConceptApplicationRepository(expected);
                var appliedConcepts = conceptApplicationRepository.Load();
                Assert.IsNotNull(appliedConcepts);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                TestUtility.AssertContains(ex.Message, MockSqlExecuter.ConceptApplication.GetConceptApplicationKey());
                TestUtility.AssertContains(ex.Message, new[] {
                    SqlUtility.GuidToString(MockSqlExecuter.ConceptApplication.Id),
                    SqlUtility.GuidToString(MockSqlExecuter.ConceptApplicationCopy.Id)
                });

                throw;
            }
        }
Exemple #3
0
        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
            }
        }
 private void LogDatabaseChanges(ConceptApplication conceptApplication, string action, Func <string> additionalInfo = null)
 {
     _changesLogger.Trace("{0} {1}, ID={2}.{3}{4}",
                          action,
                          conceptApplication.GetConceptApplicationKey(),
                          SqlUtility.GuidToString(conceptApplication.Id),
                          additionalInfo != null ? " " : null,
                          additionalInfo != null ? additionalInfo() : null);
 }
Exemple #5
0
        public void LoadPreviouslyAppliedConceptsTest_DuplicateAppliedConcepts()
        {
            var ca1 = MockSqlExecuter.ConceptApplication;
            var ca2 = MockSqlExecuter.ConceptApplicationCopy;

            Assert.AreEqual(ca1.GetConceptApplicationKey(), ca2.GetConceptApplicationKey());
            var expected = new[] { ca1, ca2 };

            var conceptApplicationRepository = TestConceptApplicationRepository(expected);

            TestUtility.ShouldFail <FrameworkException>(
                () => conceptApplicationRepository.Load(),
                MockSqlExecuter.ConceptApplication.GetConceptApplicationKey(),
                SqlUtility.GuidToString(MockSqlExecuter.ConceptApplication.Id),
                SqlUtility.GuidToString(MockSqlExecuter.ConceptApplicationCopy.Id));
        }