예제 #1
0
        public void ValidateCreateForum_FormIsValid_ValidationReturnsTrue()
        {
            var request = new CreateForum
            {
                Description = "Description",
                Title       = "Test1"
            };

            var context = new ValidationContext(request);
            var result  = Validator.TryValidateObject(request, context, null, true);

            Assert.True(result);
        }
예제 #2
0
        public async Task <ActionResult <ForumResponse> > Create([FromBody] CreateForum create)
        {
            var forum = await _forumService.Create(create);

            if (forum == null)
            {
                return(Unauthorized());
            }

            var response = _mapper.Map <ForumResponse>(forum);

            response.Owner = _userService.Auth().Username;

            return(Created($"/api/forum/{response.Id}", response));
        }
예제 #3
0
        public void MapToForum_FromCreateForum_FillsContentAndTitle()
        {
            var request = new CreateForum
            {
                Description = "A test forum",
                Title       = "Test"
            };

            var forum = Mapper.Map <Forum>(request);

            Assert.Equal(request.Description, forum.Description);
            Assert.Equal(request.Title, forum.Title);
            Assert.True(forum.CreatedAt > DateTime.Now.AddMilliseconds(-10));
            Assert.True(forum.UpdatedAt > DateTime.Now.AddMilliseconds(-10));
        }
예제 #4
0
        public void ValidateCreateForum_NoTitle_ValidationReturnsFalse()
        {
            var request = new CreateForum
            {
                Description = "Description"
            };

            var context = new ValidationContext(request)
            {
                MemberName = nameof(request.Title)
            };

            var result = Validator.TryValidateProperty(request.Title, context, null);

            Assert.False(result);
        }
예제 #5
0
        public void ValidateCreateForum_DescriptionTooLong_ValidationReturnsFalse()
        {
            var request = new CreateForum
            {
                Description = new string('a', 1024),
                Title       = "Test"
            };

            var context = new ValidationContext(request)
            {
                MemberName = nameof(request.Description)
            };
            var result = Validator.TryValidateProperty(request.Description, context, null);

            Assert.False(result);
        }
예제 #6
0
        public void ValidateCreateForum_TitleContainsInvalidCharacters_ValidationReturnsFalse()
        {
            var request = new CreateForum
            {
                Description = "Description",
                Title       = "illegal space"
            };

            var context = new ValidationContext(request)
            {
                MemberName = nameof(request.Title)
            };

            var result = Validator.TryValidateProperty(request.Title, context, null);

            Assert.False(result);
        }
예제 #7
0
        public async Task <Forum> Create(CreateForum create)
        {
            _logger.LogInformation($"Creating forum {JsonConvert.SerializeObject(create)}");

            if (!_user.Exists())
            {
                _logger.LogInformation("User is not authenticated");
                return(null);
            }

            var forum = _mapper.Map <Forum>(create);

            forum.UserId = _user.Id();
            await _forumRepository.Create(forum);

            _logger.LogInformation($"Created forum with ID {forum.Id}");
            return(forum);
        }
예제 #8
0
        public async Task Create_UserIsAuthenticated_CreatesForum()
        {
            var create = new CreateForum();
            var forum  = new Forum {
                Title = "title", Description = "description"
            };

            A.CallTo(() => UserService.Exists()).Returns(true);
            A.CallTo(() => Mapper.Map <Forum>(create)).Returns(forum);
            A.CallTo(() => UserService.Id()).Returns(UserId);

            await ForumService.Create(create);

            A.CallTo(() => ForumRepository.Create(A <Forum> .That.Matches(f =>
                                                                          f.Title == forum.Title &&
                                                                          f.Description == forum.Description &&
                                                                          f.UserId == UserId
                                                                          ))).MustHaveHappenedOnceExactly();
        }
예제 #9
0
        public async Task <ActionResult> Save(FormComponentModel.ForumModel model)
        {
            var site = await _contextService.CurrentSiteAsync();

            var user = await _contextService.CurrentUserAsync();

            var command = new CreateForum
            {
                CategoryId      = model.CategoryId,
                Name            = model.Name,
                Slug            = model.Slug,
                Description     = model.Description,
                PermissionSetId = model.PermissionSetId == Guid.Empty ? (Guid?)null : model.PermissionSetId,
                SiteId          = site.Id,
                UserId          = user.Id
            };

            await _forumService.CreateAsync(command);

            return(Ok());
        }
예제 #10
0
        public async Task CreateAsync(CreateForum command)
        {
            await _createValidator.ValidateCommandAsync(command);

            var forumsCount = await _dbContext.Forums
                              .Where(x => x.CategoryId == command.CategoryId && x.Status != ForumStatusType.Deleted)
                              .CountAsync();

            var sortOrder = forumsCount + 1;

            var forum = new Forum(command.Id,
                                  command.CategoryId,
                                  command.Name,
                                  command.Slug,
                                  command.Description,
                                  sortOrder,
                                  command.PermissionSetId);

            _dbContext.Forums.Add(forum);
            _dbContext.Events.Add(new Event(command.SiteId,
                                            command.UserId,
                                            EventType.Created,
                                            typeof(Forum),
                                            forum.Id,
                                            new
            {
                forum.Name,
                forum.Slug,
                forum.Description,
                forum.CategoryId,
                forum.PermissionSetId,
                forum.SortOrder
            }));

            await _dbContext.SaveChangesAsync();

            _cacheManager.Remove(CacheKeys.Categories(command.SiteId));
            _cacheManager.Remove(CacheKeys.CurrentForums(command.SiteId));
        }