From ef59c1957cc05cc988da1cd8c7f522a932b50d5a Mon Sep 17 00:00:00 2001
From: zYne <zYne@625475ce-881a-0410-a577-b389adb331d8>
Date: Fri, 20 Jul 2007 20:03:54 +0000
Subject: [PATCH]

---
 tests/Relation/ManyToMany2TestCase.php | 106 +++++++++++++++++++++++++
 1 file changed, 106 insertions(+)
 create mode 100644 tests/Relation/ManyToMany2TestCase.php

diff --git a/tests/Relation/ManyToMany2TestCase.php b/tests/Relation/ManyToMany2TestCase.php
new file mode 100644
index 000000000..85a88c80c
--- /dev/null
+++ b/tests/Relation/ManyToMany2TestCase.php
@@ -0,0 +1,106 @@
+<?php
+class Doctrine_Relation_ManyToMany2_TestCase extends Doctrine_UnitTestCase {
+	public function prepareData() {
+	}
+	
+    public function prepareTables() {
+    	$this->tables = array('TestUser', 'TestMovie', 'TestMovieUserBookmark', 'TestMovieUserVote');
+        parent::prepareTables();
+    }
+    
+    public function testManyToManyCreateSelectAndUpdate() {
+    	$user = new TestUser();
+        $user['name'] = 'tester';
+        $user->save();
+    	
+    	$data = new TestMovie();
+    	$data['name'] = 'movie';
+    	$data['User'] =  $user;
+    	$data['MovieBookmarks'][0] = $user;
+    	$data['MovieVotes'][0] = $user;
+    	$data->save(); //All ok here
+        
+        $this->conn->clear();
+
+    	$q = new Doctrine_Query();
+    	$newdata = $q->select('m.*')
+    	 			 ->from('TestMovie m')
+	 				 ->execute()
+	 				 ->getFirst();	 
+    	$newdata['name'] = 'movie2';	
+    	try {
+			$newdata->save(); //big failure here
+			$this->pass();
+        } catch(Doctrine_Exception $e) {
+                                       	print $e;
+            $this->fail();
+        }
+        
+    }
+}
+
+class TestUser extends Doctrine_Record 
+{
+    public function setUp() 
+    {
+        $this->hasMany('TestMovie as UserBookmarks', 
+                        array('local' => 'user_id',
+                              'foreign' => 'movie_id',
+                              'refClass' => 'TestMovieUserBookmark'));
+
+        $this->hasMany('TestMovie as UserVotes', 
+                        array('local' => 'user_id',
+                              'foreign' => 'movie_id',
+                              'refClass' => 'TestMovieUserVote'));
+
+    }
+    public function setTableDefinition() 
+    {
+        $this->hasColumn('name', 'string', 30);
+    }
+}
+
+class TestMovie extends Doctrine_Record
+{
+
+    public function setUp() 
+    {
+    	$this->hasOne('TestUser as User', 
+                        array('local' => 'user_id', 
+                              'foreign' => 'id'));
+
+        $this->hasMany('TestUser as MovieBookmarks', 
+                        array('local' => 'movie_id',
+                              'foreign' => 'user_id',
+                              'refClass' => 'TestMovieUserBookmark'));
+
+        $this->hasMany('TestUser as MovieVotes', 
+                        array('local' => 'movie_id',
+                              'foreign' => 'user_id',
+                              'refClass' => 'TestMovieUserVote'));
+    }
+
+    public function setTableDefinition() 
+    {
+    	$this->hasColumn('user_id', 'integer', null);
+        $this->hasColumn('name', 'string', 30);
+    }
+}
+
+class TestMovieUserBookmark extends Doctrine_Record 
+{
+    public function setTableDefinition() 
+    {
+        $this->hasColumn('user_id', 'integer', null, array('primary' => true));
+        $this->hasColumn('movie_id', 'integer', null, array('primary' => true));
+    }
+}
+
+class TestMovieUserVote extends Doctrine_Record  
+{    
+    public function setTableDefinition() {
+        $this->hasColumn('vote', 'string', 30);
+        $this->hasColumn('user_id', 'integer', null, array('primary' => true));
+        $this->hasColumn('movie_id', 'integer', null, array('primary' => true));
+    }
+}