@@ -12,24 +12,80 @@ use Tester\Assert;
1212require __DIR__ . '/../bootstrap.php ' ;
1313
1414$ connection = connectToDB ()->getConnection ();
15+ Nette \Database \Helpers::loadFromFile ($ connection , __DIR__ . "/files/ {$ driverName }-nette_test1.sql " );
1516
16- $ options = Tester \Environment::loadData ();
17- $ e = Assert::exception (
18- fn () => new Nette \Database \Connection ($ options ['dsn ' ], 'unknown ' , 'unknown ' ),
19- Nette \Database \ConnectionException::class,
20- '%a% Access denied for user %a% ' ,
21- );
17+ test ('Exception thrown for invalid database credentials ' , function () {
18+ $ options = Tester \Environment::loadData ();
19+ $ e = Assert::exception (
20+ fn () => new Nette \Database \Connection ($ options ['dsn ' ], 'unknown ' , 'unknown ' ),
21+ Nette \Database \ConnectionException::class,
22+ '%a% Access denied for user %a% ' ,
23+ );
2224
23- Assert::same (1045 , $ e ->getDriverCode ());
24- Assert::contains ($ e ->getSqlState (), ['HY000 ' , '28000 ' ]);
25- Assert::same ($ e ->getCode (), $ e ->getSqlState ());
25+ Assert::same (1045 , $ e ->getDriverCode ());
26+ Assert::contains ($ e ->getSqlState (), ['HY000 ' , '28000 ' ]);
27+ Assert::same ($ e ->getCode (), $ e ->getSqlState ());
28+ });
2629
2730
28- $ e = Assert::exception (
29- fn () => $ connection ->rollback (),
30- Nette \Database \DriverException::class,
31- 'There is no active transaction ' ,
32- 0 ,
33- );
31+ test ('Exception thrown when calling rollback with no active transaction ' , function () use ($ connection ) {
32+ $ e = Assert::exception (
33+ fn () => $ connection ->rollback (),
34+ Nette \Database \DriverException::class,
35+ 'There is no active transaction ' ,
36+ 0 ,
37+ );
38+ Assert::same (null , $ e ->getDriverCode ());
39+ });
3440
35- Assert::same (null , $ e ->getDriverCode ());
41+
42+ test ('Exception thrown for syntax error in SQL query ' , function () use ($ connection ) {
43+ $ e = Assert::exception (
44+ fn () => $ connection ->query ('SELECT ' ),
45+ Nette \Database \DriverException::class,
46+ '%a% Syntax error %a% ' ,
47+ '42000 ' ,
48+ );
49+
50+ Assert::same (1064 , $ e ->getDriverCode ());
51+ Assert::same ($ e ->getCode (), $ e ->getSqlState ());
52+ });
53+
54+
55+ test ('Exception thrown for unique constraint violation ' , function () use ($ connection ) {
56+ $ e = Assert::exception (
57+ fn () => $ connection ->query ('INSERT INTO author (id, name, web, born) VALUES (11, "", "", NULL) ' ),
58+ Nette \Database \UniqueConstraintViolationException::class,
59+ '%a% Integrity constraint violation: %a% ' ,
60+ '23000 ' ,
61+ );
62+
63+ Assert::same (1062 , $ e ->getDriverCode ());
64+ Assert::same ($ e ->getCode (), $ e ->getSqlState ());
65+ });
66+
67+
68+ test ('Exception thrown for not null constraint violation ' , function () use ($ connection ) {
69+ $ e = Assert::exception (
70+ fn () => $ connection ->query ('INSERT INTO author (name, web, born) VALUES (NULL, "", NULL) ' ),
71+ Nette \Database \NotNullConstraintViolationException::class,
72+ '%a% Integrity constraint violation: %a% ' ,
73+ '23000 ' ,
74+ );
75+
76+ Assert::same (1048 , $ e ->getDriverCode ());
77+ Assert::same ($ e ->getCode (), $ e ->getSqlState ());
78+ });
79+
80+
81+ test ('Exception thrown for foreign key constraint violation ' , function () use ($ connection ) {
82+ $ e = Assert::exception (
83+ fn () => $ connection ->query ('INSERT INTO book (author_id, translator_id, title) VALUES (999, 12, "") ' ),
84+ Nette \Database \ForeignKeyConstraintViolationException::class,
85+ '%a% a foreign key constraint fails %a% ' ,
86+ '23000 ' ,
87+ );
88+
89+ Assert::same (1452 , $ e ->getDriverCode ());
90+ Assert::same ($ e ->getCode (), $ e ->getSqlState ());
91+ });
0 commit comments