Index: elixir/trunk/tests/test_m2m.py
===================================================================
--- elixir/trunk/tests/test_m2m.py (revision 233)
+++ elixir/trunk/tests/test_m2m.py (revision 234)
@@ -1,4 +1,4 @@
 """
-    simple test case
+test many to many relationships
 """
 
@@ -7,5 +7,5 @@
 #-----------
 
-class TestMultipleRelationships(object):
+class TestManyToMany(object):
     def setup(self):
         metadata.bind = 'sqlite:///'
@@ -14,6 +14,27 @@
         cleanup_all(True)
     
+    def test_simple(self):
+        class A(Entity):
+            name = Field(Unicode(60))
+            bs_ = ManyToMany('B')
 
-    def test_has_and_belongs_to_many_multi_ref(self):
+        class B(Entity):
+            name = Field(Unicode(60))
+            as_ = ManyToMany('A')
+
+        setup_all(True)
+
+        b1 = B(name='b1', as_=[A(name='a1')])
+
+        session.flush()
+        session.clear()
+
+        a = A.query.one()
+        b = B.query.one()
+
+        assert a in b.as_
+        assert b in a.bs_
+
+    def test_multi(self):
         class A(Entity):
             name = Field(String(100))
@@ -42,2 +63,53 @@
         assert b2 in a1.rel1
 
+    def test_selfref(self):
+        class Person(Entity):
+            name = Field(Unicode(30))
+            
+            friends = ManyToMany('Person')
+
+        create_all()
+
+        barney = Person(name="Barney")
+        homer = Person(name="Homer", friends=[barney])
+        barney.friends.append(homer)
+
+        session.flush()
+        session.clear()
+        
+        homer = Person.get_by(name="Homer")
+        barney = Person.get_by(name="Barney")
+
+        assert homer in barney.friends
+        assert barney in homer.friends
+
+    def test_has_and_belongs_to_many(self):
+        class A(Entity):
+            has_field('name', String(100))
+
+            has_and_belongs_to_many('bs', of_kind='B')
+            
+        class B(Entity):
+            has_field('name', String(100), primary_key=True)
+
+        setup_all(True)
+        
+        b1 = B(name='b1')
+        a1 = A(name='a1', bs=[B(name='b2'), b1])
+        a2 = A(name='a2', bs=[B(name='b3'), b1])
+        a3 = A(name='a3')
+
+        session.flush()
+        session.clear()
+        
+        a1 = A.get_by(name='a1')
+        a2 = A.get_by(name='a2')
+        a3 = A.get_by(name='a3')
+        b1 = B.get_by(name='b1')
+        b2 = B.get_by(name='b2')
+
+        assert b1 in a1.bs
+        assert b2 in a1.bs
+        assert b1 in a2.bs
+        assert not a3.bs
+
