Example #1
0
        public void Execute_IntegrationTest_SQLite()
        {
            string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest");

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

                IProjectValidator projectValidator = new ProjectValidator();
                IProjectRequestAggregateValidator     validator = new ProjectRequestAggregateValidator();
                ISetLogFileUnprocessedCommand         setLogFileUnprocessedCommand         = Substitute.For <ISetLogFileUnprocessedCommand>();
                ICreateProjectRequestAggregateCommand createProjectRequestAggregateCommand = new CreateProjectRequestAggregateCommand(dbContext, validator, new LogFileRepository(dbContext), setLogFileUnprocessedCommand);

                // create the project first so we have one
                ProjectModel project = DataHelper.CreateProjectModel();
                DataHelper.InsertProjectModel(dbContext, project);

                // create the request aggregate
                ProjectRequestAggregateModel projectRequestAggregate = DataHelper.CreateProjectRequestAggregateModel();
                projectRequestAggregate.ProjectId = project.Id;
                createProjectRequestAggregateCommand.Execute(projectRequestAggregate);

                Assert.Greater(projectRequestAggregate.Id, 0);

                int rowCount = dbContext.ExecuteScalar <int>("SELECT COUNT(*) FROM ProjectRequestAggregates");
                Assert.Greater(rowCount, 0);

                ProjectRequestAggregateModel savedModel = dbContext.Query <ProjectRequestAggregateModel>("SELECT * FROM ProjectRequestAggregates WHERE Id = @Id", new { Id = projectRequestAggregate.Id }).Single();
                Assert.AreEqual(projectRequestAggregate.RegularExpression, savedModel.RegularExpression);
                Assert.AreEqual(projectRequestAggregate.AggregateTarget, savedModel.AggregateTarget);
            }
        }
        public void GetById_Integration_ReturnsData()
        {
            string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest");

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

                IProjectRequestAggregateRepository projectRequestAggregateRepo = new ProjectRequestAggregateRepository(dbContext);

                ICreateProjectCommand                 createProjectCommand                 = new CreateProjectCommand(dbContext, new ProjectValidator());
                ISetLogFileUnprocessedCommand         setLogFileUnprocessedCommand         = Substitute.For <ISetLogFileUnprocessedCommand>();
                ICreateProjectRequestAggregateCommand createProjectRequestAggregateCommand = new CreateProjectRequestAggregateCommand(dbContext, new ProjectRequestAggregateValidator(), new LogFileRepository(dbContext), setLogFileUnprocessedCommand);
                IDeleteProjectRequestAggregateCommand deleteProjectRequestAggregateCommand = new DeleteProjectRequestAggregateCommand(dbContext, projectRequestAggregateRepo, new LogFileRepository(dbContext), setLogFileUnprocessedCommand);

                // create the project
                ProjectModel projectA = DataHelper.CreateProjectModel();
                createProjectCommand.Execute(projectA);

                // create the request aggregate record for ProjectA
                ProjectRequestAggregateModel projectRequestAggregate = DataHelper.CreateProjectRequestAggregateModel();
                projectRequestAggregate.ProjectId = projectA.Id;
                createProjectRequestAggregateCommand.Execute(projectRequestAggregate);
                int id = projectRequestAggregate.Id;
                Assert.Greater(id, 0);

                // fetch the record
                ProjectRequestAggregateModel result = projectRequestAggregateRepo.GetById(id);
                Assert.IsNotNull(result);
                Assert.AreEqual(projectRequestAggregate.Id, id);
                Assert.AreEqual(projectRequestAggregate.RegularExpression, result.RegularExpression);
                Assert.AreEqual(projectRequestAggregate.AggregateTarget, result.AggregateTarget);
            }
        }
