public void Test_delete() { using (RepositoryFactory.StartUnitOfWork()) { var item = new RssItemCRUDModel() { FeedItemId = "new", Title = "title_new", Text = "Text_new", Description = "DescriptionNew", Author = "twit_usernew", Url = "url_new", FeedId = _feed.Id, Published = DateTime.Now }; var action = RepositoryFactory.Action<IRssItemAction>(); using (var tran = RepositoryFactory.StartTransaction()) { item = action.Save(item); tran.Commit(); } WaitForIndexing(); Assert.IsNotNull(SessionFactory<RssItem>.Queryable.FirstOrDefault(rssItem => rssItem.FeedItemId == item.FeedItemId)); using (var tran = RepositoryFactory.StartTransaction()) { action.Delete(item); tran.Commit(); } WaitForIndexing(); var items = action.GetAll().ToArray(); Assert.AreEqual(2, items.Count()); Assert.IsFalse(items.Any(rssItem => rssItem.FeedItemId == item.FeedItemId)); } }
public void Test_save() { using (RepositoryFactory.StartUnitOfWork()) { var item = new RssItemCRUDModel() { FeedItemId = "new", Title = "title_new", Text = "Text_new", Description = "DescriptionNew", Author = "twit_usernew", Url = "url_new", FeedId = _feed.Id, Published = DateTime.Now }; var action = RepositoryFactory.Action<IRssItemAction>(); using (var tran = RepositoryFactory.StartTransaction()) { item = action.Save(item); tran.Commit(); } WaitForIndexing(); var storedItem = SessionFactory<RssItem>.Queryable.First(rssItem => rssItem.FeedItemId == item.FeedItemId); Assert.AreEqual(item.FeedItemId, storedItem.FeedItemId); Assert.AreEqual(item.FeedId, storedItem.RssFeed.Id); Assert.AreEqual(item.Title, storedItem.Title); Assert.AreEqual(item.Text, storedItem.Text); Assert.AreEqual(item.Description, storedItem.Description); Assert.AreEqual(item.Published, storedItem.CreatedDate); Assert.AreEqual(item.Published, storedItem.Modified); Assert.AreEqual(item.Published, storedItem.PublishDate); Assert.AreEqual(item.Author, storedItem.Author); Assert.AreEqual(item.Url, storedItem.Url); Assert.AreEqual(false, storedItem.Hidden); Assert.AreEqual(false, storedItem.AreCommentAllowed); item = new RssItemCRUDModel() { FeedItemId = "change", Title = "title_change", Text = "Text_change", Description = "Descriptionchange", Author = "twit_userchange", Url = "url_change", FeedId = _feed.Id, Published = DateTime.Now }; using (var tran = RepositoryFactory.StartTransaction()) { item = action.Save(item); tran.Commit(); } WaitForIndexing(); storedItem = SessionFactory<RssItem>.Queryable.First(rssItem => rssItem.FeedItemId == item.FeedItemId); Assert.AreEqual(item.FeedItemId, storedItem.FeedItemId); Assert.AreEqual(item.FeedId, storedItem.RssFeed.Id); Assert.AreEqual(item.Title, storedItem.Title); Assert.AreEqual(item.Text, storedItem.Text); Assert.AreEqual(item.Description, storedItem.Description); Assert.AreEqual(item.Published, storedItem.CreatedDate); Assert.AreEqual(item.Published, storedItem.Modified); Assert.AreEqual(item.Published, storedItem.PublishDate); Assert.AreEqual(item.Author, storedItem.Author); Assert.AreEqual(item.Url, storedItem.Url); Assert.AreEqual(false, storedItem.Hidden); Assert.AreEqual(false, storedItem.AreCommentAllowed); } using (RepositoryFactory.StartUnitOfWork()) { var storedItem = SessionFactory<RssItem>.Queryable.First(rssItem => rssItem.FeedItemId == "change"); var id = storedItem.RssFeed.Id; } }
/// <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(); }