public static RequestPageLoadTimeModel CreateRequestPageLoadTimeModel() { Random r = new Random(); RequestPageLoadTimeModel model = new RequestPageLoadTimeModel(); model.AvgTimeTakenMilliseconds = r.Next(1, 5000); model.RequestCount = r.Next(1, 1000000); model.UriStemAggregate = Path.GetRandomFileName() + "/" + Path.GetRandomFileName(); return(model); }
public void GetPageLoadTimes_Integration_ReturnsData() { string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest"); List <W3CEvent> logEvents = new List <W3CEvent>(); logEvents.Add(CreateW3CEvent("PageA", 17)); logEvents.Add(CreateW3CEvent("PageA", 13)); logEvents.Add(CreateW3CEvent("PageA", 21)); logEvents.Add(CreateW3CEvent("PageA", 9)); logEvents.Add(CreateW3CEvent("PageA", 40)); logEvents.Add(CreateW3CEvent("PageB", 1000)); logEvents.Add(CreateW3CEvent("PageB", 3000)); using (SQLiteDbContext dbContext = new SQLiteDbContext(filePath)) { dbContext.Initialise(); dbContext.BeginTransaction(); ICreateRequestBatchCommand createRequestBatchCommand = new CreateRequestBatchCommand(dbContext, new RequestValidator()); IRequestRepository requestRepo = new RequestRepository(dbContext); // create the project ProjectModel project = DataHelper.CreateProjectModel(); DataHelper.InsertProjectModel(dbContext, project); // create the log file record LogFileModel logFile = DataHelper.CreateLogFileModel(project.Id); DataHelper.InsertLogFileModel(dbContext, logFile); // create the requests createRequestBatchCommand.Execute(logFile.Id, logEvents); // update all requests so the aggregate is different to the stem string sql = "UPDATE Requests SET UriStemAggregate = UriStem || '__'"; dbContext.ExecuteNonQuery(sql); IEnumerable <RequestPageLoadTimeModel> result = requestRepo.GetPageLoadTimes(project.Id); Assert.AreEqual(2, result.Count()); RequestPageLoadTimeModel pageAResult = result.Where(x => x.UriStemAggregate == "PageA__").SingleOrDefault(); Assert.IsNotNull(pageAResult); Assert.AreEqual(5, pageAResult.RequestCount); Assert.AreEqual(20, pageAResult.AvgTimeTakenMilliseconds); RequestPageLoadTimeModel pageBResult = result.Where(x => x.UriStemAggregate == "PageB__").SingleOrDefault(); Assert.IsNotNull(pageBResult); Assert.AreEqual(2, pageBResult.RequestCount); Assert.AreEqual(2000, pageBResult.AvgTimeTakenMilliseconds); } }
public void AvgLoadTimes_ValidProjectId_GetsAverageLoadTimesFromDatabase() { int projectId = new Random().Next(1, 1000); // setup var currentUser = new UserIdentity() { Id = Guid.NewGuid(), UserName = "******" }; var browser = new Browser((bootstrapper) => bootstrapper.Module(new ProjectModule(_dbContext, _projectValidator, _createProjectCommand, _deleteProjectCommand, _projectRepo, _logFileRepo, _requestRepo, _projectRequestAggregateRepo)) .RequestStartup((container, pipelines, context) => { context.CurrentUser = currentUser; }) ); RequestPageLoadTimeModel loadTime1 = DataHelper.CreateRequestPageLoadTimeModel(); RequestPageLoadTimeModel loadTime2 = DataHelper.CreateRequestPageLoadTimeModel(); RequestPageLoadTimeModel loadTime3 = DataHelper.CreateRequestPageLoadTimeModel(); _requestRepo.GetPageLoadTimes(projectId).Returns(new RequestPageLoadTimeModel[] { loadTime1, loadTime2, loadTime3 }); // execute var url = Actions.Project.AvgLoadTimes(projectId); var response = browser.Post(url, (with) => { with.HttpRequest(); with.FormsAuth(currentUser.Id, new Nancy.Authentication.Forms.FormsAuthenticationConfiguration()); }); // assert Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); _requestRepo.Received(1).GetPageLoadTimes(projectId); IEnumerable <RequestPageLoadTimeModel> result = JsonConvert.DeserializeObject <IEnumerable <RequestPageLoadTimeModel> >(response.Body.AsString()); Assert.AreEqual(3, result.Count()); }