def test_remove_subscription(fx_stages, fx_subscription): a, b = fx_stages with a: s = SubscriptionList() s.add(fx_subscription) a.subscriptions = s with a: assert fx_subscription in a.subscriptions with b: assert fx_subscription in b.subscriptions added = Subscription( label='Added', feed_uri='http://example.com/atom.xml', alternate_uri='http://example.com/' ) with a: a_s = a.subscriptions a_s.remove(fx_subscription) a.subscriptions = a_s with b: b_s = b.subscriptions b_s.add(added) b.subscriptions = b_s with a: assert added in a.subscriptions assert fx_subscription not in a.subscriptions with b: assert added in b.subscriptions assert fx_subscription not in b.subscriptions
def test_remove_category(fx_stages, fx_subscription): a, b = fx_stages with a: s = SubscriptionList() c = Category(label='To be deleted') c.add(fx_subscription) s.add(c) a.subscriptions = s with a: assert c in a.subscriptions assert fx_subscription in a.subscriptions.recursive_subscriptions with b: assert c in b.subscriptions assert fx_subscription in b.subscriptions.recursive_subscriptions added = Category(label='Added') with a: a_s = a.subscriptions a_s.remove(c) a.subscriptions = a_s with b: b_s = b.subscriptions b_s.add(added) b.subscriptions = b_s with a: assert added in a.subscriptions assert c not in a.subscriptions assert fx_subscription not in a.subscriptions.recursive_subscriptions with b: assert added in b.subscriptions assert c not in b.subscriptions assert fx_subscription not in b.subscriptions.recursive_subscriptions
def test_count_duplicated_url(fx_subscription): subs = SubscriptionList() subs.add(fx_subscription) assert len(subs) == 1 assert list(subs) == [fx_subscription] subs.add(fx_subscription) assert len(subs) == 1 assert list(subs) == [fx_subscription]
def test_count_after_remove(fx_subscription): subs = SubscriptionList() subs.add(fx_subscription) assert len(subs) == 1 assert list(subs) == [fx_subscription] subs.discard(fx_subscription) assert not subs assert len(subs) == 0 assert list(subs) == []
def test_write_subscription_with_ascii_title(): rss = rss_template_with_title.format('english') feed, _ = parse_rss2(rss) feed.id = 'id' sublist = SubscriptionList() sublist.subscribe(feed) g = write(sublist) assert ''.join(g)
def test_write_subscription_with_ascii_title(): rss = rss_template_with_title.format('english') feed, _ = parse_rss(rss) feed.id = 'id' sublist = SubscriptionList() sublist.subscribe(feed) g = write(sublist) assert ''.join(g)
def test_write_subscription_with_nonascii_title(): '''SubscriptionList convert the feed title to :class:`str`, and :class:`write` try to encode the title in utf8. When non-ascii characters are in the title, UnicodeDecodeError is raised. ''' rss = rss_template_with_title.format('한글') feed, _ = parse_rss2(rss) feed.id = 'id' sublist = SubscriptionList() sublist.subscribe(feed) g = write(sublist) assert ''.join(g)
def test_write_subscription_with_nonascii_title(): '''SubscriptionList convert the feed title to :class:`str`, and :class:`write` try to encode the title in utf8. When non-ascii characters are in the title, UnicodeDecodeError is raised. ''' rss = rss_template_with_title.format('한글') feed, _ = parse_rss(rss) feed.id = 'id' sublist = SubscriptionList() sublist.subscribe(feed) g = write(sublist) assert ''.join(g)
def test_detect_subcategory_changes(fx_stages): stage, _ = fx_stages subs = SubscriptionList() category = Category(label='first-order') subcategory = Category(label='second-order') category.add(subcategory) subs.add(category) assert not subs.categories['first-order'].categories['second-order'] with stage: stage.subscriptions = subs assert not (stage.subscriptions.categories['first-order'] .categories['second-order']) subcategory.add(Category(label='added')) assert subs.categories['first-order'].categories['second-order'] with stage: stage.subscriptions = subs assert (stage.subscriptions.categories['first-order'] .categories['second-order'])
def test_stage_subscription_list(fx_repo, fx_session): stage = Stage(fx_session, fx_repo) with stage: stage.subscriptions = SubscriptionList() subs = stage.subscriptions subs.add(Category(label='Test')) stage.subscriptions = subs with stage: assert (frozenset(stage.subscriptions) == frozenset( [Category(label='Test')]))
def xmls(request, fx_test_stage): stage = fx_test_stage subscriptions = SubscriptionList() categoryone = Category(label='categoryone', _title='categoryone') categorytwo = Category(label='categorytwo', _title='categorytwo') categorythree = Category(label='categorythree', _title='categorythree') subscriptions.add(categoryone) subscriptions.add(categorythree) categoryone.add(categorytwo) pair = { 'http://feedone.com/feed/atom/': categoryone, 'http://feedtwo.com/feed/atom/': categorytwo, 'http://feedthree.com/feed/atom/': subscriptions, 'http://feedfour.com/feed/atom/': categorythree } generator = crawl(pair.keys(), 4) with stage: for feed_url, feed, hints in generator: sub = pair[feed_url].subscribe(feed) stage.feeds[sub.feed_id] = feed stage.subscriptions = subscriptions
def __init__(self, category_id, return_parent=False): with get_stage() as stage: self.subscriptionlist = (stage.subscriptions if stage.subscriptions else SubscriptionList()) self.value = self.subscriptionlist self.path = ['/'] self.category_id = None target_name = None self.target_child = None try: if category_id: self.category_id = category_id self.path = [key[1:] for key in category_id.split('/')] if return_parent: target_name = self.path.pop(-1) for key in self.path: self.value = self.value.categories[key] if target_name: self.target_child = self.value.categories[target_name] except Exception: raise InvalidCategoryID('The given category ID is not valid')
def test_no_head_set_owner(fx_headless_subscription_list): owner = Person(name='Earth Reader Team', email='earthreader' '@' 'librelist.com', uri='http://earthreader.org/') fx_headless_subscription_list.owner = owner assert fx_headless_subscription_list.owner == owner assert fx_headless_subscription_list.head.owner_name == owner.name assert fx_headless_subscription_list.head.owner_email == owner.email assert fx_headless_subscription_list.head.owner_uri == owner.uri @mark.parametrize('subs', [SubscriptionList(), Category()]) def test_subscription_set_subscribe(subs): feed = Feed(id='urn:earthreader:test:test_subscription_set_subscribe', title=Text(value='Feed title')) feed.links.extend([ Link(uri='http://example.com/index.xml', relation='self', mimetype='application/atom+xml'), Link(uri='http://example.com/', relation='alternate', mimetype='text/html') ]) rv = subs.subscribe(feed, icon_uri='http://example.com/favicon.ico') sub = next(iter(subs)) assert rv is sub assert sub.feed_id == '0691e2f0c3ea1d7fa9da48e14a46ac8077815ad3'
def test_count_empty_list(): subs = SubscriptionList() assert len(subs) == 0 subs = SubscriptionList(body=Body()) assert len(subs) == 0
def test_subscription_set_categories_subscriptions(): subs = SubscriptionList() subs.add(Category(label='Category A')) subs.add(Subscription(label='Subscription A', feed_uri='http://feeda.com/')) subs.add(Category(label='Category B')) subs.add(Subscription(label='Subscription B', feed_uri='http://feedb.com/')) subs.add(Category(label='Category C')) subs.add(Subscription(label='Subscription C', feed_uri='http://feedc.com/')) assert subs.categories == { 'Category A': Category(label='Category A'), 'Category B': Category(label='Category B'), 'Category C': Category(label='Category C') } assert subs.subscriptions == frozenset([ Subscription(label='Subscription A', feed_uri='http://feeda.com/'), Subscription(label='Subscription B', feed_uri='http://feedb.com/'), Subscription(label='Subscription C', feed_uri='http://feedc.com/') ])
def test_no_head_set_owner(fx_headless_subscription_list): owner = Person( name='Earth Reader Team', email='earthreader' '@' 'librelist.com', uri='http://earthreader.org/' ) fx_headless_subscription_list.owner = owner assert fx_headless_subscription_list.owner == owner assert fx_headless_subscription_list.head.owner_name == owner.name assert fx_headless_subscription_list.head.owner_email == owner.email assert fx_headless_subscription_list.head.owner_uri == owner.uri @mark.parametrize('subs', [ SubscriptionList(), Category() ]) def test_subscription_set_subscribe(subs): feed = Feed( id='urn:earthreader:test:test_subscription_set_subscribe', title=Text(value='Feed title') ) feed.links.extend([ Link(uri='http://example.com/index.xml', relation='self', mimetype='application/atom+xml'), Link(uri='http://example.com/', relation='alternate', mimetype='text/html') ])