Example #1
0
 public function testModelsBinder()
 {
     $database = new Database('mysql', 'localhost', 'test');
     $table1 = new Table($database, 'test1');
     $table1->create([new Column('id', 'INT', false, true, true), new Column('name', 'VARCHAR(255)')], true);
     $model1 = new Model($table1);
     $table2 = new Table($database, 'test2');
     $table2->create([new Column('id', 'INT', false, true, true), new Column('name', 'VARCHAR(255)')], true);
     $model2 = new Model($table2);
     $model1->execute(new Create(), [['name' => 'Test 1']]);
     $model2->execute(new Create(), [['name' => 'Test 2']]);
     $table3 = new Table($database, 'test3', ['test1_id', 'test2_id']);
     $table3->create([new Column('test1_id', 'INT', false, false, true), new Column('test2_id', 'INT', false, false, true), new Column('data', 'VARCHAR(255)')], true);
     $data = ['data' => 'Test 3'];
     $newData = ['data' => 'Test 4'];
     $modelBinder = new ModelBinder($table3, [$model1, $model2]);
     $this->assertTrue($modelBinder->execute(new Create(), [$data]));
     $this->assertTrue($modelBinder->exists());
     $this->assertEquals([$model1->getBindingFieldName() => $model1->getId(), $model2->getBindingFieldName() => $model2->getId()], $modelBinder->getId());
     $this->assertEquals($data, $modelBinder->getData());
     $modelBinder->execute(new Update(), [$newData]);
     $this->assertTrue($modelBinder->exists());
     $this->assertEquals(array_merge($data, $newData), $modelBinder->getData());
     $modelBinder->execute(new Delete());
     $this->assertFalse($modelBinder->exists());
     $this->assertEmpty($modelBinder->getData());
     $this->assertNull($modelBinder->getId());
     // Clean up tables
     $table1->drop();
     $table2->drop();
     $table3->drop();
 }