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()); }
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()); }