Esempio n. 1
0
        public void AuditDeletions(object userName, ExpandoObject metadata)
        {
            List <AuditLog> records = new List <AuditLog>();

            // Get all Deleted or Modified entities (not Unmodified or Detached or Added)
            foreach (EntityEntry ent in _context.ChangeTracker.Entries().Where(p => p.State == EntityState.Deleted))
            {
                using (var auditer = new LogAuditor(ent))
                {
                    var      eventType = GetEventType(ent);
                    AuditLog record    = auditer.CreateLogRecord(userName, eventType, _context, metadata);

                    if (record != null)
                    {
                        var arg = new AuditLogGeneratedEventArgs(record, ent.Entity, metadata);
                        RaiseOnAuditLogGenerated(this, arg);
                        if (!arg.SkipSavingLog)
                        {
                            records.Add(record);
                        }
                    }
                }
            }

            _context.AuditLogs.AddRange(records);
        }
Esempio n. 2
0
        public void Us60RollingWeeklyTest()
        {
            Stopwatch      sw          = new Stopwatch();
            DateTimeOffset now         = DateTimeOffset.Now;
            int            driverCount = 100;

            var logs = new List <DutyStatusEvent>();

            for (var i = 0; i < driverCount; i++)
            {
                for (var j = 176; j >= 0; j--)
                {
                    logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 0, 0, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 7, 0, 0), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60));
                    logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 7, 0, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 0, 0), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60));
                    logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 0, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 30, 0), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60));
                    logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 30, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 18, 30, 0), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60));
                    logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 18, 30, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 21, 00, 0), Enums.DutyStatus.OnDutyNotDriving, Enums.Jurisdiction.Us60));
                    logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 21, 00, 0), new DateTime(now.AddDays(-j + 1).Year, now.AddDays(-j + 1).Month, now.AddDays(-j + 1).Day, 0, 0, 0), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60));
                }
            }

            sw.Start();
            var driverViolationTable = new LogAuditor().Audit(logs);

            sw.Stop();

            for (var i = 0; i < driverCount; i++)
            {
                int weeklyCount = driverViolationTable[i.ToString()].Count(f => f.ViolationType == Enums.ViolationType.Weekly);
                Assert.IsTrue((logs.Max(f => f.EndDateTime.Date).Subtract(logs.Min(f => f.StartDateTime.Date)).TotalDays - 5 + 1) * 2 == weeklyCount); //-6 days before we get our first violation +1 to include last log date
            }
            Assert.IsTrue(sw.Elapsed < TimeSpan.FromSeconds(15));
        }
