Ejemplo n.º 1
0
        public SingleResponse<UserFeed> LookupUserFeed(UserFeed userFeed)
        {
            if (userFeed.Feed == null || string.IsNullOrEmpty(userFeed.Feed.Url))
            {
                return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.None, "");
            }
            var factory = new HttpFeedFactory();
            try
            {
                var rssFeed = factory.CreateFeed(new Uri(userFeed.Feed.Url));

                return ResponseBuilder.BuildSingleResponse(new UserFeed
                {
                    Name = rssFeed.Title,
                    Feed = userFeed.Feed
                }, ErrorLevel.None);
            }
            catch (NotSupportedException)
            {
                return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.Error, "URL type is not supported");
            }
            catch (InvalidFeedXmlException ex)
            {
                return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.Critical,
                    string.Format("Failed to retrieve feed at URL: {0}", userFeed.Feed.Url), ex);
            }
        }
        public void AddUserFeed()
        {
            //Arrange
            IFeedManager feedManager = new FeedManager(_database);

            //Act
            const string url = "http://test.url.fake";
            var userFeed = new UserFeed
                {
                    Feed = new Feed
                        {
                            Url = url
                        }
                };
            var response = feedManager.AddUserFeed(userFeed);

            //Assert
            Assert.AreEqual(ErrorLevel.None, response.Status.ErrorLevel, response.Status.ErrorMessage);
            Assert.IsNotNull(response.Data);
            Assert.IsNotNullOrEmpty(response.Data.Id);
            Assert.IsNotNull(response.Data.Feed);
            Assert.IsNotNullOrEmpty(response.Data.Feed.Id);
            var getFeedResponse = feedManager.GetUserFeedsByUrl(url);
            Assert.AreEqual(ErrorLevel.None, getFeedResponse.Status.ErrorLevel, getFeedResponse.Status.ErrorMessage);
            Assert.IsNotNull(getFeedResponse.Data);
            Assert.IsNotEmpty(getFeedResponse.Data);
            var feedResponse = getFeedResponse.Data.First();
            Assert.IsNotNull(feedResponse);
            Assert.AreEqual(url, feedResponse.Feed.Url);
        }
        public void LookupUserFeed_CatchUriException()
        {
            //Arrange
            IRssManager rssManager = new RssManager();

            //Act
            var userFeed = new UserFeed
            {
                Feed = new Feed
                {
                    Url = ""
                }
            };
            var response = rssManager.LookupUserFeed(userFeed);

            //Assert
            Assert.AreEqual(ErrorLevel.None, response.Status.ErrorLevel, response.Status.ErrorMessage);
        }
        public void LookupUserFeed()
        {
            //Arrange
            IRssManager rssManager = new RssManager();

            //Act
            const string url = "http://ericlippert.com/feed/";
            var userFeed = new UserFeed
            {
                Feed = new Feed
                {
                    Url = url
                }
            };
            SingleResponse<UserFeed> response = rssManager.LookupUserFeed(userFeed);

            //Assert
            Assert.AreEqual(ErrorLevel.None, response.Status.ErrorLevel, response.Status.ErrorMessage);
            Assert.IsNotNullOrEmpty(response.Data.Name);
        }
