Exemple #1
0
        public void Initialise_CreatesTable_Projects()
        {
            _dbContext.Initialise();
            const string sql = "SELECT * FROM Projects";

            _dbContext.ExecuteNonQuery(sql);

            Assert.IsTrue(File.Exists(_filePath));
        }
        public void GetUnprocessedLogFileCount_Integration_ReturnsValidCount()
        {
            string filePath       = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest");
            int    processedCount = new Random().Next(0, 5);

            using (SQLiteDbContext dbContext = new SQLiteDbContext(filePath))
            {
                dbContext.Initialise();

                IProjectRepository projectRepo = new ProjectRepository(dbContext);

                ProjectModel project = DataHelper.CreateProjectModel();
                DataHelper.InsertProjectModel(dbContext, project);

                ProjectModel project2 = DataHelper.CreateProjectModel();
                DataHelper.InsertProjectModel(dbContext, project2);

                // create records
                const string sql = @"INSERT INTO LogFiles (ProjectId, FileName, FileHash, CreateDate, FileLength, RecordCount, Status) VALUES (@ProjectId, @FileName, @FileHash, @CreateDate, @FileLength, @RecordCount, @Status)";

                // create two processing record - this should be included
                LogFileModel logFile = DataHelper.CreateLogFileModel(project.Id);
                logFile.Status = LogFileStatus.Processing;
                dbContext.ExecuteNonQuery(sql, logFile);

                // create a processing record - this should be included
                logFile        = DataHelper.CreateLogFileModel(project.Id);
                logFile.Status = LogFileStatus.Processing;
                dbContext.ExecuteNonQuery(sql, logFile);

                // create an error records - this should not be included
                logFile        = DataHelper.CreateLogFileModel(project.Id);
                logFile.Status = LogFileStatus.Error;
                dbContext.ExecuteNonQuery(sql, logFile);

                // create a pending record for another project - this should also not be included
                logFile        = DataHelper.CreateLogFileModel(project2.Id);
                logFile.Status = LogFileStatus.Processing;
                dbContext.ExecuteNonQuery(sql, logFile);

                int result = projectRepo.GetUnprocessedLogFileCount(project.Id);
                Assert.AreEqual(2, result);
            }
        }
        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);
            }
        }