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