Ejemplo n.º 5
0
        public SingleResponse<UserFeed> AddUserFeed(UserFeed userFeed)
        {
            try
            {
                if (userFeed == null)
                    return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.Error, "userFeed is required");
                if (userFeed.Feed == null)
                    return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.Error, "userFeed.Feed is required");

                var existingFeed = _database.Query<RavenFeed>()
                                            .FirstOrDefault(f => f.Url == userFeed.Feed.Url);
                string existingFeedId;
                if (existingFeed == null)
                {
                    var ravenFeed = Mapper.Map<RavenFeed>(userFeed.Feed);
                    existingFeedId = _database.Store(ravenFeed);
                }
                else
                {
                    existingFeedId = existingFeed.Id;
                }
                var ravenUserFeed = Mapper.Map<RavenUserFeed>(userFeed);
                ravenUserFeed.RavenFeedId = existingFeedId;
                userFeed.Id = _database.Store(ravenUserFeed);
                userFeed.Feed.Id = existingFeedId;
                return new SingleResponse<UserFeed>
                    {
                        Data = userFeed,
                        Status = new Status
                            {
                                ErrorLevel = ErrorLevel.None
                            }
                    };
            }
            catch (Exception ex)
            {
                return ResponseBuilder.BuildSingleResponse(userFeed, ErrorLevel.Critical,
                    string.Format("Fatal error adding feed: {0}", ex), ex);
            }
        }
        public void GetUserFeedUnreadCount_FeedRequired()
        {
            //Arrange
            var feedManager = TestRegistry.GetKernel().Get<IFeedManager>();

            //Act
            var userFeed = new UserFeed
            {
                Id = "UserFeeds/1"
            };
            var response = feedManager.GetUserFeedUnreadCount(userFeed);

            //Assert
            Assert.IsNotNull(response);
            Assert.AreEqual(ErrorLevel.Error, response.Status.ErrorLevel);
            Assert.IsTrue(response.Status.ErrorMessage.Contains("Feed cannot be null"),
                "Error message should contain \"Feed cannot be null\": " + response.Status.ErrorMessage);
        }
        public void GetUserFeedUnreadCount()
        {
            //Arrange
            var feedManager = TestRegistry.GetKernel().Get<IFeedManager>();

            //Act
            var userFeed = new UserFeed
                {
                    Id = "UserFeeds/1",
                    RavenUserId = "ravenuser/1",
                    Feed = new Feed
                        {
                            Id = "ravenfeed/1"
                        }
                };
            var response = feedManager.GetUserFeedUnreadCount(userFeed);

            //Assert
            Assert.IsNotNull(response);
            Assert.AreEqual(ErrorLevel.None, response.Status.ErrorLevel, response.Status.ErrorMessage);
            Assert.Greater(response.Data, 0);
        }
        public void GetUserFeeds_AfterAdd()
        {
            //Arrange
            IFeedManager feedManager = new FeedManager(_database);

            //Act
            const string url = "http://new.feed.url";
            var userFeed = new UserFeed
            {
                Feed = new Feed
                {
                    Url = url
                },
                RavenUserId = "ravenuser/2"
            };
            var response = feedManager.AddUserFeed(userFeed);

            //Assert
            Assert.AreEqual(ErrorLevel.None, response.Status.ErrorLevel, response.Status.ErrorMessage);
            //TODO there has to be a better way to deal with eventual consistency here
            Thread.Sleep(500);
            var getFeedsResponse = feedManager.GetUserFeeds(new User
                {
                    Id = "ravenuser/2"
                });
            Assert.AreEqual(ErrorLevel.None, getFeedsResponse.Status.ErrorLevel, getFeedsResponse.Status.ErrorMessage);
            Assert.IsNotNull(getFeedsResponse.Data);
            Assert.IsNotEmpty(getFeedsResponse.Data);
            var newFeed = getFeedsResponse.Data.FirstOrDefault(f => f.Feed.Url == url);
            Assert.IsNotNull(newFeed);
            Assert.AreEqual(newFeed.Feed.Url, url);
            Assert.AreEqual("ravenuser/2", newFeed.RavenUserId);
        }
        public void GetUserFeedItems_UserIdRequired()
        {
            //Arrange
            //TODO use servicelocator for this
            IFeedManager feedManager = new FeedManager(_database);

            //Act
            var userFeed = new UserFeed();
            var response = feedManager.GetUserFeedItems(userFeed);

            //Assert
            Assert.IsNotNull(response);
            Assert.IsNotNull(response.Status);
            Assert.AreEqual(ErrorLevel.Error, response.Status.ErrorLevel, "User Id should be required");
        }
        public void GetUserFeedItems()
        {
            //Arrange
            //TODO use servicelocator for this
            IFeedManager feedManager = new FeedManager(_database);

            //Act
            var userFeed = new UserFeed
            {
                RavenUserId = "ravenuser/1",
                Feed = new Feed
                {
                    Id = "ravenfeed/1"
                }
            };
            var response = feedManager.GetUserFeedItems(userFeed);

            //Assert
            Assert.IsNotNull(response);
            Assert.IsNotNull(response.Status);
            Assert.AreEqual(ErrorLevel.None, response.Status.ErrorLevel, response.Status.ErrorMessage);
            Assert.IsNotNull(response.Data);
            Assert.Greater(response.Data.Count(), 0);
            Assert.IsNotNull(response.Data.First().Id);
        }
        public void AddUserFeed_FeedIsRequired()
        {
            //Arrange
            IFeedManager feedManager = new FeedManager(_database);

            //Act
            var userFeed = new UserFeed();
            var response = feedManager.AddUserFeed(userFeed);

            //Assert
            Assert.AreEqual(ErrorLevel.Error, response.Status.ErrorLevel);
            Assert.AreEqual("userFeed.Feed is required", response.Status.ErrorMessage);
        }
