public void Handle(ProcessStarted @event)
        {
            string        id       = DailyActivity.GetIdFrom(@event.CreatedAt);
            DailyActivity activity = GetOrCreateActivityEntity(id);

            //execute change / update
            activity.AddProcess(@event.ProcessId, @event.CreatedAt);

            //save - persist?
            repository.Save(activity);
        }
        public void Handle(ProcessEnded @event)
        {
            string        id       = DailyActivity.GetIdFrom(@event.CreatedAt);
            DailyActivity activity = repository.Get(id);   //should exist for this event

            if (activity != null)
            {
                //execute change / update
                activity.EndProcess(@event.ProcessId, @event.EndTime, @event.WithError);

                //save - persist?
                repository.Save(activity);
            }
        }
        public void AddingAProcessIncrementsActiveCounter()
        {
            string        id       = DailyActivity.GetIdFrom(DateTime.UtcNow);
            DailyActivity activity = new DailyActivity(id);

            Guid     processId = Guid.NewGuid();
            DateTime startedAt = DateTime.UtcNow;

            activity.AddProcess(processId, startedAt);

            Assert.AreEqual(1, activity.ActiveProcesses);
            Assert.AreEqual(1, activity.TotalProcessCount);
            Assert.AreEqual(0, activity.CompletionCount);
            Assert.AreEqual(0, activity.CompletedWithErrorCount);
        }
        public void CompletingAnExistingProcessDecrementsActiveCounter_ErrorCountIsNotZero()
        {
            string        id       = DailyActivity.GetIdFrom(DateTime.UtcNow);
            DailyActivity activity = new DailyActivity(id);

            Guid     processId = Guid.NewGuid();
            DateTime startedAt = DateTime.UtcNow.AddSeconds(-10);

            activity.AddProcess(processId, startedAt);

            DateTime endedAt = DateTime.UtcNow;

            activity.EndProcess(processId, endedAt, true);

            Assert.AreEqual(0, activity.ActiveProcesses);
            Assert.AreEqual(1, activity.TotalProcessCount);
            Assert.AreEqual(1, activity.CompletionCount);
            Assert.AreEqual(1, activity.CompletedWithErrorCount);
        }
        public void CanCreateIdKeyFromDate(string expectedKey, int year, int month, int day, int hour, int min, int sec)
        {
            DateTime date = new DateTime(year, month, day, hour, min, sec);

            Assert.AreEqual(expectedKey, DailyActivity.GetIdFrom(date));
        }