コード例 #1
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_endpoint_paging(self):
        '''Page out more than 20 feeds.'''
        # Test data
        for i in xrange(0, 50):
            Feed.create_and_subscribe(
                'feed {0}'.format(i),
                'http://www.example.com/rss{0}'.format(i),
                None, self.user)

        # Actual test
        result = self.api_client.get('/api/0.9.5/feed/')
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(content.keys(), ['meta', 'objects'])
        self.assertEqual(
            content['meta'].keys(),
            ['previous', 'total_count', 'offset', 'limit', 'next'])
        self.assertEqual(content['meta']['previous'], None)
        self.assertEqual(content['meta']['total_count'], 50)
        self.assertEqual(content['meta']['offset'], 0)
        self.assertEqual(content['meta']['limit'], 20)
        self.assertEqual(
            content['meta']['next'].split('?')[1],
            'limit=20&offset=20')
        self.assertEqual(len(content['objects']), 20)
コード例 #2
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_endpoint_only_owned(self):
        '''Don't return feeds where UserFeed.user is not the user.'''
        # Test data
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)

        mike = User.objects.create_user(
            'mike', '*****@*****.**', password='******')
        mike.save()
        feed = Feed.create_and_subscribe(
            'Gothamist', 'http://feeds.gothamistllc.com/gothamist05', None, mike)

        # Actual test
        result = self.api_client.get('/api/0.9.5/feed/')
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(content.keys(), ['meta', 'objects'])
        self.assertEqual(
            content['meta'].keys(),
            ['previous', 'total_count', 'offset', 'limit', 'next'])
        self.assertEqual(content['meta']['previous'], None)
        self.assertEqual(content['meta']['total_count'], 1)
        self.assertEqual(content['meta']['offset'], 0)
        self.assertEqual(content['meta']['limit'], 20)
        self.assertEqual(content['meta']['next'], None)
コード例 #3
0
ファイル: tasks.py プロジェクト: ReadRaven/readraven
    def _import_subscriptions(self):
        subscriptions = None
        for f in self.z.namelist():
            if 'subscriptions.xml' in f:
                subscriptions = opml.from_string(self.z.open(f).read())
                break

        if subscriptions is None:
            return False

        for sub in subscriptions:
            if hasattr(sub, 'type'):
                title = sub.title
                link = sub.xmlUrl
                site = sub.htmlUrl
                Feed.create_and_subscribe(title, link, site, self.user)
            else:
                # In this case, it's a 'group' of feeds.
                folder = sub
                for sub in folder:
                    title = sub.title
                    link = sub.xmlUrl
                    site = sub.htmlUrl
                    feed = Feed.create_and_subscribe(title, link, site, self.user)

                    userfeed = feed.userfeed(self.user)
                    userfeed.tags.add(folder.title)
        return True
コード例 #4
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_unauthorized(self):
        feed = Feed()
        feed.link = 'http://www.paulhummer.org/rss'
        feed.save()

        uri = '/api/0.9/feed/{0}'.format(feed.pk)
        response = self.client.get(uri, follow=True)
        self.assertEqual(response.status_code, 404)
コード例 #5
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_feeds_but_no_subscriptions(self):
        feed = Feed()
        feed.link = 'http://www.paulhummer.org/rss'
        feed.save()

        response = self.client.get('/api/0.9/feed/')
        content = json.loads(response.content)
        objects = content['objects']

        self.assertEqual(len(objects), 0)
コード例 #6
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_resource_read(self):
        feed = Feed()
        feed.link = 'http://www.paulhummer.org/rss'
        feed.save()
        feed.update()
        feed.add_subscriber(self.user)

        response = self.client.get('/api/0.9/item/')
        self.assertEqual(response.status_code, 200)

        content = json.loads(response.content)
        objects = content['objects']
        resource = objects[0]

        response = self.client.get(resource['resource_uri'])
        self.assertEqual(response.status_code, 200)

        content = json.loads(response.content)

        resource_id = resource['resource_uri'].split('/')[-2]
        item = FeedItem.objects.get(pk=resource_id)
        useritem = UserFeedItem.objects.get(user=self.user, item=item)

        self.assertEqual(resource['read'], False)

        useritem.read = True
        useritem.save()

        response = self.client.get(resource['resource_uri'])
        resource = json.loads(response.content)

        self.assertEqual(resource['read'], True)