Ejemplo n.º 12
0
        public SingleResponse<int> GetUserFeedUnreadCount(UserFeed userFeed)
        {
            try
            {
                if (userFeed == null)
                {
                    return ResponseBuilder.BuildSingleResponse<int>(ErrorLevel.Error, "User feed is required");
                }
                if (userFeed.Feed == null)
                {
                    return ResponseBuilder.BuildSingleResponse<int>(ErrorLevel.Error, "userFeed.Feed cannot be null");
                }
                var feedId = userFeed.Feed.Id;
                var count = _database.Query<UserFeedItem>()
                         .Count(uf => uf.FeedId == feedId &&
                             uf.RavenUserId == userFeed.RavenUserId &&
                             uf.IsUnread);

                return ResponseBuilder.BuildSingleResponse(count, ErrorLevel.None);
            }
            catch (Exception ex)
            {
                return ResponseBuilder.BuildSingleResponse<int>(ErrorLevel.Critical,
                                                                     string.Format("Fatal error getting user feed unread count: {0}", ex), ex);
            }
        }
Ejemplo n.º 13
0
 public void UpdateFeedUnreadCount(string username, UserFeed userFeed)
 {
     Clients.Group(username).UpdateFeedUnreadCount(userFeed);
 }
Ejemplo n.º 14
0
        public void LookupUserFeed_NotSupportedUrl()
        {
            //Arrange
            IRssManager rssManager = new RssManager();

            //Act
            var userFeed = new UserFeed
            {
                Feed = new Feed
                {
                    Url = "magnet:?xt=urn:btih:d784a1cdfe1f3b75de71f59be0a75bf68a00806c&dn=%5BMetal%5"
                }
            };
            var response = rssManager.LookupUserFeed(userFeed);

            //Assert
            Assert.AreEqual(ErrorLevel.Error, response.Status.ErrorLevel, "Should have gotten an error: " + response.Status.ErrorMessage);
        }
Ejemplo n.º 15
0
        public SingleResponse<UserFeed> UpdateUserFeed(UserFeed userFeed)
        {
            try
            {
                if (userFeed == null)
                    return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.Error, "userFeed is required");
                if (userFeed.Feed == null)
                    return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.Error, "userFeed.Feed is required");
                if (userFeed.Feed.Id == null)
                    return ResponseBuilder.BuildSingleResponse<UserFeed>(ErrorLevel.Error, "userFeed.Feed.Id is required");

                var existingFeed = _database.Load<RavenFeed>(userFeed.Feed.Id);
                if (existingFeed == null)
                {
                    return ResponseBuilder.BuildSingleResponse(userFeed, ErrorLevel.Error, string.Format("Feed not found with id {0}", userFeed.Feed.Id));
                }
                var updateFeedResponse = UpdateFeed(userFeed.Feed);
                if (updateFeedResponse.Status.ErrorLevel > ErrorLevel.None)
                {
                    return ResponseBuilder.BuildSingleResponse(userFeed, updateFeedResponse.Status.ErrorLevel, updateFeedResponse.Status.ErrorMessage);
                }

                var ravenUserFeed = Mapper.Map<RavenUserFeed>(userFeed);
                ravenUserFeed.RavenFeedId = existingFeed.Id;
                _database.Store(ravenUserFeed);
                return ResponseBuilder.BuildSingleResponse(userFeed, ErrorLevel.None);
            }
            catch (Exception ex)
            {
                return ResponseBuilder.BuildSingleResponse(userFeed, ErrorLevel.Critical,
                    string.Format("Fatal error updating user feed: {0}", ex), ex);
            }
        }
        public void UpdateUserFeedTest()
        {
            //Arrange
            IFeedManager feedManager = new FeedManager(_database);

            //Act
            var unreadCount = new Random().Next(1000);
            const string url = "http://test.url.fake";
            var userFeed = new UserFeed
                {
                    Id = "ravenuserfeed/1",
                    Category = "updated category",
                    Name = "updated name",
                    UnreadCount = unreadCount,
                    Feed = new Feed
                        {
                            Id = "ravenfeed/1",
                            Url = url
                        },
                    RavenUserId = "ravenuser/1"
                };
            var response = feedManager.UpdateUserFeed(userFeed);

            //Assert
            Assert.AreEqual(ErrorLevel.None, response.Status.ErrorLevel, response.Status.ErrorMessage);
            var getFeedResponse = feedManager.GetUserFeedByUserIdAndUrl(new User {Id = "ravenuser/1"}, url);
            Assert.IsNotNull(getFeedResponse);
            Assert.AreEqual(ErrorLevel.None, getFeedResponse.Status.ErrorLevel, getFeedResponse.Status.ErrorMessage);
            Assert.IsNotNull(getFeedResponse.Data);
            Assert.IsNotNull(getFeedResponse.Data.Feed);
            Assert.AreEqual(url, getFeedResponse.Data.Feed.Url);
            Assert.AreEqual(unreadCount, getFeedResponse.Data.UnreadCount);
            Assert.AreEqual("updated category", getFeedResponse.Data.Category);
            Assert.AreEqual("updated name", getFeedResponse.Data.Name);
        }
