public async Task Post_CreatesNewStory() { var newStory = new AddUpdateStoryCommand(); Mock.Arrange(() => repo.Add(newStory)) .Returns(() => Task.FromResult(newStory)) .MustBeCalled(); // Act await target.Post(newStory); // Assert Mock.Assert(repo); }
public ActionResult <StoryCreationViewModel> Post([FromBody] UpdateStoryViewModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var ownerId = HttpContext.User.Identity.Name; var creationTime = ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeSeconds(); var storyId = Guid.NewGuid().ToString(); var story = new Story { Id = storyId, Title = model.Title, Content = model.Content, Tags = model.Tags, CreationTime = creationTime, LastEditTime = creationTime, OwnerId = ownerId, Draft = true }; storyRepository.Add(story); storyRepository.Commit(); return(new StoryCreationViewModel { StoryId = storyId }); }
public IActionResult Add(Story story) { if (ModelState.IsValid) { _storyRepository.Add(story); return(RedirectToAction("Index", "Story")); } return(View()); }
public async Task <ActionResult> Create(AddUpdateStoryCommand command) { if (!ModelState.IsValid) { return(View()); } await repository.Add(command); return(RedirectToAction(nameof(Index))); }
/// <summary> /// не потокобезопасно! /// </summary> /// <param name="room"></param> /// <param name="roomId"></param> /// <returns></returns> private async Task AddNewStoriesToDb(Room room, long roomId) //IEnumerable<Story> stories) { var storiesForSave = room.StoredRoom.Stories.Where(x => x.IdDb == null) .Select(x => new { tmpId = x.TmpId, story = x.ToDbObject(roomId) }).ToList(); await _storyRepository.Add(storiesForSave.Select(x => x.story).ToList()); foreach (var item in storiesForSave) { var oldStory = room.StoredRoom.Stories.FirstOrDefault(x => x.TmpId == item.tmpId); if (oldStory != null) { oldStory.IdDb = item.story.Id; } } }
public async Task Create_CallsRepositoryIfValid() { var command = new AddUpdateStoryCommand { Title = "Title", Synopsis = "Synposis" }; Mock.Arrange(() => repo.Add(command)) .Returns(() => Task.FromResult(command)) .MustBeCalled(); // Act await target.Create(command); // Assert Mock.Assert(repo); }
public HarryPotterStoryUseCase() { repository = new StoryRepostiory(); var resourceLoader = StringsResourcesHelpers.SafeGetForCurrentViewAsync().Result; foreach (var(order, titleKey, contentKey) in ApplicationSettings.HarryPotterStoryTextResources) { repository.Add(resourceLoader.GetString(titleKey), resourceLoader.GetString(contentKey)); } AllStories = new ObservableCollection <StoryEntity>(repository.All()); InitialStory = AllStories.FirstOrDefault(); CurrentStory = new ReactivePropertySlim <StoryEntity> { Value = InitialStory }; }
public async Task <CreatedAtActionResult> Post([FromBody] AddUpdateStoryCommand addUpdateStoryCommand) { var resultingCommand = await repository.Add(addUpdateStoryCommand); return(CreatedAtAction(nameof(GetById), new { id = resultingCommand.Id }, resultingCommand)); }
public virtual StoryCreateResult Create(IUser byUser, string url, string title, string category, string description, string tags, string userIPAddress, string userAgent, string urlReferer, NameValueCollection serverVariables, Func <IStory, string> buildDetailUrl) { StoryCreateResult result = ValidateCreate(byUser, url, title, category, description, userIPAddress, userAgent); if (result == null) { if (_contentService.IsRestricted(url)) { result = new StoryCreateResult { ErrorMessage = "Podany url jest zablokowany." }; } } if (result == null) { using (IUnitOfWork unitOfWork = UnitOfWork.Begin()) { IStory alreadyExists = _storyRepository.FindByUrl(url); if (alreadyExists != null) { return(new StoryCreateResult { ErrorMessage = "Artykuł z danym url już istnieje.", DetailUrl = buildDetailUrl(alreadyExists) }); } ICategory storyCategory = _categoryRepository.FindByUniqueName(category); if (storyCategory == null) { return(new StoryCreateResult { ErrorMessage = "\"{0}\" nie istnieje.".FormatWith(category) }); } if (storyCategory.IsActive == false) { return(new StoryCreateResult { ErrorMessage = "\"{0}\" jest tylko do odczytu.".FormatWith(category) }); } StoryContent content = _contentService.Get(url); if (content == StoryContent.Empty) { return(new StoryCreateResult { ErrorMessage = "Podany Url wydaje się być wadliwy." }); } var splittedTags = tags.NullSafe().Split(','); if (splittedTags.Length == 1) //only one tag { var tag = splittedTags[0].Trim(); if (String.Compare(".net", tag, StringComparison.OrdinalIgnoreCase) == 0 || String.Compare("c#", tag, StringComparison.OrdinalIgnoreCase) == 0) { return(new StoryCreateResult { ErrorMessage = "Proszę, pomyśl chwilę nad lepszymi tagami." }); } } if (splittedTags.Length == 2) //two tags, maybe not .net and C# { var tag1 = splittedTags[0].Trim(); var tag2 = splittedTags[1].Trim(); if ( (String.Compare(".net", tag1, StringComparison.OrdinalIgnoreCase) == 0 && String.Compare("c#", tag2, StringComparison.OrdinalIgnoreCase) == 0) || (String.Compare(".net", tag1, StringComparison.OrdinalIgnoreCase) == 0 && String.Compare("c#", tag2, StringComparison.OrdinalIgnoreCase) == 0) ) { return(new StoryCreateResult { ErrorMessage = "Tagi: .Net i C#. Srsly?" }); } } description = _htmlSanitizer.Sanitize(description); if (!_settings.AllowPossibleSpamStorySubmit && ShouldCheckSpamForUser(byUser)) { result = EnsureNotSpam <StoryCreateResult>(byUser, userIPAddress, userAgent, url, urlReferer, description, "social news", serverVariables, "Artykuł odrzucony: {0}, {1}".FormatWith(url, byUser), "Twój artykuł wydaje się być spamem."); if (result != null) { return(result); } } // If we are here which means story is not spam IStory story = _factory.CreateStory(storyCategory, byUser, userIPAddress, title.StripHtml(), description, url); _storyRepository.Add(story); // The Initial vote; story.Promote(story.CreatedAt, byUser, userIPAddress); // Capture the thumbnail, might speed up the thumbnail generation process _thumbnail.Capture(story.Url); // Subscribe comments by default story.SubscribeComment(byUser); AddTagsToContainers(tags, new ITagContainer[] { story, byUser }); string detailUrl = buildDetailUrl(story); if (_settings.AllowPossibleSpamStorySubmit && _settings.SendMailWhenPossibleSpamStorySubmitted && ShouldCheckSpamForUser(byUser)) { unitOfWork.Commit(); _spamProtection.IsSpam(CreateSpamCheckContent(byUser, userIPAddress, userAgent, url, urlReferer, description, "social news", serverVariables), (source, isSpam) => _spamPostprocessor.Process(source, isSpam, detailUrl, story)); } else { story.Approve(SystemTime.Now()); _eventAggregator.GetEvent <StorySubmitEvent>().Publish(new StorySubmitEventArgs(story, detailUrl)); unitOfWork.Commit(); } result = new StoryCreateResult { NewStory = story, DetailUrl = detailUrl }; } } return(result); }
public virtual void Add(IStory entity) { _innerRepository.Add(entity); }
public virtual StoryCreateResult Create(IUser byUser, string url, string title, string category, string description, string tags, string userIPAddress, string userAgent, string urlReferer, NameValueCollection serverVariables, Func <IStory, string> buildDetailUrl) { StoryCreateResult result = ValidateCreate(byUser, url, title, category, description, userIPAddress, userAgent); if (result == null) { using (IUnitOfWork unitOfWork = UnitOfWork.Get()) { IStory alreadyExists = _storyRepository.FindByUrl(url); if (alreadyExists != null) { return(new StoryCreateResult { ErrorMessage = "Wpis z takim samym url ju¿ istnieje.", DetailUrl = buildDetailUrl(alreadyExists) }); } ICategory storyCategory = _categoryRepository.FindByUniqueName(category); if (storyCategory == null) { return(new StoryCreateResult { ErrorMessage = "\"{0}\" - kategoria nie istnieje.".FormatWith(category) }); } StoryContent content = _contentService.Get(url); if (content == StoryContent.Empty) { return(new StoryCreateResult { ErrorMessage = "Podany url wydaje siê nie byæ poprawnym." }); } description = _htmlSanitizer.Sanitize(description); if (!_settings.AllowPossibleSpamStorySubmit && ShouldCheckSpamForUser(byUser)) { result = EnsureNotSpam <StoryCreateResult>(byUser, userIPAddress, userAgent, url, urlReferer, description, "social news", serverVariables, "Spamowy wpis odrzucony : {0}, {1}".FormatWith(url, byUser), "Twój wpis wydaje siê byæ spamem."); if (result != null) { return(result); } } // If we are here which means story is not spam IStory story = _factory.CreateStory(storyCategory, byUser, userIPAddress, title.StripHtml(), description, url); _storyRepository.Add(story); // The Initial vote; story.Promote(story.CreatedAt, byUser, userIPAddress); // Capture the thumbnail, might speed up the thumbnail generation process _thumbnail.Capture(story.Url); // Subscribe comments by default story.SubscribeComment(byUser); AddTagsToContainers(tags, new ITagContainer[] { story, byUser }); _userScoreService.StorySubmitted(byUser); string detailUrl = buildDetailUrl(story); if (_settings.AllowPossibleSpamStorySubmit && _settings.SendMailWhenPossibleSpamStorySubmitted && ShouldCheckSpamForUser(byUser)) { unitOfWork.Commit(); _spamProtection.IsSpam(CreateSpamCheckContent(byUser, userIPAddress, userAgent, url, urlReferer, description, "social news", serverVariables), (source, isSpam) => _spamPostprocessor.Process(source, isSpam, detailUrl, story)); } else { story.Approve(SystemTime.Now()); } // Ping the Story PingStory(content, story, detailUrl); result = new StoryCreateResult { NewStory = story, DetailUrl = detailUrl }; } } return(result); }
public virtual StoryCreateResult Create(IUser byUser, string url, string title, string category, string description, string tags, string userIPAddress, string userAgent, string urlReferer, NameValueCollection serverVariables, Func <IStory, string> buildDetailUrl) { StoryCreateResult result = ValidateCreate(byUser, url, title, category, description, userIPAddress, userAgent); if (result == null) { if (_contentService.IsRestricted(url)) { result = new StoryCreateResult { ErrorMessage = "Specifed url has match with our banned url list." }; } } if (result == null) { using (IUnitOfWork unitOfWork = UnitOfWork.Begin()) { IStory alreadyExists = _storyRepository.FindByUrl(url); if (alreadyExists != null) { return(new StoryCreateResult { ErrorMessage = "Story with the same url already exists.", DetailUrl = buildDetailUrl(alreadyExists) }); } ICategory storyCategory = _categoryRepository.FindByUniqueName(category); if (storyCategory == null) { return(new StoryCreateResult { ErrorMessage = "\"{0}\" category does not exist.".FormatWith(category) }); } StoryContent content = _contentService.Get(url); if (content == StoryContent.Empty) { return(new StoryCreateResult { ErrorMessage = "Specified url appears to be broken." }); } description = _htmlSanitizer.Sanitize(description); if (!_settings.AllowPossibleSpamStorySubmit && ShouldCheckSpamForUser(byUser)) { result = EnsureNotSpam <StoryCreateResult>(byUser, userIPAddress, userAgent, url, urlReferer, description, "social news", serverVariables, "Spam story rejected : {0}, {1}".FormatWith(url, byUser), "Your story appears to be a spam."); if (result != null) { return(result); } } // If we are here which means story is not spam IStory story = _factory.CreateStory(storyCategory, byUser, userIPAddress, title.StripHtml(), description, url); _storyRepository.Add(story); // The Initial vote; story.Promote(story.CreatedAt, byUser, userIPAddress); // Capture the thumbnail, might speed up the thumbnail generation process _thumbnail.Capture(story.Url); // Subscribe comments by default story.SubscribeComment(byUser); AddTagsToContainers(tags, new ITagContainer[] { story, byUser }); string detailUrl = buildDetailUrl(story); if (_settings.AllowPossibleSpamStorySubmit && _settings.SendMailWhenPossibleSpamStorySubmitted && ShouldCheckSpamForUser(byUser)) { unitOfWork.Commit(); _spamProtection.IsSpam(CreateSpamCheckContent(byUser, userIPAddress, userAgent, url, urlReferer, description, "social news", serverVariables), (source, isSpam) => _spamPostprocessor.Process(source, isSpam, detailUrl, story)); } else { story.Approve(SystemTime.Now()); _eventAggregator.GetEvent <StorySubmitEvent>().Publish(new StorySubmitEventArgs(story, detailUrl)); unitOfWork.Commit(); } result = new StoryCreateResult { NewStory = story, DetailUrl = detailUrl }; } } return(result); }
public void CreateStory(Story story) { stroyRepository.Add(story); }