From 0c6e567ec77681178e461c2994db16fa81aea4a8 Mon Sep 17 00:00:00 2001 From: Jamie Lennox Date: Fri, 2 Sep 2016 10:18:39 +0800 Subject: [PATCH] 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 --- .../notes/Add-called_once-property-a69546448cbd5542.yaml | 6 ++++++ requests_mock/adapter.py | 4 ++++ requests_mock/tests/test_adapter.py | 7 +++++++ requests_mock/tests/test_mocker.py | 9 +++++++++ 4 files changed, 26 insertions(+) create mode 100644 releasenotes/notes/Add-called_once-property-a69546448cbd5542.yaml diff --git a/releasenotes/notes/Add-called_once-property-a69546448cbd5542.yaml b/releasenotes/notes/Add-called_once-property-a69546448cbd5542.yaml new file mode 100644 index 0000000..7b7fef5 --- /dev/null +++ b/releasenotes/notes/Add-called_once-property-a69546448cbd5542.yaml @@ -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. diff --git a/requests_mock/adapter.py b/requests_mock/adapter.py index d732a0a..b4aad5f 100644 --- a/requests_mock/adapter.py +++ b/requests_mock/adapter.py @@ -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) diff --git a/requests_mock/tests/test_adapter.py b/requests_mock/tests/test_adapter.py index b22fda0..dc82d66 100644 --- a/requests_mock/tests/test_adapter.py +++ b/requests_mock/tests/test_adapter.py @@ -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) diff --git a/requests_mock/tests/test_mocker.py b/requests_mock/tests/test_mocker.py index 7e32813..7eaad6e 100644 --- a/requests_mock/tests/test_mocker.py +++ b/requests_mock/tests/test_mocker.py @@ -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):