Esempio n. 1
0
        /// <summary>
        /// Enroll user to contest in API.
        /// </summary>
        /// <param name="username">Username of the user to enroll.</param>
        /// <param name="contestName">Name of the contest to enroll in.</param>
        /// <returns>Return true if successful or an appropriate error message.</returns>
        public async Task <bool> EnrollApiAsync(string contestName)
        {
            var contest = await FindContestByNameAsync(contestName);

            if (contest.IsOpen == false)
            {
                throw new ArgumentException(Exceptions.NotAllowedEnrollment);
            }

            var username = this.contextAccessor.HttpContext.User.Claims.First(i => i.Type == ClaimTypes.NameIdentifier).Value;
            var user     = await this.userService.GetUserByUsernameAsync(username);

            if (await this.dbContext.UserContests.AnyAsync(uc => uc.UserId == user.Id && uc.ContestId == contest.Id))
            {
                throw new ArgumentException(Exceptions.EnrolledUser);
            }

            if (await this.dbContext.Juries.AnyAsync(uc => uc.UserId == user.Id && uc.ContestId == contest.Id))
            {
                throw new ArgumentException(Exceptions.ExistingJury);
            }

            var userContest = new UserContest()
            {
                ContestId = contest.Id,
                UserId    = user.Id,
                IsInvited = true
            };

            await this.dbContext.UserContests.AddAsync(userContest);

            await this.dbContext.SaveChangesAsync();

            return(true);
        }
Esempio n. 2
0
        public IHttpResponse Create(PostContestViewModel model)
        {
            if (this.DbContext.Contests.Any(c => c.Name == model.Name))
            {
                return(this.BadRequestErrorWithView("This contest already exists!"));
            }

            var user = this.DbContext.Users.FirstOrDefault(u => u.FullName == this.User.Username);

            Contest contest = model.To <Contest>();

            this.DbContext.Contests.Add(contest);
            this.DbContext.SaveChanges();

            UserContest userContest = new UserContest()
            {
                UserId    = user.Id,
                ContestId = this.DbContext.Contests.First(c => c.Name == contest.Name).Id
            };

            this.DbContext.UserContests.Add(userContest);
            this.DbContext.SaveChanges();

            return(this.Redirect("/Contests/All"));
        }
Esempio n. 3
0
 public IActionResult RegisterUser([FromForm] UserContestViewModel model)
 {
     //register user in database
     if (ModelState.IsValid)
     {
         var contestUser = new UserContest
         {
             UserContestId = Guid.NewGuid(),
             ContestId     = model.Contest.ContestId,
             UserName      = User.Identity.Name
         };
         _userContestRepository.Create(contestUser);
         _userContestRepository.Save();
         return(RedirectToAction(nameof(Index)));
     }
     return(RedirectToAction(nameof(Index)));
 }
Esempio n. 4
0
        /// <summary>
        /// Invite user in contest.
        /// </summary>
        /// <param name="contestName">Name of the contest to invite to.</param>
        /// <param name="username">Username of the user to invite.</param>
        /// <returns>Return true if successful or an appropriate error message.</returns>
        public async Task <bool> InviteAsync(string contestName, string username)
        {
            var contest = await FindContestByNameAsync(contestName);

            var user = await this.userService.GetUserByUsernameAsync(username);

            if (user.Rank.Name == "Organizer")
            {
                throw new ArgumentException(Exceptions.InvalidParticipant);
            }

            if (await this.dbContext.Juries.AnyAsync(j => j.UserId == user.Id && j.ContestId == contest.Id))
            {
                throw new ArgumentException(Exceptions.ExistingJury);
            }

            if (await this.dbContext.UserContests.AnyAsync(uc => uc.UserId == user.Id && uc.ContestId == contest.Id))
            {
                throw new ArgumentException(Exceptions.EnrolledUser);
            }

            if (contest.IsOpen)
            {
                throw new ArgumentException(Exceptions.NotAllowedInvitation);
            }

            var userContest = new UserContest()
            {
                ContestId = contest.Id,
                UserId    = user.Id,
                IsInvited = true
            };

            await this.dbContext.UserContests.AddAsync(userContest);

            await this.dbContext.SaveChangesAsync();

            return(true);
        }