コード例 #7
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_resource_put_read(self):
        feed = Feed()
        feed.link = 'http://www.paulhummer.org/rss'
        feed.save()
        feed.update()
        feed.add_subscriber(self.user)

        response = self.client.get('/api/0.9/item/')
        self.assertEqual(response.status_code, 200)

        content = json.loads(response.content)
        objects = content['objects']
        resource = objects[0]

        response = self.client.get(resource['resource_uri'])
        self.assertEqual(response.status_code, 200)

        resource = json.loads(response.content)

        self.assertEqual(resource['read'], False)

        resource['read'] = True

        self.client.put(
            resource['resource_uri'],
            data=json.dumps(resource),
            content_type='application/json')

        response = self.client.get(resource['resource_uri'])
        resource = json.loads(response.content)
        self.assertEqual(resource['read'], True)
コード例 #8
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_dates(self):
        links = [
            "http://theworstthingever.com/index.rdf",
            "http://news.ycombinator.com/rss",
            "http://aw.lackof.org/~awilliam/blog/index.rss",
            "http://adeem.me/blog/feed/rss/",
            "http://lusars.net/~mhunter/rss.xml",
            "http://feeds.feedburner.com/Manbabies",
            "http://www.365portraits.com/rss.php",
            "http://iphonedevelopmentbits.com/feed/rss",
            "http://blog.myspace.com/blog/rss.cfm?friendID=4470742",
        ]

        for link in links:
            feed = Feed()
            feed.link = link
            feed.save()
            feed.update()
            first_update = feed.items.count()

            # Pause a few seconds, so when we fetch again, utcnow() in the
            # model will be a different time (and therefore potentially a
            # different GUID)
            time.sleep(3)
            feed.update()
            second_update = feed.items.count()

            # Ensure that fetching feeds with missing or malformed dates
            # do not result in different GUIDs (they should resolve to
            # the same GUID).
            self.assertEqual(first_update, second_update)
コード例 #9
0
ファイル: test_tasks.py プロジェクト: ReadRaven/readraven
    def test_run(self):
        with open(SECURE_FILE) as f:
            secure = f.read()

        owner = User()
        owner.email = 'Alex'
        owner.save()

        other_owner = User()
        other_owner.email = 'Mike'
        other_owner.save()
        other_feed = Feed()
        other_feed.save()
        other_owner.subscribe(other_feed)

        task = tasks.SyncFromReaderAPITask()
        result = task.delay(owner, 10, '*****@*****.**', secure)

        self.assertTrue(result.successful())

        feeds = Feed.objects.all()
        # Tricky. We are subscribed to 122 feeds
        # We create another feed above, to get to 123
        # But 3 feeds in the import were "shared-with-you" so the total
        # number of feeds should be 126
        self.assertEqual(feeds.count(), 126)

        total_feeds = Feed.objects.all().count()
        owner = User.objects.get(pk=owner.pk)
        # Verify that we do not get subscribed to feeds when items are
        # 'shared-with-you'.
        self.assertEqual(owner.feeds.count(), 122)

        # Ensure create_raw() won't create a duplicate feed
        title = u'A Softer World'
        link = u'http://www.rsspect.com/rss/asw.xml'
        site = u'http://www.asofterworld.com'

        feed = Feed.objects.get(link=link)
        duplicate = Feed.create_raw(title, link, site)
        duplicate.add_subscriber(owner)
        self.assertEqual(feed.pk, duplicate.pk)

        # Testing that subscribing a second time doesn't blow up.
        duplicate2 = Feed.create_and_subscribe(title, link, site, owner)
        self.assertEqual(feed.pk, duplicate2.pk)

        tagged = UserFeedItem.objects.filter(tags__name__in=['shared-with-you'])
        self.assertEqual(len(tagged), 10)
