public void RegisteringObservation_StateIsMerged_Chronologically()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:02",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=Hello World Again" }
            };

            service.RegisterObservation(o1);
            service.RegisterObservation(o2);

            Assert.False(service.GetEntityState("E1", "2001/01/01 01:01").ContainsKey("MyNextVal"));
        }
        public void RegisteringObservation_Fires_EventAgent_Out_Of_Order()
        {
            _context.Database.EnsureDeleted();
            var agentMock = new Mock <IStateChangeReaction>();
            var service   = new TimeLineService(_context);

            service.RegisterReaction(agentMock.Object);

            var o1 = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };


            var o2 = new Observation()
            {
                On          = "2001/01/02",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World Again" }
            };


            service.RegisterObservation(o2);
            service.RegisterObservation(o1);


            agentMock.Verify(x => x.OnChange("E1", "MyVal", "Hello World", "Hello World Again", "01/02/2001 00:00:00.0000000"));
        }
示例#3
0
        public void FilterByKey_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/02",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "State.MyVal=Hello World" }).First();

            Assert.Equal("E1", result.Entity);
            Assert.Equal(new DateTime(2001, 1, 1), result.Start);
            Assert.Equal(new DateTime(2001, 1, 2).AddSeconds(-1), result.End);
        }
        public void RegisteringObservation_StateIsMerged_Simultaneously()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=Hello World Again" }
            };


            service.RegisterObservation(o1);
            service.RegisterObservation(o2);

            Assert.Equal("Hello World", service.GetEntityState("E1", "2001/01/01 01:01")["MyVal"]);
            Assert.Equal("Hello World Again", service.GetEntityState("E1", "2001/01/01 01:01")["MyNextVal"]);
        }
        public void RegisteringObservation_StateIsOverwritten()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:02",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=Hello World Again" }
            };


            service.RegisterObservation(o1);
            service.RegisterObservation(o2);

            var contexts = service.SearchEvents(new string[] { }).OrderByDescending(x => x.On);

            Assert.Equal("Hello World Again", service.GetEntityState("E1", "2001/01/01 01:02")["MyNextVal"]);
        }
示例#6
0
        public void FilterByAfter_Between_Observations_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/03",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "After=1/02/2001" });

            Assert.Equal(2, result.Count());
            Assert.Equal(new DateTime(2001, 1, 2), result.First().Start);
            Assert.Equal(new DateTime(2001, 1, 3).AddSeconds(-1), result.First().End);
            Assert.Equal("Hello World", result.First().Value);


            Assert.Equal(new DateTime(2001, 1, 3), result.Skip(1).First().Start);
            Assert.Null(result.Skip(1).First().End);
            Assert.Equal("More", result.Skip(1).First().Value);
        }
示例#7
0
        public void FilterByBefore_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/04",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "Before=1/02/2001" });

            Assert.Equal(new DateTime(2001, 1, 1), result.First().Start);
            Assert.Equal(new DateTime(2001, 1, 2), result.First().End);
            Assert.Equal("Hello World", result.First().Value);
            Assert.Equal(1, result.Count);
        }
示例#8
0
        public void FilterByKey_LessThan_Returns_Only_Match_Results()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=1" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/02",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=10" }
            };


            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "State.MyVal < 10" });

            Assert.Equal("E1", result.First().Entity);
            Assert.Equal(new DateTime(2001, 1, 1), result.First().Start);
            Assert.Equal(new DateTime(2001, 1, 2).AddSeconds(-1), result.First().End);

            Assert.Equal(1, result.Count);
        }
示例#9
0
        public void FilterByAfter_AfterEndOfLine_ReturnsResults()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/03",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=More" }
            };

            service.RegisterObservation(o);
            service.RegisterObservation(o2);

            var result = service.SearchState(new[] { "After=1/04/2001" }).First();

            Assert.Equal(new DateTime(2001, 1, 4), result.Start);
            Assert.Equal("More", result.Value);
            Assert.Null(result.End);
        }
示例#10
0
        private ITimelineService CreateTimeline(IServiceProvider x)
        {
            var context = x.GetService <ChronicityContext>();
            var tl      = new TimeLineService(context);

            //tl.RegisterReaction(new FeederRefill());
            return(tl);
        }
示例#11
0
        public EntityRegistration()
        {
            var options = new DbContextOptionsBuilder <ChronicityContext>()
                          .UseInMemoryDatabase(databaseName: "EntityRegistration")
                          .Options;

            _service = new TimeLineService(new ChronicityContext(options));
        }
示例#12
0
        public ClusterFilters()
        {
            var options = new DbContextOptionsBuilder <ChronicityContext>()
                          .UseInMemoryDatabase(databaseName: "ClusterFilters")
                          .Options;

            _context = new ChronicityContext(options);

            _service = new TimeLineService(_context);
        }
示例#13
0
        public void RegisteringEvent_Must_Be_RegisteredEntity()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var e = new NewEvent()
            {
                On   = "2001/01/01",
                Type = "MyEventType"
            };

            Assert.Throws <Exception>(() => service.RegisterEvent(e));
        }
示例#14
0
        public void RegisteringObservation_IsReturned_In_EventType_List()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var e1 = new NewEvent()
            {
                On       = "2001/01/01 01:01",
                Type     = "MyEventType",
                Entities = new [] { "E1" }
            };

            service.RegisterEvent(e1);

            Assert.Equal("MyEventType", service.SearchEventTypes("My").First());
        }
        public void RegisteringObservation_StateIsSet()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o = new Observation()
            {
                On          = "2001/01/01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyVal=Hello World" }
            };

            service.RegisterObservation(o);

            Assert.Equal("Hello World", service.GetEntityState("E1", "2001/01/01")["MyVal"]);
        }
示例#16
0
        public void RegisteringEvent_CanBeRetrieved()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var e = new NewEvent()
            {
                On       = "2001/01/01",
                Type     = "MyEventType",
                Entities = new [] { "E1" }
            };


            service.RegisterEvent(e);

            var contexts = service.SearchEvents(new string[] {});

            Assert.Single(contexts);
        }
        public void RegisteringObservation_StateIsMerged_Reverse_Chronologically()
        {
            _context.Database.EnsureDeleted();
            var service = new TimeLineService(_context);

            var o1 = new Observation()
            {
                On          = "2001/01/01 01:03",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=3" }
            };

            var o2 = new Observation()
            {
                On          = "2001/01/01 01:02",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=2" }
            };

            var o3 = new Observation()
            {
                On          = "2001/01/01 01:01",
                Type        = "MyEventType",
                Entity      = "E1",
                Expressions = new[] { "State.MyNextVal=1" }
            };


            service.RegisterObservation(o1);
            service.RegisterObservation(o2);
            service.RegisterObservation(o3);

            Assert.Equal("1", service.GetEntityState("E1", "2001/01/01 01:01")["MyNextVal"]);
            Assert.Equal("2", service.GetEntityState("E1", "2001/01/01 01:02")["MyNextVal"]);
            Assert.Equal("3", service.GetEntityState("E1", "2001/01/01 01:03")["MyNextVal"]);
        }