atk4\data\tests\FieldTest::testPersist PHP Method

testPersist() public method

public testPersist ( )
    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']);
    }