Skip to content

Commit 45025a1

Browse files
authored
Merge pull request #6400 from kenjis/refactor-ForgeTest-getFieldData
test: refactor tests for getFieldData()
2 parents f92de2c + 1cc0f9b commit 45025a1

File tree

1 file changed

+162
-44
lines changed

1 file changed

+162
-44
lines changed

tests/system/Database/Live/ForgeTest.php

Lines changed: 162 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -866,64 +866,182 @@ public function testAddFields()
866866

867867
$this->assertIsArray($fieldsNames);
868868

869-
$fields = ['id', 'name', 'username', 'active'];
870-
$this->assertContains($fieldsData[0]->name, $fields);
871-
$this->assertContains($fieldsData[1]->name, $fields);
872-
unset($fields);
873-
874869
if ($this->db->DBDriver === 'MySQLi') {
875-
$this->assertSame('int', $fieldsData[0]->type);
876-
$this->assertSame('varchar', $fieldsData[1]->type);
870+
$expected = [
871+
0 => [
872+
'name' => 'id',
873+
'type' => 'int',
874+
'max_length' => 11,
875+
'nullable' => false,
876+
'default' => null,
877+
'primary_key' => 1,
878+
],
879+
1 => [
880+
'name' => 'username',
881+
'type' => 'varchar',
882+
'max_length' => 255,
883+
'nullable' => false,
884+
'default' => null,
885+
'primary_key' => 0,
886+
],
887+
2 => [
888+
'name' => 'name',
889+
'type' => 'varchar',
890+
'max_length' => 255,
891+
'nullable' => false,
892+
'default' => null,
893+
'primary_key' => 0,
894+
],
895+
3 => [
896+
'name' => 'active',
897+
'type' => 'int',
898+
'max_length' => 11,
899+
'nullable' => false,
900+
'default' => '0',
901+
'primary_key' => 0,
902+
],
903+
];
877904

878-
if (version_compare($this->db->getVersion(), '8.0.17', '<')) {
905+
if (version_compare($this->db->getVersion(), '8.0.17', '>=')) {
879906
// As of MySQL 8.0.17, the display width attribute for integer data types
880907
// is deprecated and is not reported back anymore.
881908
// @see https://dev.mysql.com/doc/refman/8.0/en/numeric-type-attributes.html
882-
$this->assertSame(11, $fieldsData[0]->max_length);
909+
$expected[0]['max_length'] = null;
910+
$expected[3]['max_length'] = null;
883911
}
884-
885-
$this->assertNull($fieldsData[0]->default);
886-
$this->assertNull($fieldsData[1]->default);
887-
888-
$this->assertSame(1, (int) $fieldsData[0]->primary_key);
889-
890-
$this->assertSame(255, (int) $fieldsData[1]->max_length);
891912
} elseif ($this->db->DBDriver === 'Postgre') {
892-
$this->assertSame('integer', $fieldsData[0]->type);
893-
$this->assertSame('character varying', $fieldsData[1]->type);
894-
895-
$this->assertFalse($fieldsData[0]->nullable);
896-
$this->assertFalse($fieldsData[1]->nullable);
897-
898-
$this->assertSame(32, (int) $fieldsData[0]->max_length);
899-
$this->assertSame(255, (int) $fieldsData[1]->max_length);
900-
901-
$this->assertNull($fieldsData[1]->default);
913+
$expected = [
914+
0 => [
915+
'name' => 'id',
916+
'type' => 'integer',
917+
'nullable' => false,
918+
'default' => "nextval('db_forge_test_fields_id_seq'::regclass)",
919+
'max_length' => '32',
920+
],
921+
1 => [
922+
'name' => 'username',
923+
'type' => 'character varying',
924+
'nullable' => false,
925+
'default' => null,
926+
'max_length' => '255',
927+
],
928+
2 => [
929+
'name' => 'name',
930+
'type' => 'character varying',
931+
'nullable' => false,
932+
'default' => null,
933+
'max_length' => '255',
934+
],
935+
3 => [
936+
'name' => 'active',
937+
'type' => 'integer',
938+
'nullable' => false,
939+
'default' => '0',
940+
'max_length' => '32',
941+
],
942+
];
902943
} elseif ($this->db->DBDriver === 'SQLite3') {
903-
$this->assertSame('integer', strtolower($fieldsData[0]->type));
904-
$this->assertSame('varchar', strtolower($fieldsData[1]->type));
905-
906-
$this->assertNull($fieldsData[1]->default);
944+
$expected = [
945+
0 => [
946+
'name' => 'id',
947+
'type' => 'INTEGER',
948+
'max_length' => null,
949+
'default' => null,
950+
'primary_key' => true,
951+
'nullable' => true,
952+
],
953+
1 => [
954+
'name' => 'username',
955+
'type' => 'VARCHAR',
956+
'max_length' => null,
957+
'default' => null,
958+
'primary_key' => false,
959+
'nullable' => false,
960+
],
961+
2 => [
962+
'name' => 'name',
963+
'type' => 'VARCHAR',
964+
'max_length' => null,
965+
'default' => null,
966+
'primary_key' => false,
967+
'nullable' => false,
968+
],
969+
3 => [
970+
'name' => 'active',
971+
'type' => 'INTEGER',
972+
'max_length' => null,
973+
'default' => '0',
974+
'primary_key' => false,
975+
'nullable' => false,
976+
],
977+
];
907978
} elseif ($this->db->DBDriver === 'SQLSRV') {
908-
$this->assertSame('int', $fieldsData[0]->type);
909-
$this->assertSame('varchar', $fieldsData[1]->type);
910-
911-
$this->assertSame(10, (int) $fieldsData[0]->max_length);
912-
$this->assertSame(255, (int) $fieldsData[1]->max_length);
913-
914-
$this->assertNull($fieldsData[1]->default);
979+
$expected = [
980+
0 => [
981+
'name' => 'id',
982+
'type' => 'int',
983+
'default' => null,
984+
'max_length' => 10,
985+
],
986+
1 => [
987+
'name' => 'username',
988+
'type' => 'varchar',
989+
'default' => null,
990+
'max_length' => 255,
991+
],
992+
2 => [
993+
'name' => 'name',
994+
'type' => 'varchar',
995+
'default' => null,
996+
'max_length' => 255,
997+
],
998+
3 => [
999+
'name' => 'active',
1000+
'type' => 'int',
1001+
'default' => '((0))', // Why?
1002+
'max_length' => 10,
1003+
],
1004+
];
9151005
} elseif ($this->db->DBDriver === 'OCI8') {
916-
// Check types
917-
$this->assertSame('NUMBER', $fieldsData[0]->type);
918-
$this->assertSame('VARCHAR2', $fieldsData[1]->type);
919-
920-
$this->assertSame('11', $fieldsData[0]->max_length);
921-
$this->assertSame('255', $fieldsData[1]->max_length);
1006+
$expected = [
1007+
0 => [
1008+
'name' => 'id',
1009+
'type' => 'NUMBER',
1010+
'max_length' => '11',
1011+
'default' => '"ORACLE"."ISEQ$$_80229".nextval', // Sequence id may change
1012+
'nullable' => false,
1013+
],
1014+
1 => [
1015+
'name' => 'username',
1016+
'type' => 'VARCHAR2',
1017+
'max_length' => '255',
1018+
'default' => '',
1019+
'nullable' => false,
1020+
],
1021+
2 => [
1022+
'name' => 'name',
1023+
'type' => 'VARCHAR2',
1024+
'max_length' => '255',
1025+
'default' => '',
1026+
'nullable' => false,
1027+
],
1028+
3 => [
1029+
'name' => 'active',
1030+
'type' => 'NUMBER',
1031+
'max_length' => '11',
1032+
'default' => '0 ', // Why?
1033+
'nullable' => false,
1034+
],
1035+
];
9221036

923-
$this->assertSame('', $fieldsData[1]->default);
1037+
// Sequence id may change
1038+
$this->assertMatchesRegularExpression('/"ORACLE"."ISEQ\\$\\$_\d+".nextval/', $fieldsData[0]->default);
1039+
$expected[0]['default'] = $fieldsData[0]->default;
9241040
} else {
9251041
$this->fail(sprintf('DB driver "%s" is not supported.', $this->db->DBDriver));
9261042
}
1043+
1044+
$this->assertSame($expected, json_decode(json_encode($fieldsData), true));
9271045
}
9281046

9291047
public function testCompositeKey()

0 commit comments

Comments
 (0)