Skip to content

Commit

Permalink
magic-removal: Refs #1346 -- Added unit tests for expected behaviour …
Browse files Browse the repository at this point in the history
…of self referential m2m fields.

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2380 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
freakboy3742 committed Feb 24, 2006
1 parent 891c3c9 commit 64cb7da
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
Empty file.
92 changes: 92 additions & 0 deletions tests/modeltests/m2m_recursive/models.py
Original file line number Diff line number Diff line change
@@ -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]
"""

0 comments on commit 64cb7da

Please sign in to comment.