def test_read_all_and_restore(self): fs = FeedStore() f = self.create_feed('Feed 4', 'http://example.org/feed4/rss', 1) feed_id = str(f.id) fs.ensure_feed_directory(feed_id) self.populate_feed(fs, feed_id, 10) entries = fs.get_entries(feed_id) self.assertEqual(10, len(entries)) # Restore when no items unread should make no difference fs.restore_all_items(feed_id) entries = fs.get_entries(feed_id) self.assertEqual(10, len(entries)) # Read one item then restore them all fs.mark_read(feed_id, entries[0]['ref']) self.assertEqual(9, len(fs.get_entries(feed_id))) fs.restore_all_items(feed_id) entries = fs.get_entries(feed_id) self.assertEqual(10, len(entries)) # Read all items fs.mark_all_read(feed_id) entries = fs.get_entries(feed_id) self.assertEqual(0, len(entries)) # Restore all items fs.restore_all_items(feed_id) entries = fs.get_entries(feed_id) self.assertEqual(10, len(entries))
def feed(request, feed_id='0'): store = FeedStore() try: feed = Feed.objects.get(id=int(feed_id)) except Feed.DoesNotExist: print "Cannot find the feed" return Http404 if not feed.owner_id == request.user.id: return HttpResponse('Unauthorized', status=401) if request.method == "GET": skip = 0 take = None if request.GET.has_key('skip'): skip = int(request.GET['skip']) if request.GET.has_key('take'): take = int(request.GET['take']) entries = store.get_entries(feed_id, skip=skip, take=take) return HttpResponse(json.dumps(entries, cls=TimeHandlingEncoder), mimetype='application/json') elif request.method == "POST": data = request.read() feed_update = json.loads(data) store = FeedStore() responseData = {} if 'keep' in feed_update: for item in feed_update['keep']: try: store.keep(feed_id, item) except EntryDoesNotExist: pass; if 'unkeep' in feed_update: for item in feed_update['unkeep']: try: store.unkeep(feed_id, item) except EntryDoesNotExist: pass; if 'read' in feed_update: feed.unread_count = store.mark_read(feed_id, feed_update['read']) feed.save() responseData['unread_count'] = feed.unread_count if 'read_all' in feed_update: if feed_update['read_all'] < 0: store.mark_all_read(feed_id) feed.unread_count = 0 feed.save() if 'restore_all' in feed_update: store.restore_all_items(feed_id) entries = store.get_entries(feed_id) return HttpResponse(json.dumps(entries, cls=TimeHandlingEncoder), mimetype='application/json') if 'refresh' in feed_update: feedprocessor.process_feed(feed_id) entries = store.get_entries(feed_id) return HttpResponse(json.dumps(entries, cls=TimeHandlingEncoder), mimetype='application/json') return HttpResponse(json.dumps(responseData)) elif request.method == "DELETE": feed.is_deleted = True feed.save() #if 'tag' in feed_update: # for item_tag in feed_update['tag']: # store.tag_item(item_tag['item'], item_tag['tag']) return HttpResponse()
def test_read_many(self): fs = FeedStore() f = self.create_feed('Feed 5', 'http://example.org/feed4/rss', 1) feed_id = str(f.id) fs.ensure_feed_directory(feed_id) self.populate_feed(fs, feed_id, 10) entries = fs.get_entries(feed_id) self.assertEqual(10, len(entries)) remaining_count = fs.mark_read(feed_id, (e['ref'] for e in entries[0:3])) self.assertEqual(7, remaining_count)
def test_keep_unread(self): fs = FeedStore() f = self.create_feed('Feed 3', 'http://example.org/feed3/rss', 1) feed_id = str(f.id) fs.ensure_feed_directory(feed_id) self.populate_feed(fs, feed_id, 2) entries = fs.get_entries(feed_id) self.assertEqual(2, len(entries)) fs.keep(feed_id, entries[0]['ref']) fs.mark_read(feed_id, entries[0]['ref']) # should have no effect fs.mark_read(feed_id, entries[1]['ref']) # should delete entry not in kept directory entries = fs.get_entries(feed_id) # should return the 1 kept item self.assertEqual(1, len(entries)) fs.unkeep(feed_id, entries[0]['ref']) # will restore item back to feed directory entries = fs.get_entries(feed_id) # should return 1 item from the feed directory self.assertEqual(1, len(entries)) fs.mark_read(feed_id, entries[0]['ref']) # should delete entry entries = fs.get_entries(feed_id) self.assertEqual(0, len(entries))
def test_read_entry(self): fs = FeedStore() f = self.create_feed('Feed 2', 'http://example.org/feed2/rss', 1) feed_id = str(f.id) fs.ensure_feed_directory(feed_id) entry = { 'title': 'Test Entry', 'published_parsed': f.last_updated.utctimetuple(), 'guid' : 'http://example.org/feed2/?p=2' } fs.add_entry(feed_id, entry) counts_before = fs.get_feed_counts() self.assertEqual(1, counts_before[feed_id]) entry = fs.get_entries(feed_id)[0] remaining_item_count = fs.mark_read(feed_id, entry['ref']) self.assertEqual(0, remaining_item_count) counts_after = fs.get_feed_counts() self.assertEqual(0, counts_after[feed_id]) self.assertTrue(os.path.exists(os.path.join(TEST_PATH, "feeds", feed_id, 'read', entry['ref'])))