diff options
| author | Baptiste Mispelon <bmispelon@gmail.com> | 2019-11-29 17:54:03 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-03 19:47:38 +0100 |
| commit | 26cab4e8c113b873b99b747128a064ba72d40c74 (patch) | |
| tree | 6188b4fc81f4cddde3f68562a50342ef367f632c /tests/m2m_through | |
| parent | c50839fccf8b3235624b70b2c263157e570dbc2a (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.py | 45 |
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) |
