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());
        }
Пример #3
0
        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));
            }
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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);
            }
        }