setDecompressContent(true); $importHandle->open(); $dbi = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() ->getMock(); $importCsv = $this->getImportShp($dbi); Current::$message = null; Import::$hasError = false; $importCsv->doImport($importHandle); self::assertNull(Current::$message); self::assertFalse(Import::$hasError); } /** * Test for getProperties */ public function testGetProperties(): void { $importCsv = $this->getImportShp(); $properties = $importCsv->getProperties(); self::assertSame( __('ESRI Shape File'), $properties->getText(), ); self::assertSame( 'shp', $properties->getExtension(), ); self::assertNull($properties->getOptions()); } /** * Test for doImport with complex data */ #[Group('32bit-incompatible')] public function testImportOsm(): void { ImportSettings::$sqlQueryDisabled = false; //will show the import SQL detail Current::$database = ''; $this->runImport('tests/test_data/dresden_osm.shp.zip'); $this->assertMessages(ImportSettings::$importNotice); $endsWith = "13.737122 51.0542065)))'))"; if (extension_loaded('dbase')) { $endsWith = "13.737122 51.0542065)))'),"; } self::assertStringContainsString( "(GeomFromText('MULTIPOLYGON(((" . '13.737122 51.0542065,' . '13.7373039 51.0541298,' . '13.7372661 51.0540944,' . '13.7370842 51.0541711,' . $endsWith, Current::$sqlQuery, ); } /** * Test for doImport */ #[Group('32bit-incompatible')] public function testDoImport(): void { ImportSettings::$sqlQueryDisabled = false; //will show the import SQL detail Current::$database = ''; $this->runImport('tests/test_data/timezone.shp.zip'); self::assertStringContainsString( 'CREATE DATABASE IF NOT EXISTS `SHP_DB` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci', Current::$sqlQuery, ); // dbase extension will generate different sql statement if (extension_loaded('dbase')) { self::assertStringContainsString( 'CREATE TABLE IF NOT EXISTS `SHP_DB`.`TBL_NAME` ' . '(`SPATIAL` geometry, `ID` int(2), `AUTHORITY` varchar(25), `NAME` varchar(42));', Current::$sqlQuery, ); self::assertStringContainsString( 'INSERT INTO `SHP_DB`.`TBL_NAME` (`SPATIAL`, `ID`, `AUTHORITY`, `NAME`) VALUES', Current::$sqlQuery, ); } else { self::assertStringContainsString( 'CREATE TABLE IF NOT EXISTS `SHP_DB`.`TBL_NAME` (`SPATIAL` geometry)', Current::$sqlQuery, ); self::assertStringContainsString('INSERT INTO `SHP_DB`.`TBL_NAME` (`SPATIAL`) VALUES', Current::$sqlQuery); } self::assertStringContainsString("GeomFromText('POINT(1294523.1759236", Current::$sqlQuery); //assert that all databases and tables are imported $this->assertMessages(ImportSettings::$importNotice); } /** * Validates import messages * * @param string $importNotice Messages to check */ protected function assertMessages(string $importNotice): void { self::assertStringContainsString( 'The following structures have either been created or altered.', $importNotice, ); self::assertStringContainsString('Go to database: `SHP_DB`', $importNotice); self::assertStringContainsString('Edit settings for `SHP_DB`', $importNotice); self::assertStringContainsString('Go to table: `TBL_NAME`', $importNotice); self::assertStringContainsString('Edit settings for `TBL_NAME`', $importNotice); //assert that the import process is finished self::assertTrue(ImportSettings::$finished); } private function getImportShp(DatabaseInterface|null $dbi = null): ImportShp { $dbiObject = $dbi ?? $this->createDatabaseInterface(); $config = new Config(); return new ImportShp(new Import($dbiObject, new ResponseRenderer(), $config), $dbiObject, $config); } }