コード例 #10
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_autodiscovery(self):
        # Test discovery
        url = "http://boingboing.net"
        feed = Feed.autodiscover(url)
        self.assertEqual(feed, "http://boingboing.net/atom.xml")

        # Ensure passing an RSS link returns itself
        url = "http://www.rsspect.com/rss/asw.xml"
        feed = Feed.autodiscover(url)
        self.assertEqual(feed, url)

        # Bogus url
        url = "http://"
        feed = Feed.autodiscover(url)
        self.assertEqual(feed, None)
コード例 #11
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_lookup_by_unread_and_feed(self):
        '''Only return the unread items by feed.'''
        # Test data
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        item = FeedItem()
        item.feed = feed
        item.title = 'Feed title'
        item.link = 'http://www.paulhummer.org/rss/1'
        item.guid = 'http://www.paulhummer.org/rss/1'
        item.published = datetime.now()
        item.save()

        item2 = FeedItem()
        item2.feed = feed
        item2.title = 'Feed title 2'
        item2.link = 'http://www.paulhummer.org/rss/2'
        item2.guid = 'http://www.paulhummer.org/rss/2'
        item2.published = datetime.now()
        item2.save()

        userfeed = UserFeed.objects.get(user=self.user, feed=feed)

        userfeeditem = UserFeedItem.objects.get(
            user=self.user, feed=feed, item=item)
        userfeeditem.read = True
        userfeeditem.save()

        mike = User.objects.create_user(
            'mike', '*****@*****.**', password='******')
        mike.save()
        feed2 = Feed.create_and_subscribe(
            'Gothamist', 'http://feeds.gothamistllc.com/gothamist05-', None, mike)
        item4 = FeedItem()
        item4.feed = feed2
        item4.title = 'Feed title'
        item4.link = 'http://www.gothamist.com/rss/1'
        item4.guid = 'http://www.gothamist.com/rss/1'
        item4.published = datetime.now()
        item4.save()

        # Actual test
        result = self.api_client.get(
            '/api/0.9.5/item/?read=False&feed={0}'.format(userfeed.pk))
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(len(content['objects']), 1)
コード例 #12
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_malformed(self):
        """Test nasty feeds that we've discovered in the wild"""
        owner = User()
        owner.email = "Bob"
        owner.save()

        # Really long titles.
        title = u"minimal linux"
        link = u"http://minimallinux.com/rss"
        site = u"http://minimallinux.com/"
        feed = Feed.create_and_subscribe(title, link, site, owner)

        # This feed is dead, so we don't expect any items downloaded.
        userfeeditems = FeedItem.objects.for_user(owner)
        self.assertEqual(userfeeditems.count(), 0)

        # Discovered while trying to import from google reader.
        # >>> len(e.title)
        # 857
        item = FeedItem()
        item.feed = feed
        item.title = u"This isn't a question but more of a submission for your \"enough\" poll-type thing.<br>\r\n<br>\r\nI would go with Arch as my main distro. It\u2019s the simplest and easiest to setup of any distro I\u2019ve used.<br>\r\n<br>\r\nMy window manager of choice would be dwm. Amazingly simple and very customizable.<br>\r\n<br>\r\nI would use vim for any text editing I would need to do (which mostly involves programming)<br>\r\n<br>\r\nI would be able to get away with using feh as my image viewer, since I never really need to do any image editing.<br>\r\n<br>\r\nChromium, of course.<br>\r\n<br>\r\nI would use dmenu as my app launcher. Another suckless creation, very simple and very fast.<br>\r\n<br>\r\nDropbox for file syncing.<br>\r\n<br>\r\nPidgin (haven't looked that much for something simpler) for AIM.<br>\r\n<br>\r\nI would also need a few programming related things such as ruby, gcc, make, etc."
        item.link = u"http://minimallinux.com/post/7031884799"
        item.description = u"<p>Nice\u2014good stuff here. I really dig dmenu.</p>"
        item.published = datetime.utcfromtimestamp(1309319839)
        item.atom_id = ""
        item.reader_guid = u"tag:google.com,2005:reader/item/022fe5bb1abdb67a"
        item.guid = item.calculate_guid()
        item.save()

        userfeeditems = FeedItem.objects.for_user(owner)
        self.assertEqual(userfeeditems.count(), 1)
