diff --git a/tests/unit/data/mysql.sql b/tests/unit/data/mysql.sql index 2e9458e..9a31083 100644 --- a/tests/unit/data/mysql.sql +++ b/tests/unit/data/mysql.sql @@ -100,3 +100,35 @@ INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 4, INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0); INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0); INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0); + + +/** + * (MySQL-)Database Schema for ExistValidatorTest + */ + +DROP TABLE IF EXISTS tbl_validator_exist_main CASCADE; +DROP TABLE IF EXISTS tbl_validator_exist_ref CASCADE; + +CREATE TABLE `tbl_validator_exist_main` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `field1` VARCHAR(255), + PRIMARY KEY (`id`) +) ENGINE =InnoDB DEFAULT CHARSET =utf8; + +CREATE TABLE `tbl_validator_exist_ref` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `a_field` VARCHAR(255), + `ref` INT(11), + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (1, 'just a string1'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (2, 'just a string2'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (3, 'just a string3'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (4, 'just a string4'); +INSERT INTO tbl_validator_exist_ref (a_field, ref) VALUES ('ref_to_2', 2); +INSERT INTO tbl_validator_exist_ref (a_field, ref) VALUES ('ref_to_2', 2); +INSERT INTO tbl_validator_exist_ref (a_field, ref) VALUES ('ref_to_3', 3); +INSERT INTO tbl_validator_exist_ref (a_field, ref) VALUES ('ref_to_4', 4); +INSERT INTO tbl_validator_exist_ref (a_field, ref) VALUES ('ref_to_4', 4); +INSERT INTO tbl_validator_exist_ref (a_field, ref) VALUES ('ref_to_5', 5); diff --git a/tests/unit/data/postgres.sql b/tests/unit/data/postgres.sql index f8fb0eb..fc306da 100644 --- a/tests/unit/data/postgres.sql +++ b/tests/unit/data/postgres.sql @@ -92,3 +92,32 @@ INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 4, INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0); INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0); INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0); + +/** + * (Postgres-)Database Schema for ExistValidatorTest + */ + +DROP TABLE IF EXISTS tbl_validator_exist_main CASCADE; +DROP TABLE IF EXISTS tbl_validator_exist_ref CASCADE; + +CREATE TABLE tbl_validator_exist_main ( + id integer not null primary key, + field1 VARCHAR(255) +); + +CREATE TABLE tbl_validator_exist_ref ( + id integer not null primary key, + a_field VARCHAR(255), + ref integer +); + +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (1, 'just a string1'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (2, 'just a string2'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (3, 'just a string3'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (4, 'just a string4'); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (1, 'ref_to_2', 2); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (2, 'ref_to_2', 2); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (3, 'ref_to_3', 3); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (4, 'ref_to_4', 4); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (5, 'ref_to_4', 4); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (6, 'ref_to_5', 5); \ No newline at end of file diff --git a/tests/unit/data/sqlite.sql b/tests/unit/data/sqlite.sql index f75bfa6..c1111da 100644 --- a/tests/unit/data/sqlite.sql +++ b/tests/unit/data/sqlite.sql @@ -85,4 +85,35 @@ INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (1, 2, INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 4, 1, 10.0); INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 5, 1, 15.0); INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (2, 3, 1, 8.0); -INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0); \ No newline at end of file +INSERT INTO tbl_order_item (order_id, item_id, quantity, subtotal) VALUES (3, 2, 1, 40.0); + +/** + * (SqLite-)Database Schema for ExistValidatorTest + */ + +DROP TABLE IF EXISTS tbl_validator_exist_main; +DROP TABLE IF EXISTS tbl_validator_exist_ref; + +CREATE TABLE tbl_validator_exist_main ( + id INT(11) NOT NULL, + field1 VARCHAR(255), + PRIMARY KEY (id) +); + +CREATE TABLE tbl_validator_exist_ref ( + id INT(11) NOT NULL, + a_field VARCHAR(255), + ref INT(11), + PRIMARY KEY (id) +); + +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (1, 'just a string1'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (2, 'just a string2'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (3, 'just a string3'); +INSERT INTO tbl_validator_exist_main (id, field1) VALUES (4, 'just a string4'); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (1, 'ref_to_2', 2); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (2, 'ref_to_2', 2); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (3, 'ref_to_3', 3); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (4, 'ref_to_4', 4); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (5, 'ref_to_4', 4); +INSERT INTO tbl_validator_exist_ref (id, a_field, ref) VALUES (6, 'ref_to_5', 5); \ No newline at end of file diff --git a/tests/unit/data/validators/models/ExistValidatorMainModel.php b/tests/unit/data/validators/models/ExistValidatorMainModel.php new file mode 100644 index 0000000..5f3ff00 --- /dev/null +++ b/tests/unit/data/validators/models/ExistValidatorMainModel.php @@ -0,0 +1,20 @@ +hasMany(ExistValidatorRefModel::className(), array('ref' => 'id')); + } +} \ No newline at end of file diff --git a/tests/unit/data/validators/models/ExistValidatorRefModel.php b/tests/unit/data/validators/models/ExistValidatorRefModel.php new file mode 100644 index 0000000..6cafa39 --- /dev/null +++ b/tests/unit/data/validators/models/ExistValidatorRefModel.php @@ -0,0 +1,22 @@ +hasOne(ExistValidatorMainModel::className(), array('id' => 'ref')); + } +} \ No newline at end of file diff --git a/tests/unit/framework/db/DatabaseTestCase.php b/tests/unit/framework/db/DatabaseTestCase.php index 1fd2d56..c3d4206 100644 --- a/tests/unit/framework/db/DatabaseTestCase.php +++ b/tests/unit/framework/db/DatabaseTestCase.php @@ -8,6 +8,7 @@ abstract class DatabaseTestCase extends TestCase protected $database; protected $driverName = 'mysql'; protected $db; + protected $initializeAppWithDb = false; protected function setUp() { @@ -18,7 +19,10 @@ abstract class DatabaseTestCase extends TestCase $pdo_database = 'pdo_'.$this->driverName; if (!extension_loaded('pdo') || !extension_loaded($pdo_database)) { - $this->markTestSkipped('pdo and pdo_'.$pdo_database.' extension are required.'); + $this->markTestSkipped('pdo and '.$pdo_database.' extension are required.'); + } + if ($this->initializeAppWithDb === true) { + \Yii::$app->setComponent('db', $this->getConnection()); } } diff --git a/tests/unit/framework/validators/ExistValidatorDriverTests/ExistValidatorPostgresTest.php b/tests/unit/framework/validators/ExistValidatorDriverTests/ExistValidatorPostgresTest.php new file mode 100644 index 0000000..539b458 --- /dev/null +++ b/tests/unit/framework/validators/ExistValidatorDriverTests/ExistValidatorPostgresTest.php @@ -0,0 +1,10 @@ +getComponent('db'); + } + + public function tearDown() + { + parent::tearDown(); + } + + public function testValidateValueExpectedException() + { + try { + $val = new ExistValidator(); + $result = $val->validateValue('ref'); + $this->fail('Exception should have been thrown at this time'); + } catch (Exception $e) { + $this->assertInstanceOf('yii\base\InvalidConfigException', $e); + $this->assertEquals('The "className" property must be set.', $e->getMessage()); + } + // combine to save the time creating a new db-fixture set (likely ~5 sec) + try { + $val = new ExistValidator(array('className' => ExistValidatorMainModel::className())); + $val->validateValue('ref'); + $this->fail('Exception should have been thrown at this time'); + } catch (Exception $e) { + $this->assertInstanceOf('yii\base\InvalidConfigException', $e); + $this->assertEquals('The "attributeName" property must be set.', $e->getMessage()); + } + } + + public function testValidateValue() + { + $val = new ExistValidator(array('className' => ExistValidatorRefModel::className(), 'attributeName' => 'id')); + $this->assertTrue($val->validateValue(2)); + $this->assertTrue($val->validateValue(5)); + $this->assertFalse($val->validateValue(99)); + $this->assertFalse($val->validateValue(array('1'))); + } + + public function testValidateAttribute() + { + // existing value on different table + $val = new ExistValidator(array('className' => ExistValidatorMainModel::className(), 'attributeName' => 'id')); + $m = ExistValidatorRefModel::find(array('id' => 1)); + $val->validateAttribute($m, 'ref'); + $this->assertFalse($m->hasErrors()); + // non-existing value on different table + $val = new ExistValidator(array('className' => ExistValidatorMainModel::className(), 'attributeName' => 'id')); + $m = ExistValidatorRefModel::find(array('id' => 6)); + $val->validateAttribute($m, 'ref'); + $this->assertTrue($m->hasErrors('ref')); + // existing value on same table + $val = new ExistValidator(array('attributeName' => 'ref')); + $m = ExistValidatorRefModel::find(array('id' => 2)); + $val->validateAttribute($m, 'test_val'); + $this->assertFalse($m->hasErrors()); + // non-existing value on same table + $val = new ExistValidator(array('attributeName' => 'ref')); + $m = ExistValidatorRefModel::find(array('id' => 5)); + $val->validateAttribute($m, 'test_val_fail'); + $this->assertTrue($m->hasErrors('test_val_fail')); + // check for given value (true) + $val = new ExistValidator(); + $m = ExistValidatorRefModel::find(array('id' => 3)); + $val->validateAttribute($m, 'ref'); + $this->assertFalse($m->hasErrors()); + // check for given defaults (false) + $val = new ExistValidator(); + $m = ExistValidatorRefModel::find(array('id' => 4)); + $m->a_field = 'some new value'; + $val->validateAttribute($m, 'a_field'); + $this->assertTrue($m->hasErrors('a_field')); + } +} \ No newline at end of file