1+ <?php
2+
3+ namespace Service \Parser ;
4+
5+ use Illuminate \Database \Connection ;
6+ use N3XT0R \MigrationGenerator \Service \Parser \Drivers \MSSQLSchemaParser ;
7+ use N3XT0R \MigrationGenerator \Service \Parser \Drivers \MySQLSchemaParser ;
8+ use N3XT0R \MigrationGenerator \Service \Parser \Drivers \PostgresSchemaParser ;
9+ use N3XT0R \MigrationGenerator \Service \Parser \SchemaParserFactory ;
10+ use PHPUnit \Framework \Attributes \DataProvider ;
11+ use Tests \TestCase ;
12+
13+ class SchemaParserFactoryTest extends TestCase
14+ {
15+ public static function connectionDriverDataProvider (): array
16+ {
17+ return [
18+ ['mysql ' , MySQLSchemaParser::class],
19+ ['pgsql ' , PostgresSchemaParser::class],
20+ ['sqlsrv ' , MSSQLSchemaParser::class],
21+ ];
22+ }
23+
24+ #[DataProvider('connectionDriverDataProvider ' )]
25+ public function testFactoryWorks (string $ dbType , string $ expectedType ): void
26+ {
27+ $ connection = $ this ->getMockBuilder (Connection::class)
28+ ->disableOriginalConstructor ()
29+ ->onlyMethods (['getDriverName ' ])->getMock ();
30+ $ connection ->method ('getDriverName ' )->willReturn ($ dbType );
31+
32+ $ factory = new SchemaParserFactory ();
33+ self ::assertInstanceOf ($ expectedType , $ factory ->create ($ connection ));
34+ }
35+
36+ public function testFactoryThrowsException (): void
37+ {
38+ $ dbType = uniqid ('dbType ' , true );
39+ $ connection = $ this ->getMockBuilder (Connection::class)
40+ ->disableOriginalConstructor ()
41+ ->onlyMethods (['getDriverName ' ])->getMock ();
42+ $ connection ->method ('getDriverName ' )->willReturn ($ dbType );
43+ $ this ->expectException (\InvalidArgumentException::class);
44+ (new SchemaParserFactory ())->create ($ connection );
45+ }
46+ }
0 commit comments