コード例 #13
0
ファイル: test_tasks.py プロジェクト: ReadRaven/readraven
    def test_run(self):
        feed = Feed()
        feed.link = 'http://paulhummer.org/rss'
        last_fetched = datetime.now() - timedelta(minutes=31)
        feed.last_fetched = last_fetched
        feed.save()

        task = tasks.UpdateFeedTask()
        result = task.delay()

        self.assertTrue(result.successful())

        # Re-fetch the feed
        feed = Feed.objects.get(link='http://paulhummer.org/rss')
        self.assertNotEqual(feed.last_fetched, last_fetched)
        self.assertEqual(feed.items.count(), 20)
コード例 #14
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_endpoint_by_id(self):
        '''Get a specific feed item.'''
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        item = FeedItem()
        item.feed = feed
        item.title = 'Feed title'
        item.link = 'http://www.paulhummer.org/rss/1'
        item.guid = 'http://www.paulhummer.org/rss/1'
        item.published = datetime.now()
        item.save()
        userfeeditem = UserFeedItem.objects.get(user=self.user, item=item)
        userfeeditem.tags.add('hipster', 'douche')
        userfeeditem.save()

        result = self.api_client.get('/api/0.9.5/item/')
        content = json.loads(result.content)
        result = self.api_client.get(content['objects'][0]['resource_uri'])
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(
            sorted(content.keys()),
            ['description', 'feed', 'feed_id', 'feed_tags', 'feed_title',
             'id', 'link', 'published', 'read', 'resource_uri', 'starred',
             'tags', 'title'])
        self.assertEqual(content['description'], item.description)
        self.assertEqual(content['link'], item.link)
        self.assertEqual(
            dateutil.parser.parse(content['published']),
            item.published)
        self.assertEqual(content['title'], item.title)
        self.assertEqual(content['feed'], '/api/0.9.5/feed/1/')
        self.assertEqual(content['tags'], ['hipster', 'douche'])
コード例 #15
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_endpoint_paging(self):
        '''Page out more than 20 items.'''
        # Test data
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        for i in xrange(0, 50):
            item = FeedItem()
            item.feed = feed
            item.title = 'Feed title {0}'.format(i)
            item.link = 'http://www.paulhummer.org/rss/{0}'.format(i)
            item.guid = 'http://www.paulhummer.org/rss/{0}'.format(i)
            item.published = datetime.now()
            item.save()

        # Actual test
        result = self.api_client.get('/api/0.9.5/item/')
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(content.keys(), ['meta', 'objects'])
        self.assertEqual(
            content['meta'].keys(),
            ['previous', 'total_count', 'offset', 'limit', 'next'])
        self.assertEqual(content['meta']['previous'], None)
        self.assertEqual(content['meta']['total_count'], 50)
        self.assertEqual(content['meta']['offset'], 0)
        self.assertEqual(content['meta']['limit'], 20)
        self.assertEqual(
            content['meta']['next'].split('?')[1],
            'limit=20&offset=20')
        self.assertEqual(len(content['objects']), 20)
コード例 #16
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_endpoint_single_item(self):
        '''The root feed endpoint returns a list of items.'''
        # Test data
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        item = FeedItem()
        item.feed = feed
        item.title = 'Feed title'
        item.link = 'http://www.paulhummer.org/rss/1'
        item.guid = 'http://www.paulhummer.org/rss/1'
        item.published = datetime.now()
        item.save()

        # Actual test
        result = self.api_client.get('/api/0.9.5/item/')
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(content.keys(), ['meta', 'objects'])
        self.assertEqual(
            content['meta'].keys(),
            ['previous', 'total_count', 'offset', 'limit', 'next'])
        self.assertEqual(content['meta']['previous'], None)
        self.assertEqual(content['meta']['total_count'], 1)
        self.assertEqual(content['meta']['offset'], 0)
        self.assertEqual(content['meta']['limit'], 20)
        self.assertEqual(content['meta']['next'], None)
