summaryrefslogtreecommitdiff
path: root/tests/m2m_through
diff options
context:
space:
mode:
authorBaptiste Mispelon <bmispelon@gmail.com>2019-11-29 17:54:03 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-12-03 19:47:38 +0100
commit26cab4e8c113b873b99b747128a064ba72d40c74 (patch)
tree6188b4fc81f4cddde3f68562a50342ef367f632c /tests/m2m_through
parentc50839fccf8b3235624b70b2c263157e570dbc2a (diff)
Fixed #31046 -- Allowed RelatedManager.add()/create()/set() to accept callable values in through_defaults.
Diffstat (limited to 'tests/m2m_through')
-rw-r--r--tests/m2m_through/tests.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/m2m_through/tests.py b/tests/m2m_through/tests.py
index deb9015ba6..dd40e9760c 100644
--- a/tests/m2m_through/tests.py
+++ b/tests/m2m_through/tests.py
@@ -62,6 +62,40 @@ class M2mThroughTests(TestCase):
self.assertSequenceEqual(self.rock.members.all(), [self.bob])
self.assertEqual(self.rock.membership_set.get().invite_reason, 'He is good.')
+ def test_add_on_m2m_with_intermediate_model_callable_through_default(self):
+ def invite_reason_callable():
+ return 'They were good at %s' % datetime.now()
+
+ self.rock.members.add(
+ self.bob, self.jane,
+ through_defaults={'invite_reason': invite_reason_callable},
+ )
+ self.assertSequenceEqual(self.rock.members.all(), [self.bob, self.jane])
+ self.assertEqual(
+ self.rock.membership_set.filter(
+ invite_reason__startswith='They were good at ',
+ ).count(),
+ 2,
+ )
+ # invite_reason_callable() is called once.
+ self.assertEqual(
+ self.bob.membership_set.get().invite_reason,
+ self.jane.membership_set.get().invite_reason,
+ )
+
+ def test_set_on_m2m_with_intermediate_model_callable_through_default(self):
+ self.rock.members.set(
+ [self.bob, self.jane],
+ through_defaults={'invite_reason': lambda: 'Why not?'},
+ )
+ self.assertSequenceEqual(self.rock.members.all(), [self.bob, self.jane])
+ self.assertEqual(
+ self.rock.membership_set.filter(
+ invite_reason__startswith='Why not?',
+ ).count(),
+ 2,
+ )
+
def test_add_on_m2m_with_intermediate_model_value_required(self):
self.rock.nodefaultsnonulls.add(self.jim, through_defaults={'nodefaultnonull': 1})
self.assertEqual(self.rock.testnodefaultsornulls_set.get().nodefaultnonull, 1)
@@ -75,6 +109,17 @@ class M2mThroughTests(TestCase):
self.assertSequenceEqual(self.rock.members.all(), [annie])
self.assertEqual(self.rock.membership_set.get().invite_reason, 'She was just awesome.')
+ def test_create_on_m2m_with_intermediate_model_callable_through_default(self):
+ annie = self.rock.members.create(
+ name='Annie',
+ through_defaults={'invite_reason': lambda: 'She was just awesome.'},
+ )
+ self.assertSequenceEqual(self.rock.members.all(), [annie])
+ self.assertEqual(
+ self.rock.membership_set.get().invite_reason,
+ 'She was just awesome.',
+ )
+
def test_create_on_m2m_with_intermediate_model_value_required(self):
self.rock.nodefaultsnonulls.create(name='Test', through_defaults={'nodefaultnonull': 1})
self.assertEqual(self.rock.testnodefaultsornulls_set.get().nodefaultnonull, 1)