Example #3
0
        public void Execute_ValidationSucceeds_JobsRegisteredForLogFiles()
        {
            int id = new Random().Next(1, 1000);
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            _projectRequestAggregateRepo.GetById(id).Returns(model);

            LogFileModel log1 = DataHelper.CreateLogFileModel(model.ProjectId);

            log1.Id = 1;
            LogFileModel log2 = DataHelper.CreateLogFileModel(model.ProjectId);

            log2.Id = 2;
            LogFileModel log3 = DataHelper.CreateLogFileModel(model.ProjectId);

            log3.Id = 3;

            _logFileRepo.GetByProject(model.ProjectId).Returns(new LogFileModel[] { log1, log2, log3 });

            // execute
            _deleteProjectRequestAggregateCommand.Execute(id);

            // assert
            _logFileRepo.Received(1).GetByProject(model.ProjectId);
            _setLogFileUnprocessedCommand.Received(1).Execute(log1.Id);
            _setLogFileUnprocessedCommand.Received(1).Execute(log2.Id);
            _setLogFileUnprocessedCommand.Received(1).Execute(log3.Id);
        }
        public dynamic Save()
        {
            ProjectAggregateViewModel viewModel = this.Bind <ProjectAggregateViewModel>();

            ProjectRequestAggregateModel model = new ProjectRequestAggregateModel();

            model.ProjectId         = viewModel.ProjectId;
            model.AggregateTarget   = viewModel.AggregateTarget;
            model.RegularExpression = viewModel.RegularExpression;
            SaveResultModel result = null;

            _dbContext.BeginTransaction();
            try
            {
                _createProjectRequestAggregateCommand.Execute(model);
                _dbContext.Commit();
                result = new SaveResultModel(model.Id.ToString(), true, Enumerable.Empty <string>().ToArray());
            }
            catch (ValidationException vex)
            {
                result = new SaveResultModel(String.Empty, false, vex.ValidationErrors);
                _dbContext.Rollback();
            }

            return(this.Response.AsJson(result));
        }
        public ProjectRequestAggregateModel Execute(ProjectRequestAggregateModel projectRequestAggregate)
        {
            // validate
            ValidationResult result = _projectRequestAggregateValidator.Validate(projectRequestAggregate);

            if (!result.Success)
            {
                throw new ValidationException(result.Messages);
            }

            // insert new record
            string sql = @"INSERT INTO ProjectRequestAggregates (ProjectId, RegularExpression, AggregateTarget, CreateDate) VALUES (@ProjectId, @RegularExpression, @AggregateTarget, @CreateDate)";

            _dbContext.ExecuteNonQuery(sql, projectRequestAggregate);

            // update the id
            sql = @"select last_insert_rowid()";
            projectRequestAggregate.Id = _dbContext.ExecuteScalar <int>(sql);

            // register jobs so all log files are reprocessed
            IEnumerable <LogFileModel> logFiles = _logFileRepo.GetByProject(projectRequestAggregate.ProjectId);

            foreach (LogFileModel logFile in logFiles)
            {
                _setLogFileUnprocessedCommand.Execute(logFile.Id);
            }

            return(projectRequestAggregate);
        }
Example #6
0
        public void Execute_ValidationSucceeds_JobsRegisteredForLogFiles()
        {
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            _projectRequestAggregateValidator.Validate(model).Returns(new ValidationResult());

            LogFileModel log1 = DataHelper.CreateLogFileModel(model.ProjectId);

            log1.Id = 1;
            LogFileModel log2 = DataHelper.CreateLogFileModel(model.ProjectId);

            log2.Id = 2;
            LogFileModel log3 = DataHelper.CreateLogFileModel(model.ProjectId);

            log3.Id = 3;

            _logFileRepo.GetByProject(model.ProjectId).Returns(new LogFileModel[] { log1, log2, log3 });

            // execute
            _createProjectRequestAggregateCommand.Execute(model);

            // assert
            _logFileRepo.Received(1).GetByProject(model.ProjectId);
            _setLogFileUnprocessedCommand.Received(1).Execute(log1.Id);
            _setLogFileUnprocessedCommand.Received(1).Execute(log2.Id);
            _setLogFileUnprocessedCommand.Received(1).Execute(log3.Id);
        }
        public void Validate_AllFieldsValid_ReturnsSuccess()
        {
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            ValidationResult result = _projectRequestAggregateValidator.Validate(model);

            Assert.IsTrue(result.Success);
            Assert.AreEqual(0, result.Messages.Count);
        }
Example #8
0
        public static ProjectRequestAggregateModel CreateProjectRequestAggregateModel()
        {
            Random r = new Random();
            ProjectRequestAggregateModel model = new ProjectRequestAggregateModel();

            model.Id                = r.Next(1, 1000);
            model.ProjectId         = r.Next(1, 1000);
            model.AggregateTarget   = Path.GetRandomFileName();
            model.RegularExpression = Path.GetRandomFileName();
            return(model);
        }