Esempio n. 3
0
        public void Us60ShouldCorrectlyCalculateWeeklyViolationsRollingDaysWithViolation()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 01:00:00"), DateTime.Parse("10/1/2018 18:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //17
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 18:00:00"), DateTime.Parse("10/2/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 07:00:00"), DateTime.Parse("10/2/2018 12:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //5
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 12:00:00"), DateTime.Parse("10/3/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/3/2018 07:00:00"), DateTime.Parse("10/3/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //10
                new DutyStatusEvent("1", DateTime.Parse("10/3/2018 17:00:00"), DateTime.Parse("10/4/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/4/2018 07:00:00"), DateTime.Parse("10/4/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //10
                new DutyStatusEvent("1", DateTime.Parse("10/4/2018 17:00:00"), DateTime.Parse("10/5/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/5/2018 07:00:00"), DateTime.Parse("10/5/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //10
                new DutyStatusEvent("1", DateTime.Parse("10/5/2018 17:00:00"), DateTime.Parse("10/6/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/6/2018 07:00:00"), DateTime.Parse("10/6/2018 14:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //7
                new DutyStatusEvent("1", DateTime.Parse("10/6/2018 14:00:00"), DateTime.Parse("10/7/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/7/2018 00:00:00"), DateTime.Parse("10/8/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60), //0

                new DutyStatusEvent("1", DateTime.Parse("10/8/2018 04:00:00"), DateTime.Parse("10/8/2018 23:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //18
                new DutyStatusEvent("1", DateTime.Parse("10/8/2018 23:00:00"), DateTime.Parse("10/9/2018 04:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),
            };

            var driverViolationTable = new LogAuditor().Audit(logs);
            var weekly = new DutyStatusViolation(DateTime.Parse("10/8/2018 22:00:00"), DateTime.Parse("10/8/2018 23:00:00"), Enums.ViolationType.Weekly, Enums.Jurisdiction.Us60);

            Assert.IsTrue(driverViolationTable["1"].First(f => f.ViolationType == Enums.ViolationType.Weekly).Equals(weekly));
        }
        public void AuditChanges(object userName, ExpandoObject metadata)
        {
            List <EntityEntry> deletedOrModified = _context.ChangeTracker.Entries()
                                                   .Where(p => p.State == EntityState.Deleted || p.State == EntityState.Modified)
                                                   .ToList();

            // Get all Deleted/Modified entities (not Unmodified or Detached or Added)
            foreach (EntityEntry ent in deletedOrModified)
            {
                using (LogAuditor auditer = new LogAuditor(ent))
                {
                    EventType eventType = GetEventType(ent);

                    AuditLog record = auditer.CreateLogRecord(userName, eventType, _context, metadata);

                    if (record != null)
                    {
                        AuditLogGeneratedEventArgs arg = new AuditLogGeneratedEventArgs(record, ent.Entity, metadata);
                        RaiseOnAuditLogGenerated(this, arg);
                        if (!arg.SkipSavingLog)
                        {
                            _context.AuditLog.Add(record);
                        }
                    }
                }
            }
        }
Esempio n. 5
0
        public AuditLog ToAudit(DbContext context)
        {
            var      auditer = new LogAuditor(Entry);
            AuditLog record  = auditer.CreateLogRecord(eventType, context);

            if (record == null)
            {
                return(null);
            }
            record.ValorOriginal = OldValues.Count == 0 ? null : JsonConvert.SerializeObject(OldValues);
            record.ValorNuevo    = NewValues.Count == 0 ? null : JsonConvert.SerializeObject(NewValues);
            return(record);
        }
Esempio n. 6
0
        public void Us60ShouldIdentifyRestViolationWithoutLeadingAndTrailingOff()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 07:05:20"), DateTime.Parse("10/1/2018 15:35:20"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),
            };

            var driverViolationTable      = new LogAuditor().Audit(logs);
            DutyStatusViolation violation = new DutyStatusViolation(DateTime.Parse("10/1/2018 15:05:20"), DateTime.Parse("10/1/2018 15:35:20"), Enums.ViolationType.Rest, Enums.Jurisdiction.Us60);

            Assert.IsTrue(driverViolationTable["1"].Count() == 1);
            Assert.IsTrue(driverViolationTable["1"].First(g => g.ViolationType == Enums.ViolationType.Rest).Equals(violation));
        }
Esempio n. 7
0
        public void Us60ShouldIdentifyDrivingViolation()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 00:00:00"), DateTime.Parse("10/1/2018 07:05:20"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 07:05:20"), DateTime.Parse("10/1/2018 14:05:20"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 14:05:20"), DateTime.Parse("10/1/2018 14:37:32"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 14:37:32"), DateTime.Parse("10/1/2018 19:14:32"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 19:14:32"), DateTime.Parse("10/2/2018 00:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),
            };

            var driverViolationTable      = new LogAuditor().Audit(logs);
            DutyStatusViolation violation = new DutyStatusViolation(DateTime.Parse("10/1/2018 18:37:32"), DateTime.Parse("10/1/2018 19:14:32"), Enums.ViolationType.Driving, Enums.Jurisdiction.Us60);

            Assert.IsTrue(driverViolationTable["1"].Count() == 1);
            Assert.IsTrue(driverViolationTable["1"].First(g => g.ViolationType == Enums.ViolationType.Driving).Equals(violation));
        }
Esempio n. 8
0
        public void Us60ShouldIdentifyOnDutyViolationWithoutLeadingAndTrailingOff()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 07:05:20"), DateTime.Parse("10/1/2018 07:16:11"), Enums.DutyStatus.OnDutyNotDriving, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 07:16:11"), DateTime.Parse("10/1/2018 12:14:22"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 12:14:22"), DateTime.Parse("10/1/2018 12:45:02"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 12:45:02"), DateTime.Parse("10/1/2018 17:50:54"), Enums.DutyStatus.OnDutyNotDriving, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 17:50:54"), DateTime.Parse("10/1/2018 19:05:55"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 19:05:55"), DateTime.Parse("10/1/2018 21:59:41"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),
            };

            var driverViolationTable            = new LogAuditor().Audit(logs);
            DutyStatusViolation ondutyViolation = new DutyStatusViolation(DateTime.Parse("10/1/2018 21:05:20"), DateTime.Parse("10/1/2018 21:59:41"), Enums.ViolationType.OnDuty, Enums.Jurisdiction.Us60);

            Assert.IsTrue(driverViolationTable["1"].Count() == 1);
            Assert.IsTrue(driverViolationTable["1"].First(g => g.ViolationType == Enums.ViolationType.OnDuty).Equals(ondutyViolation));
        }
Esempio n. 9
0
        public void Us60ShouldGetOnDutyDrivingRestAndWeeklyViolation()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 07:00:00"), DateTime.Parse("10/11/2018 21:01:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60)
            };

            var driverViolationTable = new LogAuditor().Audit(logs);

            var restViolation   = new DutyStatusViolation(DateTime.Parse("10/1/2018 15:00:00"), DateTime.Parse("10/11/2018 21:01:00"), Enums.ViolationType.Rest, Enums.Jurisdiction.Us60);
            var onDutyViolation = new DutyStatusViolation(DateTime.Parse("10/1/2018 21:00:00"), DateTime.Parse("10/11/2018 21:01:00"), Enums.ViolationType.OnDuty, Enums.Jurisdiction.Us60);
            var weekly          = new DutyStatusViolation(DateTime.Parse("10/3/2018 19:00:00"), DateTime.Parse("10/11/2018 21:01:00"), Enums.ViolationType.Weekly, Enums.Jurisdiction.Us60);
            var driving         = new DutyStatusViolation(DateTime.Parse("10/1/2018 18:00:00"), DateTime.Parse("10/11/2018 21:01:00"), Enums.ViolationType.Driving, Enums.Jurisdiction.Us60);

            Assert.IsTrue(driverViolationTable["1"].First(f => f.ViolationType == Enums.ViolationType.Rest).Equals(restViolation));
            Assert.IsTrue(driverViolationTable["1"].First(f => f.ViolationType == Enums.ViolationType.OnDuty).Equals(onDutyViolation));
            Assert.IsTrue(driverViolationTable["1"].FirstOrDefault(f => f.ViolationType == Enums.ViolationType.Weekly).Equals(weekly));
            Assert.IsTrue(driverViolationTable["1"].First(f => f.ViolationType == Enums.ViolationType.Driving).Equals(driving));
        }
