Skip to content

Commit

Permalink
Merge pull request #11 from cfe-lab/first-last
Browse files Browse the repository at this point in the history
Add first() and last() to MockSet.
  • Loading branch information
stphivos committed Jun 8, 2016
2 parents 97d7a33 + 8eb2767 commit d9fd6a4
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
11 changes: 11 additions & 0 deletions django_mock_queries/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,17 @@ def earliest(field):

mock_set.earliest = MagicMock(side_effect=earliest)

def first():
for item in items:
return item

mock_set.first = MagicMock(side_effect=first)

def last():
return items and items[-1] or None

mock_set.last = MagicMock(side_effect=last)

def __iter__():
return iter([project(i) for i, v in enumerate(items)])

Expand Down
30 changes: 30 additions & 0 deletions tests/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,36 @@ def test_query_latest_returns_the_last_element_from_ordered_set(self):

assert latest == item_3

def test_query_first_none(self):
first = self.mock_set.first()

assert first is None, first

def test_query_first(self):
item_1 = MockModel(foo=1)
item_2 = MockModel(foo=2)
item_3 = MockModel(foo=3)

self.mock_set.add(item_3, item_1, item_2)
first = self.mock_set.first()

assert first == item_3, first

def test_query_last_none(self):
last = self.mock_set.last()

assert last is None, last

def test_query_last(self):
item_1 = MockModel(foo=1)
item_2 = MockModel(foo=2)
item_3 = MockModel(foo=3)

self.mock_set.add(item_3, item_1, item_2)
last = self.mock_set.last()

assert last == item_2, last

def test_query_latest_raises_error_exist_when_empty_set(self):
self.mock_set.clear()
self.assertRaises(Exception, self.mock_set.latest, 'foo')
Expand Down

0 comments on commit d9fd6a4

Please sign in to comment.