]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39915: Ensure await_args_list is updated according to the order in which coroutin...
authorKarthikeyan Singaravelan <tir.karthi@gmail.com>
Wed, 11 Mar 2020 15:06:12 +0000 (20:36 +0530)
committerGitHub <noreply@github.com>
Wed, 11 Mar 2020 15:06:12 +0000 (15:06 +0000)
Create call objects with awaited arguments instead of using call_args which has only last call value.

Lib/unittest/mock.py
Lib/unittest/test/testmock/testasync.py
Misc/NEWS.d/next/Library/2020-03-10-19-38-47.bpo-39915.CjPeiY.rst [new file with mode: 0644]

index 9e692981a229bb52b7b21ecfc01dc70cc9e5f64e..20daf724c12183c29c40b06875b29afaba5d0228 100644 (file)
@@ -2171,7 +2171,7 @@ class AsyncMockMixin(Base):
         # This is nearly just like super(), except for special handling
         # of coroutines
 
-        _call = self.call_args
+        _call = _Call((args, kwargs), two=True)
         self.await_count += 1
         self.await_args = _call
         self.await_args_list.append(_call)
index bf936220ccaf2c9cdc4041b7a2cb7769a3e4b2cd..690ca4f55f9e3b59774693840b31d041a7b934c3 100644 (file)
@@ -500,6 +500,17 @@ class AsyncArguments(IsolatedAsyncioTestCase):
         mock.assert_awaited()
         self.assertTrue(ran)
 
+    async def test_await_args_list_order(self):
+        async_mock = AsyncMock()
+        mock2 = async_mock(2)
+        mock1 = async_mock(1)
+        await mock1
+        await mock2
+        async_mock.assert_has_awaits([call(1), call(2)])
+        self.assertEqual(async_mock.await_args_list, [call(1), call(2)])
+        self.assertEqual(async_mock.call_args_list, [call(2), call(1)])
+
+
 class AsyncMagicMethods(unittest.TestCase):
     def test_async_magic_methods_return_async_mocks(self):
         m_mock = MagicMock()
diff --git a/Misc/NEWS.d/next/Library/2020-03-10-19-38-47.bpo-39915.CjPeiY.rst b/Misc/NEWS.d/next/Library/2020-03-10-19-38-47.bpo-39915.CjPeiY.rst
new file mode 100644 (file)
index 0000000..2c36947
--- /dev/null
@@ -0,0 +1,4 @@
+Ensure :attr:`unittest.mock.AsyncMock.await_args_list` has call objects in
+the order of awaited arguments instead of using
+:attr:`unittest.mock.Mock.call_args` which has the last value of the call.
+Patch by Karthikeyan Singaravelan.