public function testCollectionField() { $classMetadata = $this->dm->getClassMetadata('Documents\\Article'); $persister = new BasicDocumentPersister($this->dm, $classMetadata); $this->dm->getUnitOfWork()->setDocumentPersister('Documents\\Article', $persister); $article = new Article(); $article->setTitle('test'); $article->setBody('test'); $article->setCreatedAt('1985-09-04 00:00:00'); $article->addTag('tag 1'); $article->addTag('tag 2'); $article->addTag('tag 3'); $article->addTag('tag 4'); $this->dm->persist($article); $this->dm->getUnitOfWork()->computeChangeSets(); $update = $persister->prepareUpdateData($article); $this->assertTrue(array_key_exists('$pushAll', $update)); $this->assertTrue(array_key_exists('tags', $update['$pushAll'])); $this->assertEquals(4, count($update['$pushAll']['tags'])); $this->assertFalse(array_key_exists('$pullAll', $update)); $this->dm->flush(); $this->dm->clear(); unset($article); $article = $this->dm->findOne('Documents\\Article'); $this->assertEquals(array('tag 1', 'tag 2', 'tag 3', 'tag 4'), $article->getTags()); $article->removeTag('tag 1'); $article->removeTag('tag 3'); $article->addTag('tag 5'); $this->dm->getUnitOfWork()->computeChangeSets(); $update = $persister->prepareUpdateData($article); $this->assertTrue(array_key_exists('$pushAll', $update)); $this->assertTrue(array_key_exists('tags', $update['$pushAll'])); $this->assertEquals(1, count($update['$pushAll']['tags'])); $this->assertTrue(array_key_exists('$pullAll', $update)); $this->assertTrue(array_key_exists('tags', $update['$pullAll'])); $this->assertEquals(2, count($update['$pullAll']['tags'])); $this->dm->flush(); $this->dm->clear(); unset($article); $article = $this->dm->findOne('Documents\\Article'); $this->assertEquals(array('tag 2', 'tag 4', 'tag 5'), $article->getTags()); }