Add a called_once property to adapter

Mock has a useful feature called assert_called_once. We don't have the
asserts here, but having called_once as a property is an easy way to
emulate this.

Change-Id: I59dfb53830195e73884fa0ca8a43b1de91fa1425
This commit is contained in:
Jamie Lennox 2016-09-02 10:18:39 +08:00
parent e42b9828dc
commit 0c6e567ec7
4 changed files with 26 additions and 0 deletions

View File

@ -0,0 +1,6 @@
---
prelude: >
Add a called_once property to the mockers.
features:
- A called_once property was added to the adapter and the mocker. This gives
us an easy way to emulate mock's assert_called_once.

View File

@ -146,6 +146,10 @@ class _RequestHistoryTracker(object):
def called(self):
return self.call_count > 0
@property
def called_once(self):
return self.call_count == 1
@property
def call_count(self):
return len(self.request_history)

View File

@ -334,9 +334,11 @@ class SessionAdapterTests(base.TestCase):
m = self.adapter.register_uri('GET', self.url, text='resp')
self.assertEqual(0, m.call_count)
self.assertFalse(m.called)
self.assertFalse(m.called_once)
self.assertEqual(0, self.adapter.call_count)
self.assertFalse(self.adapter.called)
self.assertFalse(m.called_once)
def test_called_and_called_count(self):
m = self.adapter.register_uri('GET', self.url, text='resp')
@ -349,9 +351,11 @@ class SessionAdapterTests(base.TestCase):
self.assertEqual(len(resps), m.call_count)
self.assertTrue(m.called)
self.assertFalse(m.called_once)
self.assertEqual(len(resps), self.adapter.call_count)
self.assertTrue(self.adapter.called)
self.assertFalse(m.called_once)
def test_adapter_picks_correct_adatper(self):
good = '%s://test3.url/' % self.PREFIX
@ -436,6 +440,7 @@ class SessionAdapterTests(base.TestCase):
resp = self.session.post(self.url, data=data)
self.assertEqual(1, m.call_count)
self.assertTrue(m.called_once)
self.assertEqual(dict_resp, resp.json())
def test_raises_exception(self):
@ -445,6 +450,7 @@ class SessionAdapterTests(base.TestCase):
self.session.get,
self.url)
self.assertTrue(self.adapter.called_once)
self.assertEqual(self.url, self.adapter.last_request.url)
def test_raises_exception_with_body_args_fails(self):
@ -472,6 +478,7 @@ class SessionAdapterTests(base.TestCase):
self.assertEqual(text2, resp2.text)
self.assertEqual(2, self.adapter.call_count)
self.assertFalse(self.adapter.called_once)
self.assertEqual(url1, self.adapter.request_history[0].url)
self.assertEqual(url2, self.adapter.request_history[1].url)

View File

@ -174,6 +174,7 @@ class MockerTests(base.TestCase):
self.assertEqual(1, m.call_count)
self.assertTrue(matcher.called)
self.assertTrue(matcher.called_once)
self.assertTrue(m.called)
self.assertEqual(m.request_history, matcher.request_history)
@ -202,48 +203,56 @@ class MockerHttpMethodsTests(base.TestCase):
resp = requests.request(method, self.URL)
self.assertResponse(resp)
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_get(self, m):
mock_obj = m.get(self.URL, text=self.TEXT)
self.assertResponse(requests.get(self.URL))
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_options(self, m):
mock_obj = m.options(self.URL, text=self.TEXT)
self.assertResponse(requests.options(self.URL))
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_head(self, m):
mock_obj = m.head(self.URL, text=self.TEXT)
self.assertResponse(requests.head(self.URL))
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_post(self, m):
mock_obj = m.post(self.URL, text=self.TEXT)
self.assertResponse(requests.post(self.URL))
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_put(self, m):
mock_obj = m.put(self.URL, text=self.TEXT)
self.assertResponse(requests.put(self.URL))
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_patch(self, m):
mock_obj = m.patch(self.URL, text=self.TEXT)
self.assertResponse(requests.patch(self.URL))
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_delete(self, m):
mock_obj = m.delete(self.URL, text=self.TEXT)
self.assertResponse(requests.delete(self.URL))
self.assertTrue(mock_obj.called)
self.assertTrue(mock_obj.called_once)
@requests_mock.Mocker()
def test_mocker_real_http_and_responses(self, m):