Esempio n. 10
0
        public void Us60ShouldCorrectlyIdentifyViolationAfterSplitSleeper()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 00:00:00"), DateTime.Parse("10/1/2018 08:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 8
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 08:00:00"), DateTime.Parse("10/1/2018 16:00:00"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),          //sleeper 8
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 16:00:00"), DateTime.Parse("10/1/2018 19:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 3
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 19:00:00"), DateTime.Parse("10/1/2018 22:00:00"), Enums.DutyStatus.OnDutyNotDriving, Enums.Jurisdiction.Us60), //onduty 3
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 22:00:00"), DateTime.Parse("10/2/2018 00:00:00"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),          //sleeper 2

                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 00:00:00"), DateTime.Parse("10/2/2018 08:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 8
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 08:00:00"), DateTime.Parse("10/2/2018 16:00:00"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),          //sleeper 8
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 16:00:00"), DateTime.Parse("10/2/2018 19:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 3 <<since no reset this is in violation
            };

            var driverViolationTable  = new LogAuditor().Audit(logs);
            DutyStatusViolation daily = new DutyStatusViolation(DateTime.Parse("10/2/2018 16:00:00"), DateTime.Parse("10/2/2018 19:00:00"), Enums.ViolationType.OnDuty, Enums.Jurisdiction.Us60);

            Assert.IsTrue(driverViolationTable["1"].First(f => f.ViolationType == Enums.ViolationType.OnDuty).Equals(daily));
        }
 public void AuditAdditions(object userName, IEnumerable <EntityEntry> addedEntries, ExpandoObject metadata)
 {
     // Get all Added entities
     foreach (EntityEntry ent in addedEntries)
     {
         using (LogAuditor auditer = new LogAuditor(ent))
         {
             AuditLog record = auditer.CreateLogRecord(userName, EventType.Added, _context, metadata);
             if (record != null)
             {
                 AuditLogGeneratedEventArgs arg = new AuditLogGeneratedEventArgs(record, ent.Entity, metadata);
                 RaiseOnAuditLogGenerated(this, arg);
                 if (!arg.SkipSavingLog)
                 {
                     _context.AuditLog.Add(record);
                 }
             }
         }
     }
 }