Esempio n. 5
0
        /// <summary>
        /// Enroll user to contest.
        /// </summary>
        /// <param name="username">Username of the user to enroll.</param>
        /// <param name="contestName">Name of the contest to enroll in.</param>
        /// <returns>Return true if successful or an appropriate error message.</returns>
        public async Task <bool> EnrollAsync(string contestName)
        {
            var contest = await FindContestByNameAsync(contestName);

            if (contest.IsOpen == false)
            {
                throw new ArgumentException(Exceptions.NotAllowedEnrollment);
            }

            var username = this.userManager.GetUserName(this.signInManager.Context.User);
            var temp     = this.signInManager.Context;
            var user     = await this.userService.GetUserByUsernameAsync(username);

            if (await this.dbContext.UserContests.AnyAsync(uc => uc.UserId == user.Id && uc.ContestId == contest.Id))
            {
                throw new ArgumentException(Exceptions.EnrolledUser);
            }

            if (await this.dbContext.Juries.AnyAsync(uc => uc.UserId == user.Id && uc.ContestId == contest.Id))
            {
                throw new ArgumentException(Exceptions.ExistingJury);
            }

            var userContest = new UserContest()
            {
                ContestId = contest.Id,
                UserId    = user.Id,
                IsInvited = true
            };

            await this.dbContext.UserContests.AddAsync(userContest);

            await this.dbContext.SaveChangesAsync();

            return(true);
        }
        public async Task Throw_When_AlreadyUploadedPhotoApi()
        {
            var options = Utils.GetOptions(nameof(Throw_When_AlreadyUploadedPhotoApi));

            var userStore   = new Mock <IUserStore <User> >();
            var userManager = new Mock <UserManager <User> >(userStore.Object, null, null, null,
                                                             null, null, null, null, null);
            var contextAccessor      = new Mock <IHttpContextAccessor>();
            var userPrincipalFactory = new Mock <IUserClaimsPrincipalFactory <User> >().Object;
            var signManager          = new Mock <SignInManager <User> >(userManager.Object, contextAccessor.Object, userPrincipalFactory, null, null, null, null).Object;
            var context = new Mock <HttpContext>();

            contextAccessor.Setup(x => x.HttpContext).Returns(context.Object);
            var contestService = new Mock <IContestService>();
            var userService    = new Mock <IUserService>();

            var userContestService = new Mock <IUserContestService>();

            var newPhotoDTO = new Mock <NewPhotoDTO>().Object;

            newPhotoDTO.Title       = "New photo";
            newPhotoDTO.Description = "New description";
            newPhotoDTO.PhotoUrl    = "www.newphoto.com";
            newPhotoDTO.ContestName = "Birds";

            using (var arrContext = new PhotoContestContext(options))
            {
                await arrContext.Ranks.AddRangeAsync(Utils.SeedRanks());

                await arrContext.Contests.AddRangeAsync(Utils.SeedContests());

                await arrContext.Categories.AddRangeAsync(Utils.SeedCategories());

                await arrContext.Statuses.AddRangeAsync(Utils.SeedStatuses());

                await arrContext.UserContests.AddRangeAsync(Utils.SeedUserContests());

                await arrContext.Juries.AddRangeAsync(Utils.SeedJuries());

                await arrContext.Users.AddRangeAsync(Utils.SeedUsers());

                await arrContext.SaveChangesAsync();

                var userToGet = await arrContext.Users.Skip(2).FirstAsync();

                var claims = new List <Claim>()
                {
                    new Claim(ClaimTypes.NameIdentifier, userToGet.UserName.ToString()),
                };
                var identity        = new ClaimsIdentity(claims);
                var claimsPrincipal = new ClaimsPrincipal(identity);
                contextAccessor.Setup(x => x.HttpContext.User).Returns(claimsPrincipal);
                userService.Setup(x => x.GetUserByUsernameAsync(It.IsAny <string>())).Returns(Task.FromResult(userToGet));
            };
            using (var actContext = new PhotoContestContext(options))
            {
                var contest = await actContext.Contests.Include(c => c.Status).Include(c => c.Category).FirstOrDefaultAsync(c => c.Name == newPhotoDTO.ContestName);

                contestService.Setup(x => x.FindContestByNameAsync(It.IsAny <string>())).Returns(Task.FromResult(contest));
                var userToGet = await actContext.Users.Skip(2).FirstAsync();

                var userContest = new UserContest()
                {
                    ContestId        = contest.Id,
                    UserId           = userToGet.Id,
                    HasUploadedPhoto = true
                };
                await actContext.UserContests.AddAsync(userContest);

                await actContext.SaveChangesAsync();

                userContestService.Setup(x => x.GetAllUserContestsAsync()).Returns(Task.FromResult(actContext.UserContests.ToList()));
                var sut = new PhotoService(actContext, contextAccessor.Object, contestService.Object, userService.Object, userManager.Object, signManager, userContestService.Object);
                await Assert.ThrowsExceptionAsync <ArgumentException>(() => sut.CreateApiAsync(newPhotoDTO));
            }
        }