Exemple #1
0
        public async Task <IActionResult> Create(PostCreationBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var userId = this.User.Claims
                         .FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)
                         .Value;

            var post = new Post()
            {
                Title      = model.Title,
                Body       = model.Body,
                AuthorId   = userId,
                DatePosted = DateTime.Now,
                CategoryId = int.Parse(model.CategoryId)
            };

            this.Context.Posts.Add(post);

            await this.Context.SaveChangesAsync();

            notificactionSender.SendNotification(String.Format(Constants.PostCreatedMessage, post.Title), MessageType.Success, controller: this);


            return(Redirect("/home/index"));
        }
Exemple #2
0
        public Post MapPost(PostCreationBindingModel model, string authorId)
        {
            var dbPost = this.mapper.Map <Post>(model);

            dbPost.AuthorId = authorId;

            return(dbPost);
        }
Exemple #3
0
        public IActionResult Create()
        {
            var model = new PostCreationBindingModel
            {
                Categories = GetCategories()
            };

            return(View(model));
        }
Exemple #4
0
        public async Task CreatePostAsync(string creatorId, PostCreationBindingModel model)
        {
            var post = this.Mapper.Map <Post>(model);

            post.CreatorId = creatorId;

            await this.Context.Posts.AddAsync(post);

            this.Context.SaveChanges();
        }
Exemple #5
0
        public async Task WithModelWithIncorrectSelectedSubredditId_ShouldReturnFalse()
        {
            var unitOfWork = this.GetRedditCloneUnitOfWork();
            var dbUser     = new User();

            this.AddUserToDatabase(unitOfWork, dbUser);

            var model  = new PostCreationBindingModel();
            var result = await this.CallCreatePostAsync(unitOfWork, model, dbUser.Id);

            Assert.False(result);
        }
        public async Task <Post> AddPostAsync(PostCreationBindingModel model)
        {
            Validator.EnsureNotNull(model, ValidationConstants.PostDefinedMessage);
            Validator.EnsureStringNotNullOrEmpty(model.Content, ValidationConstants.PostContentMessage);

            var post = this.Mapper.Map <Post>(model);

            await this.DbContext.Posts.AddAsync(post);

            await this.DbContext.SaveChangesAsync();

            return(post);
        }
Exemple #7
0
        public async Task WithModelWithoutSelectedSubredditId_ShouldNotAddNewPost()
        {
            var unitOfWork = this.GetRedditCloneUnitOfWork();
            var dbUser     = new User();

            this.AddUserToDatabase(unitOfWork, dbUser);

            var model  = new PostCreationBindingModel();
            var result = await this.CallCreatePostAsync(unitOfWork, model, dbUser.Id);

            var dbPosts = unitOfWork.Posts.GetAll();

            Assert.Empty(dbPosts);
        }
        public async Task <IActionResult> Add(PostCreationBindingModel model)
        {
            var userId = this.userManager.GetUserId(this.User);

            await this.postService.CreatePostAsync(userId, model);

            this.TempData.Put("__Message", new MessageModel()
            {
                Type    = MessageType.Info,
                Message = "Post created successfully"
            });

            return(RedirectToPage("/Posts/Index", new { id = model.ThreadInstanceId }));
        }
Exemple #9
0
        private async Task <bool> CallCreatePostAsync(
            IRedditCloneUnitOfWork unitOfWork,
            PostCreationBindingModel model,
            string userId)
        {
            var mockedUserManager = CommonTestMethods.GetMockedUserManager();

            CommonTestMethods.SetupMockedUserManagerGetUserId(mockedUserManager, userId);

            var service = this.GetService(unitOfWork, mockedUserManager.Object);

            var mockedClaimsPricipal = new Mock <ClaimsPrincipal>();
            var result = await service.CreatePostAsync(mockedClaimsPricipal.Object, model);

            return(result);
        }
        public async Task <IActionResult> Add(int id)
        {
            var instance = await this.instancesService.GetInstanceAsync(id);

            if (instance == null)
            {
                return(NotFound());
            }

            var model = new PostCreationBindingModel()
            {
                ThreadInstanceId   = id,
                ThreadInstanceName = instance.Name.Substring(2, instance.Name.Length - 2)
            };

            return(View(model));
        }
        public async Task <bool> CreatePostAsync(ClaimsPrincipal user, PostCreationBindingModel model)
        {
            var dbSubreddit = await this.redditCloneUnitOfWork.Subreddits
                              .GetByIdAsync(model.SelectedSubredditId);

            if (dbSubreddit == null)
            {
                return(false);
            }

            var dbUserId = this.userManager.GetUserId(user);
            var dbPost   = this.postMapper.MapPost(model, dbUserId);

            redditCloneUnitOfWork.Posts.Add(dbPost);
            var rowsAffected = await redditCloneUnitOfWork.CompleteAsync();

            return(UnitOfWorkValidator.IsUnitOfWorkCompletedSuccessfully(rowsAffected));
        }
Exemple #12
0
        public async Task WithUserWithIdAndSelectedSubredditId_ShouldAddNewPostWithCorrectAuthorId()
        {
            var unitOfWork  = this.GetRedditCloneUnitOfWork();
            var dbUser      = new User();
            var dbSubreddit = new Subreddit();

            this.AddUserToDatabase(unitOfWork, dbUser);
            this.AddSubredditToDatabase(unitOfWork, dbSubreddit);

            var model = new PostCreationBindingModel()
            {
                SelectedSubredditId = dbSubreddit.Id
            };
            var result = await this.CallCreatePostAsync(unitOfWork, model, dbUser.Id);

            var dbPost = await this.GetPostWithByAuthorIdAsync(unitOfWork, dbUser.Id);

            Assert.Equal(dbPost.AuthorId, dbUser.Id);
        }
Exemple #13
0
        public async Task <IActionResult> Create(PostCreationBindingModel model)
        {
            if (ModelState.IsValid == false)
            {
                this.AddStatusMessage(ModelState);
                return(Redirect("/"));
            }

            var result = await this.userPostService.CreatePostAsync(this.User, model);

            if (result == false)
            {
                this.AddStatusMessage(AlertConstants.ErrorMessageUnknownError, AlertConstants.AlertTypeDanger);
                return(Redirect("/"));
            }

            this.AddStatusMessage(AlertConstants.MessagePostCreated, AlertConstants.AlertTypeSuccess);
            return(Redirect("/"));
        }
Exemple #14
0
        public PostCreationBindingModel MapPostCreationBindingModel(
            IEnumerable <Subreddit> createdSubreddits,
            IEnumerable <Subreddit> subscribedSubreddits,
            string selectedSubredditId)
        {
            var model = new PostCreationBindingModel();

            var createdSubredditGroupName = ModelsConstants.SelectListGroupNameCreatedSubreddits;
            var createdSubredditsSelectListItems
                = this.MapSelectListItemsBySubreddits(createdSubreddits, createdSubredditGroupName, selectedSubredditId);

            var subscribedSubredditGroupName = ModelsConstants.SelectListGroupNameSubscribedSubreddits;
            var subscribedSubredditsSelectListItem
                = this.MapSelectListItemsBySubreddits(subscribedSubreddits, subscribedSubredditGroupName, selectedSubredditId);

            model.Subreddits.AddRange(createdSubredditsSelectListItems);
            model.Subreddits.AddRange(subscribedSubredditsSelectListItem);

            model.SelectedSubredditId = selectedSubredditId;

            return(model);
        }