public void Test_update() { using (RepositoryFactory.StartUnitOfWork()) { var item = new RssFeedCRUDModel() { Name = "new_feed1", Url = "new_feed_url", AuthorRegex = "author_regex_new", ContentParseRegex = "content_parse_regex", GetDirectContent = true, DisplayFullContent = false }; var crudActions = RepositoryFactory.Action <IRssFeedAction>(); using (var tran = RepositoryFactory.StartTransaction()) { item = crudActions.Create(item); tran.Commit(); } WaitForIndexing(); // check created item var storedItem = crudActions.FindByPk(item.Id); Assert.AreEqual(item.Id, storedItem.Id); Assert.AreEqual(item.Name, storedItem.Name); Assert.AreEqual(item.Url, storedItem.Url); Assert.AreEqual(item.AuthorRegex, storedItem.AuthorRegex); Assert.AreEqual(item.ContentParseRegex, storedItem.ContentParseRegex); Assert.AreEqual(item.GetDirectContent, storedItem.GetDirectContent); Assert.AreEqual(item.DisplayFullContent, storedItem.DisplayFullContent); // change item item.Name = item.Name + "change"; item.Url = item.Url + "change"; item.AuthorRegex = item.AuthorRegex + "change"; item.ContentParseRegex = item.ContentParseRegex + "change"; item.GetDirectContent = !item.GetDirectContent; item.DisplayFullContent = !item.DisplayFullContent; using (var tran = RepositoryFactory.StartTransaction()) { item = crudActions.Update(item); tran.Commit(); } // check changed item storedItem = crudActions.FindByPk(item.Id); Assert.AreEqual(item.Id, storedItem.Id); Assert.AreEqual(item.Name, storedItem.Name); Assert.AreEqual(item.Url, storedItem.Url); Assert.AreEqual(item.AuthorRegex, storedItem.AuthorRegex); Assert.AreEqual(item.ContentParseRegex, storedItem.ContentParseRegex); Assert.AreEqual(item.GetDirectContent, storedItem.GetDirectContent); Assert.AreEqual(item.DisplayFullContent, storedItem.DisplayFullContent); } }
/// <summary> /// Gets the feed items. /// </summary> /// <param name="feed">The feed.</param> /// <returns>Feed items to save.</returns> public static RssItemCRUDModel[] GetFeedItems(RssFeedCRUDModel feed) { List <RssItemCRUDModel> result = new List <RssItemCRUDModel>(); var connectionAction = RepositoryFactory.Action <IRssFeedConnection>(); // get items from remote url var items = connectionAction.GetFeedUrlItems(feed.Url); foreach (var rssItemRawData in items) { // if no author regex or author regex match if (string.IsNullOrEmpty(feed.AuthorRegex) || Regex.IsMatch(rssItemRawData.Author, feed.AuthorRegex, RegexOptions.Singleline)) { var item = new RssItemCRUDModel { FeedItemId = rssItemRawData.Id, Url = rssItemRawData.Url, Published = rssItemRawData.Published, Author = rssItemRawData.Author, Title = AntiXss.GetSafeHtmlFragment(rssItemRawData.Title), FeedId = feed.Id }; string content = rssItemRawData.Text; // if display full content, then get content url if (feed.GetDirectContent) { try { content = connectionAction.GetArticle(item.Url); } catch (Exception ex) { LogManager.GetCurrentClassLogger().ErrorException( string.Format("Unable to get article content for feed '{0}' for item url '{1}'. \nException: {2}", feed.Name, item.Url), ex); } } // apply content regex if (!string.IsNullOrEmpty(feed.ContentParseRegex)) { var match = Regex.Match(content, feed.ContentParseRegex, RegexOptions.Singleline); if (match.Success && match.Groups.Count > 0) { content = match.Groups[1].Value; } item.Text = AntiXss.GetSafeHtmlFragment(content); } item.Text = AntiXss.GetSafeHtmlFragment(content); item.Description = content.RemoveTags().Shorten(ModelConstants.DescriptionMaxLenghtConst); result.Add(item); } } return(result.ToArray()); }
public ActionResult Delete(RssFeedCRUDModel model) { var item = RepositoryFactory.Action <IRssFeedAction>().FindByPk(model.Id); using (var tran = RepositoryFactory.StartTransaction()) { RepositoryFactory.Action <IRssFeedAction>().Delete(model); tran.Commit(); } return(RedirectToActionWithAjax("Index")); }
public ActionResult TestFeed(RssFeedCRUDModel model) { RssItemCRUDModel[] feedItems = null; try { feedItems = UpdateRssFeedsTask.GetFeedItems(model); } catch (Exception ex) { ModelState.AddModelError("", ex.ToString()); } return(ViewWithAjax(feedItems)); }
public ActionResult Create(RssFeedCRUDModel model) { if (ModelState.IsValid) { var crudOperations = RepositoryFactory.Action <IRssFeedAction>(); using (var tran = RepositoryFactory.StartTransaction()) { crudOperations.Create(model); tran.Commit(); } return(RedirectToActionWithAjax("Index")); } return(ViewWithAjax(model)); }
/// <summary> /// Updates the specified item. /// </summary> /// <param name="item">The item.</param> /// <returns>Updated item.</returns> public RssFeedCRUDModel Update(RssFeedCRUDModel item) { var feed = SessionFactory <RssFeed> .Load(item.Id); feed.Name = item.Name; feed.AuthorRegex = item.AuthorRegex; feed.GetDirectContent = item.GetDirectContent; feed.DisplayFullContent = item.DisplayFullContent; feed.ContentParseRegex = item.ContentParseRegex; feed.Url = item.Url; SessionFactory <RssFeed> .Store(feed); return(item); }
/// <summary> /// Creates the specified item. /// </summary> /// <param name="item">The item.</param> /// <returns>Created item.</returns> public RssFeedCRUDModel Create(RssFeedCRUDModel item) { var feed = new RssFeed { Id = Guid.NewGuid(), Name = item.Name, AuthorRegex = item.AuthorRegex, GetDirectContent = item.GetDirectContent, DisplayFullContent = item.DisplayFullContent, ContentParseRegex = item.ContentParseRegex, Url = item.Url }; SessionFactory <RssFeed> .Store(feed); item.Id = feed.Id; return(item); }
/// <summary> /// Finds item by PK. /// </summary> /// <param name="id">The id.</param> /// <param name="throwOnNotFound">if set to <c>true</c> [throw exception on not found].</param> /// <returns> /// Item matching id or null/exception if not exists. /// </returns> public RssFeedCRUDModel FindByPk(Guid id, bool throwOnNotFound) { RssFeedCRUDModel result = null; var item = SessionFactory <RssFeed> .Load(id); if (throwOnNotFound && item == null) { throw new NotFoundException(typeof(RssFeed), id, "with relation to StaticTextVersion via Version number"); } return(new RssFeedCRUDModel { Id = item.Id, Name = item.Name, AuthorRegex = item.AuthorRegex, GetDirectContent = item.GetDirectContent, DisplayFullContent = item.DisplayFullContent, ContentParseRegex = item.ContentParseRegex, Url = item.Url }); }
public ActionResult Edit(RssFeedCRUDModel model) { if (ModelState.IsValid) { var crudOperations = RepositoryFactory.Action <IRssFeedAction>(); // get original item to test change permissions var originalItem = crudOperations.FindByPk(model.Id); if (originalItem != null) { using (var tran = RepositoryFactory.StartTransaction(IoC.Resolve <SearchUpdateContext>())) { crudOperations.Update(model); tran.Commit(); } return(RedirectToActionWithAjax("Index")); } ModelState.AddModelError(string.Empty, ModelResources.ItemNotExistsError); } return(ViewWithAjax(model)); }
public void Test_delete() { using (RepositoryFactory.StartUnitOfWork()) { var initialCount = SessionFactory <RssFeed> .Count(); var item = new RssFeedCRUDModel() { Name = "new_feed1", Url = "new_feed_url", AuthorRegex = "author_regex_new", ContentParseRegex = "content_parse_regex", GetDirectContent = true, DisplayFullContent = false }; var crudActions = RepositoryFactory.Action <IRssFeedAction>(); using (var tran = RepositoryFactory.StartTransaction()) { item = crudActions.Create(item); tran.Commit(); } WaitForIndexing(); Assert.AreEqual(initialCount + 1, SessionFactory <RssFeed> .Count()); using (var tran = RepositoryFactory.StartTransaction()) { crudActions.Delete(item); tran.Commit(); } WaitForIndexing(); Assert.AreEqual(initialCount, SessionFactory <RssFeed> .Count()); } }
/// <summary> /// Deletes the specified item. /// </summary> /// <param name="item">The item.</param> public void Delete(RssFeedCRUDModel item) { var feed = SessionFactory <RssFeed> .Load(item.Id); SessionFactory <RssFeed> .Delete(feed); }