atk4\data\tests\BusinessModelTest::testDirty PHP Method

testDirty() public method

public testDirty ( )
    public function testDirty()
    {
        $m = new Model();
        $m->addField('name');
        $m->data = ['name' => 5];
        $m['name'] = 5;
        $this->assertEquals([], $m->dirty);
        $m['name'] = 10;
        $this->assertEquals(['name' => 5], $m->dirty);
        $m['name'] = 15;
        $this->assertEquals(['name' => 5], $m->dirty);
        $m['name'] = 5;
        $this->assertEquals([], $m->dirty);
        $m['name'] = '5';
        $this->assertSame(5, $m->dirty['name']);
        $m['name'] = '6';
        $this->assertSame(5, $m->dirty['name']);
        $m['name'] = '5';
        $this->assertSame(5, $m->dirty['name']);
        $m['name'] = '5.0';
        $this->assertSame(5, $m->dirty['name']);
        $m->dirty = [];
        $m->data = ['name' => ''];
        $m['name'] = '';
        $this->assertEquals([], $m->dirty);
        $m->data = ['name' => '5'];
        $m['name'] = 5;
        $this->assertSame('5', $m->dirty['name']);
        $m['name'] = 6;
        $this->assertSame('5', $m->dirty['name']);
        $m['name'] = 5;
        $this->assertSame('5', $m->dirty['name']);
        $m['name'] = '5';
        $this->assertEquals([], $m->dirty);
        $m->data = ['name' => 4.28];
        $m['name'] = '4.28';
        $this->assertSame(4.28, $m->dirty['name']);
        $m['name'] = '5.28';
        $this->assertSame(4.28, $m->dirty['name']);
        $m['name'] = 4.28;
        $this->assertEquals([], $m->dirty);
        // now with defaults
        $m = new Model();
        $f = $m->addField('name', ['default' => 'John']);
        $this->assertEquals('John', $f->default);
        $this->assertEquals('John', $m->get('name'));
        $m['name'] = null;
        $this->assertEquals(['name' => 'John'], $m->dirty);
        $this->assertEquals(['name' => null], $m->data);
        $this->assertEquals(null, $m['name']);
        unset($m['name']);
        $this->assertEquals('John', $m->get('name'));
    }