コード例 #17
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_filter_by_tag(self):
        '''Only return feeds by a given tag.'''
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        userfeed = UserFeed.objects.get(user=self.user, feed=feed)
        userfeed.tags.add('hipster', 'douchery')
        userfeed.save()

        feed2 = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss1', None, self.user)
        userfeed2 = UserFeed.objects.get(user=self.user, feed=feed2)
        userfeed2.tags.add('test', 'tags')
        userfeed2.save()

        result = self.api_client.get('/api/0.9.5/feed/?tags=hipster')
        content = json.loads(result.content)
        self.assertEqual(content['meta']['total_count'], 1)
コード例 #18
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_userfeed_tags(self):
        bob = User.objects.create_user("bob", "*****@*****.**", password="******")
        bob.save()
        bob_feed = Feed.create_and_subscribe("Paul Hummer", "http://www.paulhummer.org/rss", None, bob)
        bob_userfeed = UserFeed.objects.get(user=bob, feed=bob_feed)
        bob_userfeed.tags.add("linux", "nerd")
        bob_userfeed.save()

        mark = User.objects.create_user("mark", "*****@*****.**", password="******")
        mark.save()
        mark_feed = Feed.create_and_subscribe("Paul Hummer", "http://www.paulhummer.org/rss1", None, mark)
        mark_userfeed = UserFeed.objects.get(user=mark, feed=mark_feed)
        mark_userfeed.tags.add("linux")
        mark_userfeed.save()

        tags = UserFeed.userfeed_tags(bob)
        self.assertEqual(tags.count(), 2)
        self.assertEqual([tag.name for tag in tags.all()], ["linux", "nerd"])
コード例 #19
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_duplicates(self):
        """Ensure that we can't create duplicate feeds using create_and_subscribe()"""
        user = User()
        user.email = "Bob"
        user.save()

        feed = Feed()
        feed.title = "BoingBoing"
        feed.link = "http://boingboing.net/atom.xml"
        feed.site = "http://boingboing.net"
        f = Feed.create_and_subscribe(feed.title, feed.link, feed.site, user)

        feed2 = Feed()
        feed2.title = "BoingBoing"
        feed2.link = "http://boingboing.net/atom.xml"
        feed2.site = "http://boingboing.net"
        # XXX: TODO: we need to add/test duplicate checks save() too :(
        f2 = Feed.create_and_subscribe(feed2.title, feed2.link, feed2.site, user)

        self.assertEqual(f.pk, f2.pk)
