mirror of
https://github.com/JockeTF/fimfarchive.git
synced 2024-11-22 05:17:59 +01:00
Add selector for refetching data during updates
This commit is contained in:
parent
ea93849fd4
commit
a66ff04f32
2 changed files with 73 additions and 2 deletions
|
@ -29,6 +29,7 @@ from fimfarchive.mappers import StoryDateMapper
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'Selector',
|
'Selector',
|
||||||
|
'RefetchSelector',
|
||||||
'UpdateSelector',
|
'UpdateSelector',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -148,3 +149,15 @@ class UpdateSelector(Selector):
|
||||||
return self.flavored(old, UpdateStatus.DELETED)
|
return self.flavored(old, UpdateStatus.DELETED)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
class RefetchSelector(UpdateSelector):
|
||||||
|
"""
|
||||||
|
Selects the new story if it is available.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def filter_unchanged(self, old, new):
|
||||||
|
"""
|
||||||
|
Returns the new story.
|
||||||
|
"""
|
||||||
|
return new
|
||||||
|
|
|
@ -30,7 +30,7 @@ from fimfarchive.exceptions import InvalidStoryError
|
||||||
from fimfarchive.fetchers import Fetcher
|
from fimfarchive.fetchers import Fetcher
|
||||||
from fimfarchive.flavors import UpdateStatus
|
from fimfarchive.flavors import UpdateStatus
|
||||||
from fimfarchive.mappers import StoryDateMapper
|
from fimfarchive.mappers import StoryDateMapper
|
||||||
from fimfarchive.selectors import UpdateSelector
|
from fimfarchive.selectors import RefetchSelector, UpdateSelector
|
||||||
from fimfarchive.stories import Story
|
from fimfarchive.stories import Story
|
||||||
|
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ class TestUpdateSelector:
|
||||||
|
|
||||||
def test_filter_unchanged_for_unchanged(self, selector, story):
|
def test_filter_unchanged_for_unchanged(self, selector, story):
|
||||||
"""
|
"""
|
||||||
Tests `filter_unchanged` drops changed stories.
|
Tests `filter_unchanged` drops unchanged stories.
|
||||||
"""
|
"""
|
||||||
old = self.populate(story, 0)
|
old = self.populate(story, 0)
|
||||||
new = self.populate(story, 0)
|
new = self.populate(story, 0)
|
||||||
|
@ -288,3 +288,61 @@ class TestUpdateSelector:
|
||||||
selected = selector(None, None)
|
selected = selector(None, None)
|
||||||
|
|
||||||
assert selected is None
|
assert selected is None
|
||||||
|
|
||||||
|
|
||||||
|
class TestRefetchSelector(TestUpdateSelector):
|
||||||
|
"""
|
||||||
|
RefetchSelector tests.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def selector(self):
|
||||||
|
"""
|
||||||
|
Returns a new refetch selector.
|
||||||
|
"""
|
||||||
|
return RefetchSelector()
|
||||||
|
|
||||||
|
def test_filter_unchanged_for_unchanged(self, selector, story):
|
||||||
|
"""
|
||||||
|
Tests `filter_unchanged` keeps unchanged stories.
|
||||||
|
"""
|
||||||
|
old = self.populate(story, 0)
|
||||||
|
new = self.populate(story, 0)
|
||||||
|
|
||||||
|
selected = selector.filter_unchanged(old, new)
|
||||||
|
|
||||||
|
assert selected is new
|
||||||
|
|
||||||
|
def test_filter_unchanged_missing_old_date(self, selector, story):
|
||||||
|
"""
|
||||||
|
Tests `filter_unchanged` keeps stories when missing old date.
|
||||||
|
"""
|
||||||
|
old = self.populate(story, None)
|
||||||
|
new = self.populate(story, 1)
|
||||||
|
|
||||||
|
selected = selector.filter_unchanged(old, new)
|
||||||
|
|
||||||
|
assert selected is new
|
||||||
|
|
||||||
|
def test_filter_unchanged_missing_new_date(self, selector, story):
|
||||||
|
"""
|
||||||
|
Tests `filter_unchanged` keeps stories when missing new date.
|
||||||
|
"""
|
||||||
|
old = self.populate(story, 1)
|
||||||
|
new = self.populate(story, None)
|
||||||
|
|
||||||
|
selected = selector.filter_unchanged(old, new)
|
||||||
|
|
||||||
|
assert selected is new
|
||||||
|
|
||||||
|
def test_revived_selection(self, selector, story):
|
||||||
|
"""
|
||||||
|
Tests behavior for stories that have not updated.
|
||||||
|
"""
|
||||||
|
old = self.populate(story, 1)
|
||||||
|
new = self.populate(story, 1)
|
||||||
|
|
||||||
|
selected = selector(old, new)
|
||||||
|
|
||||||
|
assert selected is new
|
||||||
|
assert UpdateStatus.UPDATED in new.flavors
|
||||||
|
|
Loading…
Reference in a new issue