lithium\tests\cases\data\source\MongoDbTest::testAtomicUpdate PHP Method

testAtomicUpdate() public method

public testAtomicUpdate ( )
    public function testAtomicUpdate()
    {
        MockMongoPost::config(array('meta' => array('source' => 'posts')));
        $data = array('initial' => 'one', 'values' => 'two');
        $this->_db->connection = new MockMongoConnection();
        $this->_db->connection->results = array(true, true);
        $document = MockMongoPost::create($data);
        $this->assertTrue($document->save());
        $result = array_shift($this->_db->connection->queries);
        $expected = array('type' => 'insert', 'collection' => 'posts', 'data' => array('initial' => 'one', 'values' => 'two', '_id' => $document->_id), 'options' => array('validate' => true, 'events' => 'create', 'whitelist' => null, 'callbacks' => true, 'locked' => false, 'w' => 1, 'wTimeoutMS' => 10000, 'fsync' => false));
        $this->assertEqual($expected, $result);
        $duplicate = MockMongoPost::create(array('_id' => $document->_id), array('exists' => true));
        $duplicate->values = 'new';
        $this->assertTrue($duplicate->save());
        $result = array_shift($this->_db->connection->queries);
        $expected = array('type' => 'update', 'collection' => 'posts', 'conditions' => array('_id' => $document->_id), 'update' => array('$set' => array('values' => 'new')), 'options' => array('validate' => true, 'events' => 'update', 'whitelist' => null, 'callbacks' => true, 'locked' => false, 'upsert' => false, 'multiple' => true, 'w' => 1, 'wTimeoutMS' => 10000, 'fsync' => false));
        $this->assertEqual($expected, $result);
        array_push($this->_db->connection->results, new MockResultResource(array('data' => array(array('_id' => $duplicate->_id, 'initial' => 'one', 'values' => 'new')))));
        $document = MockMongoPost::find($duplicate->_id);
        $expected = array('_id' => (string) $duplicate->_id, 'initial' => 'one', 'values' => 'new');
        $this->assertEqual($expected, $document->data());
        $result = array_shift($this->_db->connection->queries);
        $expected = array('type' => 'find', 'collection' => 'posts', 'fields' => array(), 'conditions' => array('_id' => $duplicate->_id));
        $this->assertEqual($expected, $result);
    }