public function testUpdate()
{
$model = $this->_model;
$data = array('title' => 'Test Post');
$this->_query->model($model);
$this->_query->data($data);
$this->_db->connection->results = array(true);
$this->_db->create($this->_query);
$result = array_pop($this->_db->connection->queries);
$data['_id'] = $result['data']['_id'];
$expected = compact('data') + array('collection' => 'posts', 'type' => 'insert', 'options' => array('w' => 1, 'wTimeoutMS' => 10000, 'fsync' => false));
$this->assertEqual($expected, $result);
$this->_db->connection->results = array(new MockResultResource(array('data' => array($data))), new MockResultResource(array('data' => array($data))));
$this->_db->connection->queries = array();
$result = $this->_db->read(new Query(compact('model')));
$original = $result->first()->to('array');
$this->assertEqual(array('title', '_id'), array_keys($original));
$this->assertEqual('Test Post', $original['title']);
$this->assertPattern('/^[0-9a-f]{24}$/', $original['_id']);
$this->_db->connection->results = array(true);
$this->_db->connection->queries = array();
$update = array('title' => 'New Post Title');
$this->_query = new Query(compact('model') + array('data' => $update, 'conditions' => array('_id' => $original['_id'])));
$this->assertTrue($this->_db->update($this->_query));
$result = array_pop($this->_db->connection->queries);
$expected = array('type' => 'update', 'collection' => 'posts', 'conditions' => array('_id' => '4f188fb17675ab167900010e'), 'update' => array('$set' => array('title' => 'New Post Title')), 'options' => array('upsert' => false, 'multiple' => true, 'w' => 1, 'wTimeoutMS' => 10000, 'fsync' => false));
array_push($this->_db->connection->results, new MockResultResource(array('data' => array($update + $original))));
$this->_db->connection->queries = array();
$result = $this->_db->read(new Query(compact('model') + array('conditions' => array('_id' => $original['_id']))));
$this->assertEqual(1, $result->count());
$updated = $result->first();
$updated = $updated ? $updated->to('array') : array();
$this->assertEqual($original['_id'], $updated['_id']);
$this->assertEqual('New Post Title', $updated['title']);
$expected = array('type' => 'find', 'collection' => 'posts', 'fields' => array(), 'conditions' => array('_id' => $original['_id']));
$this->assertEqual($expected, array_pop($this->_db->connection->queries));
}