Example #9
0
        public void Execute_ValidationSucceeds_RecordInserted()
        {
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            _projectRequestAggregateValidator.Validate(model).Returns(new ValidationResult());

            // execute
            _createProjectRequestAggregateCommand.Execute(model);

            // assert
            _dbContext.Received(1).ExecuteNonQuery(Arg.Any <string>(), Arg.Any <object>());
        }
        public void Validate_InvalidAggregateTarget_ReturnsFailure(string aggregateTarget)
        {
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            model.AggregateTarget = aggregateTarget;

            ValidationResult result = _projectRequestAggregateValidator.Validate(model);

            Assert.IsFalse(result.Success);
            Assert.AreEqual(1, result.Messages.Count);
            Assert.IsTrue(result.Messages[0].Contains("Aggregate target"));
        }
        public void Validate_InvalidRegularExpression_ReturnsFailure(string regularExpression)
        {
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            model.RegularExpression = regularExpression;

            ValidationResult result = _projectRequestAggregateValidator.Validate(model);

            Assert.IsFalse(result.Success);
            Assert.AreEqual(1, result.Messages.Count);
            Assert.IsTrue(result.Messages[0].Contains("Regular expression"));
        }
        public void GetAggregatedUriStem_MatchFound_ReturnsAggregateTarget(string originalUriStem, string regEx)
        {
            ProjectRequestAggregateModel aggregateModel = DataHelper.CreateProjectRequestAggregateModel();

            aggregateModel.RegularExpression = regEx;

            ProjectRequestAggregateModel[] requestAggregates = { aggregateModel };

            string result = _requestAggregationService.GetAggregatedUriStem(originalUriStem, requestAggregates);

            Assert.AreEqual(aggregateModel.AggregateTarget, result);
        }
        public void Validate_InvalidProjectId_ReturnsFailure(int projectId)
        {
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            model.ProjectId = projectId;

            ValidationResult result = _projectRequestAggregateValidator.Validate(model);

            Assert.IsFalse(result.Success);
            Assert.AreEqual(1, result.Messages.Count);
            Assert.IsTrue(result.Messages[0].Contains("Project id"));
        }
Example #14
0
        public void Execute_ValidationSucceeds_RecordInserted()
        {
            int id = new Random().Next(1, 1000);
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            _projectRequestAggregateRepo.GetById(id).Returns(model);

            // execute
            _deleteProjectRequestAggregateCommand.Execute(id);

            // assert
            _projectRequestAggregateRepo.Received(1).GetById(id);
            _dbContext.Received(1).ExecuteNonQuery(Arg.Any <string>(), Arg.Any <object>());
        }
Example #15
0
        public void Execute_ValidationFails_ThrowsException()
        {
            ProjectRequestAggregateModel model = DataHelper.CreateProjectRequestAggregateModel();

            _projectRequestAggregateValidator.Validate(model).Returns(new ValidationResult("error"));

            // execute
            TestDelegate del = () => _createProjectRequestAggregateCommand.Execute(model);

            // assert
            Assert.Throws <ValidationException>(del);

            // we shouldn't have even tried to do the insert
            _dbContext.DidNotReceive().ExecuteNonQuery(Arg.Any <string>(), Arg.Any <object>());
        }
Example #16
0
        public void Execute_RecordDoesNotExist_ThrowsException()
        {
            int id = new Random().Next(1, 1000);
            ProjectRequestAggregateModel model = null;

            _projectRequestAggregateRepo.GetById(id).Returns(model);

            // execute
            TestDelegate del = () => _deleteProjectRequestAggregateCommand.Execute(id);

            // assert
            Assert.Throws <InvalidOperationException>(del);

            // we shouldn't have even tried to do the delete
            _dbContext.DidNotReceive().ExecuteNonQuery(Arg.Any <string>(), Arg.Any <object>());
        }
        public void GetByProject_Integration_ReturnsData()
        {
            string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest");

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

                IProjectRequestAggregateRepository projectRequestAggregateRepo = new ProjectRequestAggregateRepository(dbContext);

                ISetLogFileUnprocessedCommand         setLogFileUnprocessedCommand   = Substitute.For <ISetLogFileUnprocessedCommand>();
                ICreateProjectRequestAggregateCommand projectRequestAggregateCommand = new CreateProjectRequestAggregateCommand(dbContext, new ProjectRequestAggregateValidator(), new LogFileRepository(dbContext), setLogFileUnprocessedCommand);

                // create the projects
                ProjectModel projectA = DataHelper.CreateProjectModel();
                DataHelper.InsertProjectModel(dbContext, projectA);
                ProjectModel projectZ = DataHelper.CreateProjectModel();
                DataHelper.InsertProjectModel(dbContext, projectZ);

                // create the request aggregate records for ProjectA
                int numRecords = new Random().Next(5, 10);
                for (var i = 0; i < numRecords; i++)
                {
                    ProjectRequestAggregateModel projectRequestAggregate = DataHelper.CreateProjectRequestAggregateModel();
                    projectRequestAggregate.ProjectId = projectA.Id;
                    projectRequestAggregateCommand.Execute(projectRequestAggregate);
                }

                // create the log file records for ProjectB that should be excluded by the query
                for (var i = 0; i < 5; i++)
                {
                    ProjectRequestAggregateModel projectRequestAggregate = DataHelper.CreateProjectRequestAggregateModel();
                    projectRequestAggregate.ProjectId = projectZ.Id;
                    projectRequestAggregateCommand.Execute(projectRequestAggregate);
                }


                IEnumerable <ProjectRequestAggregateModel> result = projectRequestAggregateRepo.GetByProject(projectA.Id);
                Assert.IsNotNull(result);
                Assert.AreEqual(numRecords, result.Count());
            }
        }
        public ValidationResult Validate(ProjectRequestAggregateModel model)
        {
            ValidationResult result = new ValidationResult();

            if (model.ProjectId <= 0)
            {
                result.Messages.Add("Project id must be a valid number");
            }
            if (String.IsNullOrWhiteSpace(model.AggregateTarget))
            {
                result.Messages.Add("Aggregate target cannot be empty");
            }
            if (String.IsNullOrWhiteSpace(model.RegularExpression))
            {
                result.Messages.Add("Regular expression cannot be empty");
            }

            return(result);
        }