Esempio n. 12
0
        public void Us60ShouldCorrectlyIdentifySplitSleeper()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 00:00:00"), DateTime.Parse("10/1/2018 08:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 8
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 08:00:00"), DateTime.Parse("10/1/2018 16:00:00"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),          //sleeper 8
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 16:00:00"), DateTime.Parse("10/1/2018 19:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 3
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 19:00:00"), DateTime.Parse("10/1/2018 22:00:00"), Enums.DutyStatus.OnDutyNotDriving, Enums.Jurisdiction.Us60), //onduty 3
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 22:00:00"), DateTime.Parse("10/2/2018 00:00:00"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),          //sleeper 2

                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 00:00:00"), DateTime.Parse("10/2/2018 08:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 8
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 08:00:00"), DateTime.Parse("10/2/2018 16:00:00"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),          //sleeper 8
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 16:00:00"), DateTime.Parse("10/2/2018 19:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60),          //drive 3
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 19:00:00"), DateTime.Parse("10/2/2018 22:00:00"), Enums.DutyStatus.OnDutyNotDriving, Enums.Jurisdiction.Us60), //onduty 3
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 22:00:00"), DateTime.Parse("10/3/2018 00:00:00"), Enums.DutyStatus.Sleeper, Enums.Jurisdiction.Us60),          //sleeper 2
            };

            var driverViolationTable = new LogAuditor().Audit(logs);

            Assert.IsTrue(driverViolationTable.Count() == 0);
        }
Esempio n. 13
0
        public void Us60ShouldCorrectlyCalculateWeeklyViolationWith1stEventOffDutyNotReset()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("9/30/2018 23:00"), DateTime.Parse("10/1/2018 00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 07:00:00"), DateTime.Parse("10/1/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //10
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 17:00:00"), DateTime.Parse("10/2/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 07:00:00"), DateTime.Parse("10/2/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //20
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 17:00:00"), DateTime.Parse("10/3/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/3/2018 07:00:00"), DateTime.Parse("10/3/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //30
                new DutyStatusEvent("1", DateTime.Parse("10/3/2018 17:00:00"), DateTime.Parse("10/4/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/4/2018 07:00:00"), DateTime.Parse("10/4/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //40
                new DutyStatusEvent("1", DateTime.Parse("10/4/2018 17:00:00"), DateTime.Parse("10/5/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/5/2018 07:00:00"), DateTime.Parse("10/5/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //50
                new DutyStatusEvent("1", DateTime.Parse("10/5/2018 17:00:00"), DateTime.Parse("10/6/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/6/2018 07:00:00"), DateTime.Parse("10/6/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //60
                new DutyStatusEvent("1", DateTime.Parse("10/6/2018 17:00:00"), DateTime.Parse("10/7/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/7/2018 07:00:00"), DateTime.Parse("10/7/2018 19:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //72 <<- violation at 10/7 17:00:00
                new DutyStatusEvent("1", DateTime.Parse("10/7/2018 19:00:00"), DateTime.Parse("10/8/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/8/2018 07:00:00"), DateTime.Parse("10/8/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //82 <<- violation at 10/8 07:00:00
                new DutyStatusEvent("1", DateTime.Parse("10/8/2018 17:00:00"), DateTime.Parse("10/9/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),
            };

            var driverViolationTable = new LogAuditor().Audit(logs);

            var weekly  = new DutyStatusViolation(DateTime.Parse("10/7/2018 07:00:00"), DateTime.Parse("10/7/2018 19:00:00"), Enums.ViolationType.Weekly, Enums.Jurisdiction.Us60);
            var weekly2 = new DutyStatusViolation(DateTime.Parse("10/8/2018 07:00:00"), DateTime.Parse("10/8/2018 17:00:00"), Enums.ViolationType.Weekly, Enums.Jurisdiction.Us60);

            Assert.IsTrue(driverViolationTable["1"].First(f => f.ViolationType == Enums.ViolationType.Weekly).Equals(weekly));
            Assert.IsTrue(driverViolationTable["1"].Last(f => f.ViolationType == Enums.ViolationType.Weekly).Equals(weekly2));
        }
Esempio n. 14
0
        public void Us60Rolling70WeeklyTestNoViolations()
        {
            Stopwatch sw = new Stopwatch();

            int            driverCount = 100;
            DateTimeOffset now         = DateTimeOffset.Now;
            var            logs        = new List <DutyStatusEvent>();

            for (var i = 0; i < driverCount; i++)
            {
                for (var j = 180; j >= 0; j--)
                {
                    if (j % 5 == 0)
                    {
                        logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 0, 0, 0), new DateTime(now.AddDays(-j + 2).Year, now.AddDays(-j + 2).Month, now.AddDays(-j + 2).Day, 0, 0, 0), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60));
                        j--;
                    }
                    else
                    {
                        logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 0, 0, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 7, 0, 0), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60));
                        logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 7, 0, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 0, 0), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60));
                        logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 0, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 30, 0), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60));
                        logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 15, 30, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 18, 30, 0), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60));
                        logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 18, 30, 0), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 21, 00, 0), Enums.DutyStatus.OnDutyNotDriving, Enums.Jurisdiction.Us60));
                        logs.Add(new DutyStatusEvent(i.ToString(), new DateTime(now.AddDays(-j).Year, now.AddDays(-j).Month, now.AddDays(-j).Day, 21, 00, 0), new DateTime(now.AddDays(-j + 1).Year, now.AddDays(-j + 1).Month, now.AddDays(-j + 1).Day, 0, 0, 0), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60));
                    }
                }
            }

            sw.Start();
            var driverViolationTable = new LogAuditor().Audit(logs);

            sw.Stop();

            Assert.IsTrue(driverViolationTable.Count() == 0);
            Assert.IsTrue(sw.Elapsed < TimeSpan.FromSeconds(1));
        }