コード例 #20
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_lookup_by_feed_id(self):
        '''Filter items by feed.id.'''
        # Test data
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        item = FeedItem()
        item.feed = feed
        item.title = 'Feed title'
        item.link = 'http://www.paulhummer.org/rss/1'
        item.guid = 'http://www.paulhummer.org/rss/1'
        item.published = datetime.now()
        item.save()

        item = FeedItem()
        item.feed = feed
        item.title = 'Feed title 2'
        item.link = 'http://www.paulhummer.org/rss/2'
        item.guid = 'http://www.paulhummer.org/rss/2'
        item.published = datetime.now()
        item.save()

        feed2 = Feed.create_and_subscribe(
            'Gothamist', 'http://feeds.gothamistllc.com/gothamist05', None,
            self.user)
        item2 = FeedItem()
        item2.feed = feed2
        item2.title = 'Feed title'
        item2.link = 'http://www.gothamist.com/rss/1'
        item2.guid = 'http://www.gothamist.com/rss/1'
        item2.published = datetime.now()
        item2.save()

        userfeed = UserFeed.objects.get(user=self.user, feed=feed)

        # Actual test
        result = self.api_client.get(
            '/api/0.9.5/item/?feed={0}'.format(userfeed.pk))
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(len(content['objects']), 2)
コード例 #21
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_lookup_by_feed_tag(self):
        '''Only return the unread items.'''
        # Test data
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        item = FeedItem()
        item.feed = feed
        item.title = 'Feed title'
        item.link = 'http://www.paulhummer.org/rss/1'
        item.guid = 'http://www.paulhummer.org/rss/1'
        item.published = datetime.now()
        item.save()

        item2 = FeedItem()
        item2.feed = feed
        item2.title = 'Feed title 2'
        item2.link = 'http://www.paulhummer.org/rss/2'
        item2.guid = 'http://www.paulhummer.org/rss/2'
        item2.published = datetime.now()
        item2.save()
        userfeed2 = UserFeed.objects.get(user=self.user, feed=feed)
        userfeed2.tags.add('hipster')
        userfeed2.save()

        feed2 = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss1', None, self.user)
        item3 = FeedItem()
        item3.feed = feed2
        item3.title = 'Feed title 3'
        item3.link = 'http://www.paulhummer.org/rss/3'
        item3.guid = 'http://www.paulhummer.org/rss/3'
        item3.published = datetime.now()
        item3.save()

        # Actual test
        result = self.api_client.get(
            '/api/0.9.5/item/?feed_tags=hipster')
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(len(content['objects']), 2)
コード例 #22
0
ファイル: test_tasks.py プロジェクト: ReadRaven/readraven
    def test_duplicates(self):
        user = User()
        user.email = 'Bob'
        user.save()

        tmp = Feed()
        tmp.title = 'Marginal Revolution'
        tmp.link = 'http://feeds.feedburner.com/marginalrevolution/feed'
        tmp.site = 'http://marginalrevolution.com/'
        last_fetched = datetime.now() - timedelta(minutes=31)
        tmp.last_fetched = last_fetched
        # Fetch #1
        feed = Feed.create_and_subscribe(tmp.title, tmp.link, tmp.site, user)

        # Fetch #2
        task1 = tasks.UpdateFeedTask()
        result1 = task1.delay()

        # Force fetch #3
        last_fetched = datetime.now() - timedelta(minutes=31)
        feed.last_fetched = last_fetched
        feed.save()

        task2 = tasks.UpdateFeedTask()
        result2 = task2.delay()

        self.assertEqual(feed.feeditems.count(), 15)
コード例 #23
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_unsubscribe(self):
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        userfeed = UserFeed.objects.get(user=self.user, feed=feed)

        response = self.api_client.delete(
            '/api/0.9.5/feed/{0}/'.format(userfeed.pk))
        self.assertEqual(response.status_code, 204)

        #Ensure the feed is now deleted.
        response = self.api_client.get('/api/0.9/feed/')
        content = json.loads(response.content)
        self.assertEqual(len(content['objects']), 0)
コード例 #24
0
ファイル: test_tasks.py プロジェクト: ReadRaven/readraven
    def test_run(self):
        owner = User()
        owner.email = 'Bob'
        owner.save()

        other_owner = User()
        other_owner.email = 'Mike'
        other_owner.save()
        other_feed = Feed()
        other_feed.save()
        other_owner.subscribe(other_feed)

        task = tasks.EatTakeoutTask()
        result = task.delay(
            owner,
            os.path.join(TESTDATA_DIR, '*****@*****.**'))

        self.assertTrue(result.successful())

        total_feeds = Feed.objects.all().count()
        owner = User.objects.get(pk=owner.pk)
        self.assertEqual(total_feeds, 146)
        self.assertEqual(owner.feeds.count(), 122)

        starred = UserFeedItem.objects.filter(starred=True)
        self.assertEqual(len(starred), 9)

        shared_with_me = UserFeedItem.objects.filter(tags__name__in=['shared-with-you'])
        self.assertEqual(len(shared_with_me), 31)

        shared = UserFeedItem.objects.filter(tags__name__in=['shared'])
        self.assertEqual(len(shared), 1)

        # See how all the above should add up!
        imported = UserFeedItem.objects.filter(tags__name__in=['imported'])
        self.assertEqual(len(imported), 41)