Example #19
0
        public void Execute(int id)
        {
            // load the record up
            ProjectRequestAggregateModel projectRequestAggregate = _projectRequestAggregateRepo.GetById(id);

            if (projectRequestAggregate == null)
            {
                throw new InvalidOperationException(String.Format("No project aggregate request found with id {0}", id));
            }

            // insert new record
            string sql = @"DELETE FROM ProjectRequestAggregates WHERE Id = @Id";

            _dbContext.ExecuteNonQuery(sql, new { Id = id });

            // register jobs so all log files are reprocessed
            IEnumerable <LogFileModel> logFiles = _logFileRepo.GetByProject(projectRequestAggregate.ProjectId);

            foreach (LogFileModel logFile in logFiles)
            {
                _setLogFileUnprocessedCommand.Execute(logFile.Id);
            }
        }
Example #20
0
        public void Aggregates_ValidProjectId_GetsAggregatesFromDatabase()
        {
            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;
            })
                                      );
            ProjectRequestAggregateModel pra1 = DataHelper.CreateProjectRequestAggregateModel();
            ProjectRequestAggregateModel pra2 = DataHelper.CreateProjectRequestAggregateModel();
            ProjectRequestAggregateModel pra3 = DataHelper.CreateProjectRequestAggregateModel();

            _projectRequestAggregateRepo.GetByProject(projectId).Returns(new ProjectRequestAggregateModel[] { pra1, pra2, pra3 });

            // execute
            var url      = Actions.Project.Aggregates(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);
            _projectRequestAggregateRepo.Received(1).GetByProject(projectId);

            IEnumerable <ProjectRequestAggregateModel> result = JsonConvert.DeserializeObject <IEnumerable <ProjectRequestAggregateModel> >(response.Body.AsString());

            Assert.AreEqual(3, result.Count());
        }
Example #21
0
        public void Execute_IntegrationTest_SQLite()
        {
            string filePath = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName() + ".dbtest");

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

                IProjectRequestAggregateRepository projectRequestAggregateRepo = new ProjectRequestAggregateRepository(dbContext);

                ISetLogFileUnprocessedCommand         setLogFileUnprocessedCommand         = Substitute.For <ISetLogFileUnprocessedCommand>();
                ICreateProjectRequestAggregateCommand createProjectRequestAggregateCommand = new CreateProjectRequestAggregateCommand(dbContext, new ProjectRequestAggregateValidator(), new LogFileRepository(dbContext), setLogFileUnprocessedCommand);
                IDeleteProjectRequestAggregateCommand deleteProjectRequestAggregateCommand = new DeleteProjectRequestAggregateCommand(dbContext, projectRequestAggregateRepo, new LogFileRepository(dbContext), setLogFileUnprocessedCommand);

                // create the project first so we have one
                ProjectModel project = DataHelper.CreateProjectModel();
                DataHelper.InsertProjectModel(dbContext, project);

                // create the request aggregate
                ProjectRequestAggregateModel projectRequestAggregate = DataHelper.CreateProjectRequestAggregateModel();
                projectRequestAggregate.ProjectId = project.Id;
                createProjectRequestAggregateCommand.Execute(projectRequestAggregate);
                int id = projectRequestAggregate.Id;
                Assert.Greater(id, 0);

                // fetch the record to make sure it exists
                ProjectRequestAggregateModel record = projectRequestAggregateRepo.GetById(id);
                Assert.IsNotNull(record);

                // delete the request aggregate
                deleteProjectRequestAggregateCommand.Execute(id);

                record = projectRequestAggregateRepo.GetById(id);
                Assert.IsNull(record);
            }
        }