public IActionResult Put(Guid guid, [FromBody] ViewModels.Api.Competition value) { var current = database.Competitions .Include(x => x.Constraints) .Include(x => x.Categories) .Include(x => x.Jury) .Include(x => x.Prizes) .Where(x => x.Guid == guid) .Single(); value.Guid = guid; var competition = Competition.FromApiViewModel(value); database.Entry <Competition>(current).CurrentValues.SetValues(competition); current.Categories.Clear(); current.Constraints.Clear(); current.Jury.Clear(); current.Prizes.Clear(); current.Categories.AddRange(competition.Categories); current.Constraints.AddRange(competition.Constraints); current.Jury.AddRange(competition.Jury); current.Prizes.AddRange(competition.Prizes); database.SaveChanges(); return(Ok()); }
public IActionResult Post([FromBody] ViewModels.Api.Competition value) { var competition = Competition.FromApiViewModel(value); competition.Guid = Guid.NewGuid(); competition.CreatorUserGuid = HttpContext.Session.Get <User>("user").Guid; database.Competitions.Add(competition); database.SaveChanges(); return(Ok()); }
public void UpdatingCompetitionWorking() { Database.Setup(); Guid guid; Microsoft.AspNetCore.Mvc.IActionResult controllerResult; var dataset = Database.Setup(); using (var db = Database.Use(dataset)) { var competition = db.Competitions .Include(x => x.Constraints) .Include(x => x.Categories) .Include(x => x.Prizes) .First(); guid = competition.Guid; var controller = new Rauthor.Controllers.Api.CompetitionController(db); var updated = new ViewModels.Api.Competition() { Categories = competition.Categories.Select(x => x.CategoryGuid).ToList(), Constraints = competition.Constraints, Description = $"[Updated]", EndDate = competition.EndDate, StartDate = competition.StartDate, JuryGuids = competition.Jury.Select(x => x.JuryUserGuid).ToList(), Prizes = competition.Prizes.Append(new Prize() { BeginPlace = 100, EndPlace = 100, Value = "Looser prize" }).ToList(), Title = competition.Title, ShortDescription = competition.ShortDescription, }; controllerResult = controller.Put(guid, updated); } Assert.IsType <OkResult>(controllerResult); using (var db = Database.Use(dataset)) { var competition = db.Competitions .Include(x => x.Prizes) .Single(x => x.Guid == guid); Assert.Equal("[Updated]", competition.Description); Assert.Contains("Looser prize", competition.Prizes.Select(x => x.Value)); Assert.Contains("Looser prize", db.Prizes.Where(x => x.CompetitionGuid == competition.Guid).Select(x => x.Value)); } }
/// <summary> /// Возвращает экземпляр Competition с заполненными полями и навигационными свойствами, на основе /// модели представления. /// </summary> public static Competition FromApiViewModel(ViewModels.Api.Competition viewModel) { var competition = new Competition() { Guid = viewModel.Guid ?? default, StartDate = viewModel.StartDate, EndDate = viewModel.EndDate, Description = viewModel.Description, ShortDescription = viewModel.ShortDescription, Title = viewModel.Title, }; var juryRefernces = viewModel.JuryGuids.Select(juryGuid => new CompetitionRelJury() { CompetitionGuid = competition.Guid, JuryUserGuid = juryGuid }); var categoryReferences = viewModel.Categories.Select(categoryGuid => new CompetitionRelCategory() { CompetitionGuid = competition.Guid, CategoryGuid = categoryGuid }); var constrains = viewModel.Constraints.Select(x => { x.CompetitionGuid = competition.Guid; return(x); }); var prizes = viewModel.Prizes.Select(x => { x.CompetitionGuid = competition.Guid; return(x); }); competition.Jury = juryRefernces.ToList(); competition.Categories = categoryReferences.ToList(); competition.Constraints = constrains.ToList(); competition.Prizes = prizes.ToList(); return(competition); }
public void PostingNewCompetitionWorking() { var newCompetitionGuid = Guid.NewGuid(); var dataset = Database.Setup(); using (var db = Database.Use(dataset)) { var controller = new Rauthor.Controllers.Api.CompetitionController(db); var manager = db.Users.Include(x => x.Roles) .Where(x => x.Roles.Select(y => y.UserRole).Contains(UserRole.Manager)) .First(); controller.HttpContext.Session.Set( "user", manager); var competition = new ViewModels.Api.Competition() { ManagerSocialLinks = new List <string>() { "vk.com", "twitter.com" }, Categories = new List <Guid>() { db.CompetitionCategories.First().Guid }, Constraints = new List <CompetitionConstraint>() { new CompetitionConstraint() { CheckedValue = "Sample1", Max = 10, Min = 5 }, new CompetitionConstraint() { CheckedValue = "Sample2", Max = 10, Min = 5 } }, JuryGuids = new List <Guid>() { db.Roles.First(x => x.UserRole == UserRole.Jury).Guid }, Description = "Sample description", EndDate = new DateTime(), PublicationDate = new DateTime(), StartDate = new DateTime(), ManagerEmail = "sample@email", ManagerPhoneNumber = "+sample", Prizes = new List <Prize>() { new Prize() { BeginPlace = 1, EndPlace = 1, Value = "First place prize" }, new Prize() { BeginPlace = 2, EndPlace = 10, Value = "Top-10 prize" } }, ShortDescription = "Sample short description", Title = "Competition {997DD1CD-FC9C-4A2A-AAE2-9EB0AA668CAD}" }; controller.Post(competition); } using (var db = Database.Use(dataset)) { var competition = db.Competitions .Include(x => x.Categories) .Include(x => x.Constraints) .Include(x => x.Jury) .Include(x => x.Prizes) .Where(x => x.Title == "Competition {997DD1CD-FC9C-4A2A-AAE2-9EB0AA668CAD}") .Single(); var constrains = db.CompetitionConstraints.Where(x => x.CompetitionGuid == competition.Guid); Assert.NotEqual(new Guid(), competition.Guid); Assert.Contains("Sample1", constrains.Select(x => x.CheckedValue)); Assert.Contains("Sample2", constrains.Select(x => x.CheckedValue)); Assert.Contains("First place prize", competition.Prizes.Select(x => x.Value)); Assert.Contains("Top-10 prize", competition.Prizes.Select(x => x.Value)); Assert.True(competition.Jury.Select(x => x.Jury).Count() > 0); Assert.True(competition.Categories.Select(x => x.Category).Count() > 0); } }