コード例 #25
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_tagging(self):
        user = User()
        user.email = "Bob"
        user.save()

        feed = Feed()
        feed.title = "BoingBoing"
        feed.link = "http://boingboing.net"
        feed.save()
        feed.add_subscriber(user)

        item = FeedItem()
        item.title = "Octopus v. Platypus"
        item.description = "A fight to the death."
        item.link = item.guid = "http://www.example.com/rss/post"
        item.published = datetime.now()
        item.feed = feed
        item.save()

        item2 = FeedItem()
        item2.title = "Cute bunny rabbit video"
        item2.description = "They die at the end."
        item2.link = item.guid = "http://www.example.com/rss/post"
        item2.published = datetime.now()
        item2.feed = feed
        item2.save()

        userfeeditem = UserFeedItem.objects.get(user=user, item=item)
        userfeeditem.tags.add("cute", "platypus")

        userfeeditem2 = UserFeedItem.objects.get(user=user, item=item2)
        userfeeditem2.tags.add("bunny", "cute")

        self.assertIn("cute", [tag.name for tag in userfeeditem.tags.all()])
        self.assertIn("platypus", [tag.name for tag in userfeeditem.tags.all()])
        self.assertNotIn("bunny", [tag.name for tag in userfeeditem.tags.all()])

        tagged = UserFeedItem.objects.filter(tags__name__in=["cute"])

        self.assertEquals(len(tagged), 2)

        userfeeditem.tags.set("test")
        self.assertEquals(len(userfeeditem.tags.all()), 1)
        self.assertNotIn("cute", [tag.name for tag in userfeeditem.tags.all()])

        # API claims we can do this safely without raising an exception
        userfeeditem.tags.remove("cute")

        userfeeditem.tags.clear()
        self.assertEquals(len(userfeeditem.tags.all()), 0)
コード例 #26
0
ファイル: tests.py プロジェクト: ReadRaven/readraven
    def test_user_subscribe(self):
        '''Test the syntactic sugar monkeypatch for User.subscribe.'''
        user = User()
        user.email = 'Bob'
        user.save()

        feed = Feed()
        feed.title = 'BoingBoing'
        feed.link = 'http://boingboing.net'
        feed.save()

        unused = Feed()
        unused.title = 'xkcd'
        unused.save()

        item = FeedItem()
        item.title = 'Octopus v. Platypus'
        item.description = 'A fight to the death.'
        item.link = item.guid = 'http://www.example.com/rss/post'
        item.published = datetime.now()
        item.feed = feed
        item.save()

        item2 = FeedItem()
        item2.title = 'Cute bunny rabbit video'
        item2.description = 'They die at the end.'
        item2.link = item.guid = 'http://www.example.com/rss/post'
        item2.published = datetime.now()
        item2.feed = feed
        item2.save()

        user.subscribe(feed)

        self.assertEqual(user.feeds.count(), 1)
        self.assertEqual(user.feeditems.count(), 2)
        self.assertEqual(user.feeds[0].title, feed.title)

        # Testing we are using order_by() in User.feeditems() monkeypatch
        self.assertEqual(user.feeditems[0].title, item.title)
