From 64cb7da1508086781c51c85488e8e6fff9bb72a0 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Fri, 24 Feb 2006 10:15:27 +0000 Subject: [PATCH] magic-removal: Refs #1346 -- Added unit tests for expected behaviour of self referential m2m fields. git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2380 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/modeltests/m2m_recursive/__init__.py | 0 tests/modeltests/m2m_recursive/models.py | 92 ++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 tests/modeltests/m2m_recursive/__init__.py create mode 100644 tests/modeltests/m2m_recursive/models.py diff --git a/tests/modeltests/m2m_recursive/__init__.py b/tests/modeltests/m2m_recursive/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/modeltests/m2m_recursive/models.py b/tests/modeltests/m2m_recursive/models.py new file mode 100644 index 0000000000..d6fc2d05c1 --- /dev/null +++ b/tests/modeltests/m2m_recursive/models.py @@ -0,0 +1,92 @@ +""" +26. Many-to-many relationships between the same two tables + +In this example, A Person can have many friends, who are also people. Friendship is a +symmetrical relationshiup - if I am your friend, you are my friend. + +This test validates that the m2m table will create a mangled name for the m2m table if +there will be a clash, and tests that symmetry is preserved where appropriate. +""" + +from django.db import models + +class Person(models.Model): + name = models.CharField(maxlength=20) + friends = models.ManyToManyField('self') + + def __repr__(self): + return self.name + +API_TESTS = """ +>>> a = Person(name='Anne') +>>> a.save() +>>> b = Person(name='Bill') +>>> b.save() +>>> c = Person(name='Chuck') +>>> c.save() +>>> d = Person(name='David') +>>> d.save() + +# Add some friends in the direction of field definition +# Anne is friends with Bill and Chuck +>>> a.friends.add(b,c) + +# David is friends with Anne and Chuck - add in reverse direction +>>> d.friends.add(a,c) + +# Who is friends with Anne? +>>> a.friends.all() +[Bill, Chuck, David] + +# Who is friends with Bill? +>>> b.friends.all() +[Anne] + +# Who is friends with Chuck? +>>> c.friends.all() +[Anne, David] + +# Who is friends with David? +>>> d.friends.all() +[Anne, Chuck] + +# Bill is already friends with Anne - add Anne again, but in the reverse direction +>>> b.friends.add(a) + +# Who is friends with Anne? +>>> a.friends.all() +[Bill, Chuck, David] + +# Who is friends with Bill? +>>> b.friends.all() +[Anne] + +# Remove Anne from Bill's friends +>>> b.friends.remove(a) + +# Who is friends with Anne? +>>> a.friends.all() +[Chuck, David] + +# Who is friends with Bill? +>>> b.friends.all() +[] + +# Clear Anne's group of friends +>>> a.friends.clear() + +# Who is friends with Anne? +>>> a.friends.all() +[] + +# Reverse relationships should also be gone +# Who is friends with Chuck? +>>> c.friends.all() +[David] + +# Who is friends with David? +>>> d.friends.all() +[Chuck] + + +"""