public function testCollectionsAreUpdatedJustAfterOwningDocument()
 {
     $user = new VersionedUser();
     $user->setUsername('malarzm');
     $privateBook = new Phonebook('Private');
     $privateBook->addPhonenumber(new Phonenumber('12345678'));
     $user->addPhonebook($privateBook);
     $troll = new VersionedUser();
     $troll->setUsername('Troll');
     $this->dm->persist($user);
     $this->dm->persist($troll);
     $this->dm->flush();
     $privateBook->addPhonenumber(new Phonenumber('87654321'));
     $troll->setUsername('Trollsky');
     $troll->setVersion(3);
     try {
         $this->dm->flush();
     } catch (\Doctrine\ODM\MongoDB\LockException $ex) {
     }
     $this->dm->clear();
     $user = $this->dm->find(get_class($user), $user->getId());
     $phonenumbers = $user->getPhonebooks()->first()->getPhonenumbers();
     $this->assertCount(2, $phonenumbers);
     $this->assertEquals('12345678', $phonenumbers[0]->getPhonenumber());
     $this->assertEquals('87654321', $phonenumbers[1]->getPhonenumber());
 }
 /**
  * @dataProvider provideStrategy
  */
 public function testStrategy($field)
 {
     $doc = new DocWithNestedCollections();
     $privateBook = new Phonebook('Private');
     $privateBook->addPhonenumber(new Phonenumber('12345678'));
     $doc->{$field}[] = $privateBook;
     $this->dm->persist($doc);
     $this->dm->flush();
     $this->dm->clear();
     $doc = $this->dm->getRepository(get_class($doc))->find($doc->id);
     $this->assertCount(1, $doc->{$field});
     $privateBook = $doc->{$field}[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(1, $privateBook->getPhonenumbers());
     $this->assertEquals('12345678', $privateBook->getPhonenumbers()->get(0)->getPhonenumber());
     $privateBook->addPhonenumber(new Phonenumber('87654321'));
     $publicBook = new Phonebook('Public');
     $publicBook->addPhonenumber(new Phonenumber('10203040'));
     $doc->{$field}[] = $publicBook;
     $this->dm->flush();
     $this->dm->clear();
     $doc = $this->dm->getRepository(get_class($doc))->find($doc->id);
     $this->assertCount(2, $doc->{$field});
     $privateBook = $doc->{$field}[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(2, $privateBook->getPhonenumbers());
     $this->assertEquals('12345678', $privateBook->getPhonenumbers()->get(0)->getPhonenumber());
     $this->assertEquals('87654321', $privateBook->getPhonenumbers()->get(1)->getPhonenumber());
     $publicBook = $doc->{$field}[1];
     $this->assertCount(1, $publicBook->getPhonenumbers());
     $this->assertEquals('10203040', $publicBook->getPhonenumbers()->get(0)->getPhonenumber());
     $privateBook->getPhonenumbers()->clear();
     $this->dm->flush();
     $this->dm->clear();
     $doc = $this->dm->getRepository(get_class($doc))->find($doc->id);
     $this->assertCount(2, $doc->{$field});
     $privateBook = $doc->{$field}[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(0, $privateBook->getPhonenumbers());
     $publicBook = $doc->{$field}[1];
     $this->assertCount(1, $publicBook->getPhonenumbers());
     $this->assertEquals('10203040', $publicBook->getPhonenumbers()->get(0)->getPhonenumber());
 }
Beispiel #3
0
 public function testAtomicCollectionWithAnotherNested()
 {
     $user = new AtomicSetUser('Maciej');
     $privateBook = new Phonebook('Private');
     $privateBook->addPhonenumber(new Phonenumber('12345678'));
     $user->phonebooks[] = $privateBook;
     $this->dm->persist($user);
     $this->dm->flush();
     $this->assertCount(1, $this->ql, 'Inserting a document with a nested embed-many collection requires one query');
     $this->dm->clear();
     $user = $this->dm->getRepository(get_class($user))->find($user->id);
     $this->assertEquals('Maciej', $user->name);
     $this->assertCount(1, $user->phonebooks);
     $privateBook = $user->phonebooks[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(1, $privateBook->getPhonenumbers());
     $this->assertEquals('12345678', $privateBook->getPhonenumbers()->get(0)->getPhonenumber());
     $privateBook->addPhonenumber(new Phonenumber('87654321'));
     $publicBook = new Phonebook('Public');
     $publicBook->addPhonenumber(new Phonenumber('10203040'));
     $user->phonebooks[] = $publicBook;
     $this->ql->clear();
     $this->dm->flush();
     $this->assertCount(1, $this->ql, 'Updating multiple, nested embed-many collections requires one query');
     $this->dm->clear();
     $user = $this->dm->getRepository(get_class($user))->find($user->id);
     $this->assertEquals('Maciej', $user->name);
     $this->assertCount(2, $user->phonebooks);
     $privateBook = $user->phonebooks[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(2, $privateBook->getPhonenumbers());
     $this->assertEquals('12345678', $privateBook->getPhonenumbers()->get(0)->getPhonenumber());
     $this->assertEquals('87654321', $privateBook->getPhonenumbers()->get(1)->getPhonenumber());
     $publicBook = $user->phonebooks[1];
     $this->assertCount(1, $publicBook->getPhonenumbers());
     $this->assertEquals('10203040', $publicBook->getPhonenumbers()->get(0)->getPhonenumber());
     $privateBook->getPhonenumbers()->clear();
     $this->ql->clear();
     $this->dm->flush();
     $this->assertCount(1, $this->ql, 'Clearing a nested embed-many collection requires one query');
     $this->dm->clear();
     $user = $this->dm->getRepository(get_class($user))->find($user->id);
     $this->assertCount(2, $user->phonebooks);
     $privateBook = $user->phonebooks[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(0, $privateBook->getPhonenumbers());
     $publicBook = $user->phonebooks[1];
     $this->assertCount(1, $publicBook->getPhonenumbers());
     $this->assertEquals('10203040', $publicBook->getPhonenumbers()->get(0)->getPhonenumber());
 }
 public function testAtomicCollectionWithAnotherNested()
 {
     $user = new AtomicUser('Maciej');
     $privateBook = new Phonebook('Private');
     $privateBook->addPhonenumber(new Phonenumber('12345678'));
     $user->phonebooks[] = $privateBook;
     $this->dm->persist($user);
     $this->dm->flush();
     $this->dm->clear();
     $user = $this->dm->getRepository(get_class($user))->find($user->id);
     $this->assertEquals('Maciej', $user->name);
     $this->assertCount(1, $user->phonebooks);
     $privateBook = $user->phonebooks[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(1, $privateBook->getPhonenumbers());
     $this->assertEquals('12345678', $privateBook->getPhonenumbers()->get(0)->getPhonenumber());
     $privateBook->addPhonenumber(new Phonenumber('87654321'));
     $publicBook = new Phonebook('Public');
     $publicBook->addPhonenumber(new Phonenumber('10203040'));
     $user->phonebooks[] = $publicBook;
     $this->dm->flush();
     $this->dm->clear();
     $user = $this->dm->getRepository(get_class($user))->find($user->id);
     $this->assertEquals('Maciej', $user->name);
     $this->assertCount(2, $user->phonebooks);
     $privateBook = $user->phonebooks[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(2, $privateBook->getPhonenumbers());
     $this->assertEquals('12345678', $privateBook->getPhonenumbers()->get(0)->getPhonenumber());
     $this->assertEquals('87654321', $privateBook->getPhonenumbers()->get(1)->getPhonenumber());
     $publicBook = $user->phonebooks[1];
     $this->assertCount(1, $publicBook->getPhonenumbers());
     $this->assertEquals('10203040', $publicBook->getPhonenumbers()->get(0)->getPhonenumber());
     $privateBook->getPhonenumbers()->clear();
     $this->dm->flush();
     $this->dm->clear();
     $user = $this->dm->getRepository(get_class($user))->find($user->id);
     $this->assertCount(2, $user->phonebooks);
     $privateBook = $user->phonebooks[0];
     $this->assertEquals('Private', $privateBook->getTitle());
     $this->assertCount(0, $privateBook->getPhonenumbers());
     $publicBook = $user->phonebooks[1];
     $this->assertCount(1, $publicBook->getPhonenumbers());
     $this->assertEquals('10203040', $publicBook->getPhonenumbers()->get(0)->getPhonenumber());
 }