コード例 #27
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_sort_published(self):
        '''We can sort by 'published'.'''
        # Test data
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)
        item = FeedItem()
        item.feed = feed
        item.title = 'Feed 1'
        item.link = 'http://www.paulhummer.org/rss/1'
        item.guid = 'http://www.paulhummer.org/rss/1'
        item.published = datetime.now()
        item.save()

        item = FeedItem()
        item.feed = feed
        item.title = 'Feed 2'
        item.link = 'http://www.paulhummer.org/rss/2'
        item.guid = 'http://www.paulhummer.org/rss/2'
        item.published = datetime.now() - timedelta(days=-1)
        item.save()

        item = FeedItem()
        item.feed = feed
        item.title = 'Feed 3'
        item.link = 'http://www.paulhummer.org/rss/3'
        item.guid = 'http://www.paulhummer.org/rss/3'
        item.published = datetime.now() - timedelta(days=-2)
        item.save()

        # Actual test
        result = self.api_client.get('/api/0.9.5/item/?order_by=-published')
        self.assertEqual(result.status_code, 200)

        content = json.loads(result.content)
        self.assertEqual(
            [item['title'] for item in content['objects']],
            ['Feed 3', 'Feed 2', 'Feed 1'])

        result = self.api_client.get('/api/0.9.5/item/?order_by=published')
        self.assertEqual(result.status_code, 200)

        content = json.loads(result.content)
        self.assertEqual(
            [item['title'] for item in content['objects']],
            ['Feed 1', 'Feed 2', 'Feed 3'])
コード例 #28
0
ファイル: test_resources.py プロジェクト: ReadRaven/readraven
    def test_endpoint_single_item(self):
        '''The root feed endpoint returns a list of feeds.'''
        feed = Feed.create_and_subscribe(
            'Paul Hummer', 'http://www.paulhummer.org/rss', None, self.user)

        result = self.api_client.get('/api/0.9.5/feed/')
        self.assertEqual(200, result.status_code)

        content = json.loads(result.content)
        self.assertEqual(content.keys(), ['meta', 'objects'])
        self.assertEqual(
            content['meta'].keys(),
            ['previous', 'total_count', 'offset', 'limit', 'next'])
        self.assertEqual(content['meta']['previous'], None)
        self.assertEqual(content['meta']['total_count'], 1)
        self.assertEqual(content['meta']['offset'], 0)
        self.assertEqual(content['meta']['limit'], 20)
        self.assertEqual(content['meta']['next'], None)
コード例 #29
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_update(self):
        user = User()
        user.email = "Bob"
        user.save()

        feed = Feed()
        feed.link = "http://paulhummer.org/rss"
        feed.save()
        feed.update()

        # Re-fetch the feed
        feed = Feed.objects.get(pk=feed.pk)

        self.assertEqual(feed.items.count(), 20)
        self.assertEqual(feed.title, "Dapper as...")
        self.assertTrue(feed.description.startswith("Bike rider"))
コード例 #30
0
ファイル: test_models.py プロジェクト: ReadRaven/readraven
    def test_malformed(self):
        owner = User()
        owner.email = "Bob"
        owner.save()

        other_owner = User()
        other_owner.email = "Mike"
        other_owner.save()
        other_feed = Feed()
        other_feed.save()
        other_owner.subscribe(other_feed)

        # Lack of title
        title = u"rockmnkey"
        link = u"http://rockmnkey.livejournal.com/data/rss"
        site = u"http://rockmnkey.livejournal.com/"
        feed = Feed.create_and_subscribe(title, link, site, owner)

        # Duplicate entries
        title = u"Canonical Voices"
        link = u"http://voices.canonical.com/feed/atom/"
        site = u"http://voices.canonical.com/"
        feed = Feed.create_and_subscribe(title, link, site, owner)

        # Lack of atom_id
        title = u"aw's blog"
        link = u"http://aw.lackof.org/~awilliam/blog/index.rss"
        site = u"http://aw.lackof.org/~awilliam/blog/"
        feed = Feed.create_and_subscribe(title, link, site, owner)

        # Dead feed
        title = u"Clayton - MySpace Blog"
        link = u"http://blog.myspace.com/blog/rss.cfm?friendID=73367402"
        site = None
        feed = Feed.create_and_subscribe(title, link, site, owner)

        feeds = Feed.objects.all()
        self.assertEqual(feeds.count(), 5)

        total_feeds = Feed.objects.all().count()
        owner = User.objects.get(pk=owner.pk)
        self.assertEqual(owner.feeds.count(), total_feeds - 1)