public void Update_the_project() { var project = SetUpFullProjectWithAuthentication(); var forCode = new ProjectFieldOfResearch { Code = Builder <FieldOfResearch> .CreateNew() .With(o => o.Id = Pick <string> .RandomItemFrom(new[] { "ABC", "DEF", "GHI" })) .And(o => o.Name = string.Format("{0} Name", o.Id)) .Build() }; var seoCode = new ProjectSocioEconomicObjective { Code = Builder <SocioEconomicObjective> .CreateNew() .With(o => o.Id = Pick <string> .RandomItemFrom(new[] { "XYZ", "RST", "UVW" })) .And(o => o.Name = string.Format("{0} Name", o.Id)) .Build() }; var vm = new ProjectDetailsViewModel { Id = project.Id, Status = PickHelper.RandomEnumExcept(project.Status), // deliberately change the source type to an invalid one SourceProjectType = PickHelper.RandomEnumExcept(project.SourceProjectType, SourceProjectType.None), EndDate = string.Format("{0:dd-MM-yyyy}", (project.EndDate ?? DateTime.Today).AddDays(10)), StartDate = string.Format("{0:dd-MM-yyyy}", (project.StartDate ?? DateTime.Today).AddDays(-10)), Description = "aut viam inveniam aut faciam", FieldsOfResearch = project.FieldsOfResearch.Except(project.FieldsOfResearch.Take(1)).Union(new[] { forCode }).Cast <ClassificationBase>().ToList(), SocioEconomicObjectives = project.SocioEconomicObjectives.Except(project.SocioEconomicObjectives.Take(1)).Union(new[] { seoCode }).Cast <ClassificationBase>().ToList(), PrincipalInvestigator = project.Parties.Single(o => o.Relationship == ProjectRelationship.PrincipalInvestigator).Party, ArcFunder = new ArcProjectFunderViewModel { GrantNumber = "BYC980", IsFunded = true }, NmhrcFunder = new NmhrcProjectFunderViewModel { IsFunded = false }, Keywords = "other keywords", Title = "crede quod habes, et habes" }; _controller.WithCallTo(c => c.Project(vm)).ShouldRedirectTo <DmpController>(_dmpController.GetType().GetMethod("Edit", new[] { typeof(int), typeof(int) })); _projectRepository.Received().Save(Arg.Is <Project>(p => p.Description == vm.Description)); _projectRepository.Received().Save(Arg.Is <Project>(p => p.Title == vm.Title)); _projectRepository.Received().Save(Arg.Is <Project>(p => p.StartDate == DateTime.Parse(vm.StartDate))); _projectRepository.Received().Save(Arg.Is <Project>(p => p.EndDate == DateTime.Parse(vm.EndDate))); _projectRepository.Received().Save(Arg.Is <Project>(p => p.Keywords == vm.Keywords)); _projectRepository.Received().Save(Arg.Is <Project>(p => p.Status == vm.Status)); _projectRepository.Received().Save(Arg.Is <Project>(p => p.SourceProjectType == SourceProjectType.DMP)); _projectRepository.Received().Save(Arg.Is <Project>(p => p.Funders.Count() == 1)); _projectRepository.Received().Save(Arg.Is <Project>(p => p.Funders.Count(o => o.Funder == Funder.ARC && o.GrantNumber == vm.ArcFunder.GrantNumber) == 1)); _projectRepository.Received().Save(Arg.Is <Project>(p => p.SocioEconomicObjectives.All(o => vm.SocioEconomicObjectives.Any(q => q.Code.Id == o.Code.Id)))); _projectRepository.Received().Save(Arg.Is <Project>(p => p.FieldsOfResearch.All(o => vm.FieldsOfResearch.Any(q => q.Code.Id == o.Code.Id)))); }
public void Update_datadeposit_project() { var project = SetUpFullProjectWithAuthentication(); var forCode = new ProjectFieldOfResearch { Code = Builder<FieldOfResearch>.CreateNew() .With(o => o.Id = Pick<string>.RandomItemFrom(new[] { "ABC", "DEF", "GHI" })) .And(o => o.Name = string.Format("{0} Name", o.Id)) .Build() }; var seoCode = new ProjectSocioEconomicObjective { Code = Builder<SocioEconomicObjective>.CreateNew() .With(o => o.Id = Pick<string>.RandomItemFrom(new[] { "XYZ", "RST", "UVW" })) .And(o => o.Name = string.Format("{0} Name", o.Id)) .Build() }; var vm = new ProjectDetailsViewModel { Id = project.Id, Status = PickHelper.RandomEnumExcept(project.Status), // deliberately change the source type to an invalid one SourceProjectType = PickHelper.RandomEnumExcept(project.SourceProjectType, SourceProjectType.None), EndDate = string.Format("{0:dd-MM-yyyy}", (project.EndDate ?? DateTime.Today).AddDays(10)), StartDate = string.Format("{0:dd-MM-yyyy}", (project.StartDate ?? DateTime.Today).AddDays(-10)), Description = "aut viam inveniam aut faciam", FieldsOfResearch = project.FieldsOfResearch.Except(project.FieldsOfResearch.Take(1)).Union(new[] {forCode}).Cast<ClassificationBase>().ToList(), SocioEconomicObjectives = project.SocioEconomicObjectives.Except(project.SocioEconomicObjectives.Take(1)).Union(new[] {seoCode}).Cast<ClassificationBase>().ToList(), PrincipalInvestigator = project.Parties.Single(o => o.Relationship == ProjectRelationship.PrincipalInvestigator).Party, ArcFunder = new ArcProjectFunderViewModel {GrantNumber = "BYC980", IsFunded = true}, NmhrcFunder = new NmhrcProjectFunderViewModel {IsFunded = false}, Keywords = "other keywords", Title = "crede quod habes, et habes" }; _controller.WithCallTo(c => c.Project(vm)).ShouldRedirectTo<ProjectController>(typeof(ProjectController).GetMethod("Index")); _projectRepository.Received().Save(Arg.Is<Project>(p => p.Description == vm.Description && p.Title == vm.Title && p.StartDate == DateTime.Parse(vm.StartDate) && p.EndDate == DateTime.Parse(vm.EndDate) && p.Keywords == vm.Keywords && p.Status == ProjectStatus.Completed && p.SourceProjectType == SourceProjectType.DEPOSIT && p.Funders.Count() == 0 && p.SocioEconomicObjectives.All(o => vm.SocioEconomicObjectives.Any(q => q.Code.Id == o.Code.Id)) && p.FieldsOfResearch.All(o => vm.FieldsOfResearch.Any(q => q.Code.Id == o.Code.Id)))); }