public function testPersist()
{
$db = new Persistence_SQL($this->db->connection);
$a = ['item' => [1 => ['id' => 1, 'name' => 'John', 'surname' => 'Smith']]];
$this->setDB($a);
$m = new Model($db, 'item');
$m->addField('name', ['never_persist' => true]);
$m->addField('surname', ['never_save' => true]);
$m->load(1);
$this->assertNull($m['name']);
$this->assertEquals('Smith', $m['surname']);
$m['name'] = 'Bill';
$m['surname'] = 'Stalker';
$m->save();
$this->assertEquals($a, $this->getDB());
$m->reload();
$this->assertEquals('Smith', $m['surname']);
$m->getElement('surname')->never_save = false;
$m['surname'] = 'Stalker';
$m->save();
$a['item'][1]['surname'] = 'Stalker';
$this->assertEquals($a, $this->getDB());
$m->addHook('beforeSave', function ($m) {
if ($m->isDirty('name')) {
$m['surname'] = $m['name'];
unset($m['name']);
} elseif ($m->isDirty('surname')) {
$m['name'] = $m['surname'];
unset($m['surname']);
}
});
$m['name'] = 'X';
$m->save();
$a['item'][1]['surname'] = 'X';
$this->assertEquals($a, $this->getDB());
$this->assertNull($m['name']);
$this->assertEquals('X', $m['surname']);
$m['surname'] = 'Y';
$m->save();
$this->assertEquals($a, $this->getDB());
$this->assertEquals('Y', $m['name']);
$this->assertEquals('X', $m['surname']);
}