Esempio n. 15
0
        public void Us60ShouldCorrectlyCalculateWeeklyViolationsRollingDays()
        {
            var logs = new List <DutyStatusEvent>
            {
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 01:00:00"), DateTime.Parse("10/1/2018 18:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //17
                new DutyStatusEvent("1", DateTime.Parse("10/1/2018 18:00:00"), DateTime.Parse("10/2/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 07:00:00"), DateTime.Parse("10/2/2018 12:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //5
                new DutyStatusEvent("1", DateTime.Parse("10/2/2018 12:00:00"), DateTime.Parse("10/3/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/3/2018 07:00:00"), DateTime.Parse("10/3/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //10
                new DutyStatusEvent("1", DateTime.Parse("10/3/2018 17:00:00"), DateTime.Parse("10/4/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/4/2018 07:00:00"), DateTime.Parse("10/4/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //10
                new DutyStatusEvent("1", DateTime.Parse("10/4/2018 17:00:00"), DateTime.Parse("10/5/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/5/2018 07:00:00"), DateTime.Parse("10/5/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //10
                new DutyStatusEvent("1", DateTime.Parse("10/5/2018 17:00:00"), DateTime.Parse("10/6/2018 13:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/6/2018 13:00:00"), DateTime.Parse("10/6/2018 17:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //4
                new DutyStatusEvent("1", DateTime.Parse("10/6/2018 17:00:00"), DateTime.Parse("10/7/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/7/2018 09:00:00"), DateTime.Parse("10/7/2018 13:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //4
                new DutyStatusEvent("1", DateTime.Parse("10/7/2018 13:00:00"), DateTime.Parse("10/8/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/8/2018 03:00:00"), DateTime.Parse("10/8/2018 20:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //17
                new DutyStatusEvent("1", DateTime.Parse("10/8/2018 20:00:00"), DateTime.Parse("10/9/2018 04:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),

                new DutyStatusEvent("1", DateTime.Parse("10/9/2018 04:00:00"), DateTime.Parse("10/9/2018 09:00:00"), Enums.DutyStatus.Driving, Enums.Jurisdiction.Us60), //5
                new DutyStatusEvent("1", DateTime.Parse("10/9/2018 09:00:00"), DateTime.Parse("10/10/2018 07:00:00"), Enums.DutyStatus.OffDuty, Enums.Jurisdiction.Us60),
            };

            var driverViolationTable = new LogAuditor().Audit(logs);

            Assert.IsTrue(driverViolationTable["1"].FirstOrDefault(f => f.ViolationType == Enums.ViolationType.Weekly) == null);
        }