55use PHPUnit \Framework \Attributes \Test ;
66use PHPUnit \Framework \TestCase ;
77use Tempest \Database \Config \DatabaseDialect ;
8+ use Tempest \Database \Exceptions \DefaultValueWasInvalid ;
89use Tempest \Database \QueryStatements \CharStatement ;
910
1011final class CharStatementTest extends TestCase
@@ -25,4 +26,54 @@ public function test_char(): void
2526 $ this ->assertSame ($ expectedMysql , $ statement ->compile (DatabaseDialect::MYSQL ));
2627 $ this ->assertSame ($ expectedPgsql , $ statement ->compile (DatabaseDialect::POSTGRESQL ));
2728 }
29+
30+ #[Test]
31+ public function test_determine_char_size (): void
32+ {
33+ $ fixedSizeStatement = new CharStatement (
34+ name: 'foo ' ,
35+ size: 10 ,
36+ );
37+ $ expectedMysql = '`foo` CHAR(10) NOT NULL ' ;
38+ $ this ->assertSame ($ expectedMysql , $ fixedSizeStatement ->compile (DatabaseDialect::MYSQL ));
39+
40+ $ defaultSizeStatement = new CharStatement (
41+ name: 'foo ' ,
42+ default: 'foo_bar ' ,
43+ );
44+ $ expectedMysql = '`foo` CHAR(7) DEFAULT \'foo_bar \' NOT NULL ' ;
45+ $ this ->assertSame ($ expectedMysql , $ defaultSizeStatement ->compile (DatabaseDialect::MYSQL ));
46+
47+ $ fixedAndDefaultSizeStatement = new CharStatement (
48+ name: 'foo ' ,
49+ size: 7 ,
50+ default: 'foo_bar ' ,
51+ );
52+ $ expectedMysql = '`foo` CHAR(7) DEFAULT \'foo_bar \' NOT NULL ' ;
53+ $ this ->assertSame ($ expectedMysql , $ fixedAndDefaultSizeStatement ->compile (DatabaseDialect::MYSQL ));
54+ }
55+
56+ #[Test]
57+ public function test_char_size_less_than_default_value_length (): void
58+ {
59+ $ this ->expectException (DefaultValueWasInvalid::class);
60+
61+ $ statement = new CharStatement (
62+ name: 'foo ' ,
63+ size: 1 ,
64+ default: 'foo_bar ' ,
65+ );
66+ $ statement ->compile (DatabaseDialect::MYSQL );
67+ }
68+
69+ public function test_char_size_greater_than_default_value_length (): void
70+ {
71+ $ statement = new CharStatement (
72+ name: 'foo ' ,
73+ size: 10 ,
74+ default: 'foo_bar ' ,
75+ );
76+ $ expectedMysql = '`foo` CHAR(10) DEFAULT \'foo_bar \' NOT NULL ' ;
77+ $ this ->assertSame ($ expectedMysql , $ statement ->compile (DatabaseDialect::MYSQL ));
78+ }
2879}
0 commit comments