Ejemplo n.º 17
0
        public CollectionResponse<FeedItem> GetFeedItems(UserFeed userFeed)
        {
            if (string.IsNullOrEmpty(Context.User.Identity.Name))
            {
                return ResponseBuilder.BuildCollectionResponse<FeedItem>(ErrorLevel.Error, "Please log in to view feed items");
            }

            //TODO use client connection for this
            Groups.Add(Context.ConnectionId, Context.User.Identity.Name);

            var userQuery = new User
            {
                Username = Context.User.Identity.Name
            };
            var userResponse = _authentication.GetUserByUsername(userQuery);
            if (userResponse.Status.ErrorLevel > ErrorLevel.Warning || userResponse.Data == null)
            {
                return ResponseBuilder.BuildCollectionResponse<FeedItem>(userResponse.Status.ErrorLevel,
                    string.Format("Unable to retrieve feed items for user \"{0}\": {1}", userQuery.Username, userResponse.Status.ErrorMessage));
            }

            var user = userResponse.Data;
            if (user.Id != userFeed.RavenUserId)
            {
                return ResponseBuilder.BuildCollectionResponse<FeedItem>(ErrorLevel.Error, "Please log in to view feed items");
            }

            return _feedManager.GetUserFeedItems(userFeed);
        }
Ejemplo n.º 18
0
        public CollectionResponse<FeedItem> GetUserFeedItems(UserFeed userFeed)
        {
            try
            {
                if (userFeed == null)
                {
                    return ResponseBuilder.BuildCollectionResponse<FeedItem>(ErrorLevel.Error, "User feed is required");
                }
                if (string.IsNullOrEmpty(userFeed.RavenUserId))
                {
                    return ResponseBuilder.BuildCollectionResponse<FeedItem>(ErrorLevel.Error, "User Id is required");
                }
                if (userFeed.Feed == null || string.IsNullOrEmpty(userFeed.Feed.Id))
                {
                    return ResponseBuilder.BuildCollectionResponse<FeedItem>(ErrorLevel.Error, "Feed is required");
                }

                var feedId = userFeed.Feed.Id;

                //TODO need to find another way to query this
                Expression<Func<UserFeedItem, bool>> expression = ufi => ufi.RavenUserId == userFeed.RavenUserId && ufi.FeedId == feedId;
                var userFeedItems = _database.Query<UserFeedItem>()
                    .Where(expression)
                    .ToList();
                var feedItems = new List<FeedItem>();
                foreach (var userFeedItem in userFeedItems)
                {
                    FeedItem feedItem = _database.Load<FeedItem>(userFeedItem.FeedItemId);
                    if (feedItem != null)
                    {
                        feedItems.Add(feedItem);
                    }
                }

                return ResponseBuilder.BuildCollectionResponse(feedItems, ErrorLevel.None);
            }
            catch (Exception ex)
            {
                return ResponseBuilder.BuildCollectionResponse<FeedItem>(ErrorLevel.Critical,
                    string.Format("Fatal error getting feed items: {0}", ex), ex);
            }
        }