public void AverageTimeBetweenStatusChanges_multiple_documents_unique_change() { var service = new ReportingService(null, null); var author = new AppUser("Test", "User", UserRole.Operator); var now = DateTime.Now; var documentHistory1 = new List <DocumentHistoryEntry> { new DocumentHistoryEntry(author, DocumentStatus.Created, "", now), new DocumentHistoryEntry(author, DocumentStatus.Registered, "", now + TimeSpan.FromMinutes(10)), new DocumentHistoryEntry(author, DocumentStatus.Approved, "", now + TimeSpan.FromMinutes(20)), new DocumentHistoryEntry(author, DocumentStatus.Canceled, "", now + TimeSpan.FromMinutes(30)), }; var documentHistory2 = new List <DocumentHistoryEntry> { new DocumentHistoryEntry(author, DocumentStatus.Created, "", now), new DocumentHistoryEntry(author, DocumentStatus.Registered, "", now + TimeSpan.FromMinutes(20)), new DocumentHistoryEntry(author, DocumentStatus.Approved, "", now + TimeSpan.FromMinutes(60)), }; var createdRegistered = new StatusChange(DocumentStatus.Created, DocumentStatus.Registered); var registeredApproved = new StatusChange(DocumentStatus.Registered, DocumentStatus.Approved); var approvedCanceled = new StatusChange(DocumentStatus.Approved, DocumentStatus.Canceled); var documents = new List <IEnumerable <DocumentHistoryEntry> > { documentHistory1, documentHistory2 }; var stats = service.AverageTimeBetweenStatusChanges(documents.AsQueryable()); Assert.AreEqual(3, stats.Count); Assert.IsNotNull(stats[createdRegistered]); Assert.IsNotNull(stats[registeredApproved]); Assert.IsNotNull(stats[approvedCanceled]); Assert.AreEqual(15, stats[createdRegistered].TotalMinutes); Assert.AreEqual(25, stats[registeredApproved].TotalMinutes); Assert.AreEqual(10, stats[approvedCanceled].TotalMinutes); }