getExportHtmlword(); $method = new ReflectionMethod(ExportHtmlword::class, 'setProperties'); $method->invoke($exportHtmlword, null); $attrProperties = new ReflectionProperty(ExportHtmlword::class, 'properties'); $properties = $attrProperties->getValue($exportHtmlword); self::assertInstanceOf(ExportPluginProperties::class, $properties); self::assertSame( 'Microsoft Word 2000', $properties->getText(), ); self::assertSame( 'doc', $properties->getExtension(), ); self::assertSame( 'application/vnd.ms-word', $properties->getMimeType(), ); self::assertTrue( $properties->getForceFile(), ); $options = $properties->getOptions(); self::assertInstanceOf(OptionsPropertyRootGroup::class, $options); self::assertSame( 'Format Specific Options', $options->getName(), ); $generalOptionsArray = $options->getProperties(); $generalOptions = $generalOptionsArray->current(); $generalOptionsArray->next(); self::assertInstanceOf(OptionsPropertyMainGroup::class, $generalOptions); self::assertSame( 'htmlword_dump_what', $generalOptions->getName(), ); self::assertSame( 'Dump table', $generalOptions->getText(), ); $generalProperties = $generalOptions->getProperties(); $property = $generalProperties->current(); self::assertInstanceOf(RadioPropertyItem::class, $property); self::assertSame( 'htmlword_structure_or_data', $property->getName(), ); self::assertSame( ['structure' => __('structure'), 'data' => __('data'), 'structure_and_data' => __('structure and data')], $property->getValues(), ); $generalOptions = $generalOptionsArray->current(); self::assertInstanceOf(OptionsPropertyMainGroup::class, $generalOptions); self::assertSame( 'htmlword_dump_data_options', $generalOptions->getName(), ); self::assertSame( 'Data dump options', $generalOptions->getText(), ); $generalProperties = $generalOptions->getProperties(); $property = $generalProperties->current(); $generalProperties->next(); self::assertInstanceOf(TextPropertyItem::class, $property); self::assertSame( 'htmlword_null', $property->getName(), ); self::assertSame( 'Replace NULL with:', $property->getText(), ); $property = $generalProperties->current(); self::assertInstanceOf(BoolPropertyItem::class, $property); self::assertSame( 'htmlword_columns', $property->getName(), ); self::assertSame( 'Put columns names in the first row', $property->getText(), ); } public function testExportHeader(): void { $exportHtmlword = $this->getExportHtmlword(); ob_start(); $exportHtmlword->exportHeader(); $result = ob_get_clean(); $expected = ' '; self::assertSame($expected, $result); // case 2 Current::$charset = 'ISO-8859-1'; ob_start(); $exportHtmlword->exportHeader(); $result = ob_get_clean(); $expected = ' '; self::assertSame($expected, $result); } public function testExportFooter(): void { $exportHtmlword = $this->getExportHtmlword(); ob_start(); $exportHtmlword->exportFooter(); $result = ob_get_clean(); self::assertSame('', $result); } public function testExportDBHeader(): void { $exportHtmlword = $this->getExportHtmlword(); ob_start(); $exportHtmlword->exportDBHeader('d"b'); $result = ob_get_clean(); self::assertSame('

Database d"b

', $result); } public function testExportDBFooter(): void { $exportHtmlword = $this->getExportHtmlword(); $this->expectNotToPerformAssertions(); $exportHtmlword->exportDBFooter('testDB'); } public function testExportDBCreate(): void { $exportHtmlword = $this->getExportHtmlword(); $this->expectNotToPerformAssertions(); $exportHtmlword->exportDBCreate('testDB'); } public function testExportData(): void { $exportHtmlword = $this->getExportHtmlword(); // case 1 OutputHandler::$asFile = true; $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') ->withParsedBody(['htmlword_columns' => 'On']); $exportHtmlword->setExportOptions($request, new SettingsExport()); ob_start(); $exportHtmlword->exportData('test_db', 'test_table', 'SELECT * FROM `test_db`.`test_table`;'); $result = ob_get_clean(); self::assertSame( '

Dumping data for table test_table

' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '
', $result, ); } public function testGetTableDefStandIn(): void { $keys = [['Non_unique' => 0, 'Column_name' => 'name1'], ['Non_unique' => 1, 'Column_name' => 'name2']]; $dbi = $this->createMock(DatabaseInterface::class); $dbi->expects(self::once()) ->method('getTableIndexes') ->with('database', 'view') ->willReturn($keys); $column = new Column('column', '', null, false, '', null, '', '', ''); $dbi->expects(self::once()) ->method('getColumns') ->with('database', 'view') ->willReturn([$column]); $exportHtmlword = $this->getExportHtmlword($dbi); self::assertSame( '' . '' . '' . '' . '' . '' . '' . '
', $exportHtmlword->getTableDefStandIn('database', 'view'), ); } public function testGetTableDef(): void { $keys = [['Non_unique' => 0, 'Column_name' => 'name1'], ['Non_unique' => 1, 'Column_name' => 'name2']]; // case 1 $dbi = $this->createMock(DatabaseInterface::class); $dbi->expects(self::exactly(2)) ->method('fetchResult') ->willReturn( [], ['fieldname' => ['values' => 'test-', 'transformation' => 'testfoo', 'mimetype' => 'test<']], ); $dbi->expects(self::once()) ->method('getTableIndexes') ->with('database', 't1') ->willReturn($keys); $column = new Column('fieldname', '', null, false, '', null, '', '', ''); $dbi->expects(self::exactly(2)) ->method('getColumns') ->with('database', 't1') ->willReturn([$column]); $exportHtmlword = $this->getExportHtmlword($dbi); $relationParameters = RelationParameters::fromArray([ RelationParameters::REL_WORK => true, RelationParameters::COMM_WORK => true, RelationParameters::MIME_WORK => true, RelationParameters::DATABASE => 'database', RelationParameters::RELATION => 'rel', RelationParameters::COLUMN_INFO => 'col', ]); (new ReflectionProperty(Relation::class, 'cache'))->setValue(null, $relationParameters); $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') ->withParsedBody(['htmlword_relation' => 'On', 'htmlword_mime' => 'On', 'htmlword_comments' => 'On']); $exportHtmlword->setExportOptions($request, new SettingsExport()); $result = $exportHtmlword->getTableDef('database', 't1'); self::assertSame( '' . '' . '' . '' . '' . '' . '' . '' . '' . '
', $result, ); // case 2 $dbi = $this->createMock(DatabaseInterface::class); $dbi->expects(self::exactly(2)) ->method('fetchResult') ->willReturn( ['fieldname' => ['foreign_table' => 'ftable', 'foreign_field' => 'ffield']], ['field' => ['values' => 'test-', 'transformation' => 'testfoo', 'mimetype' => 'test<']], ); $dbi->expects(self::once()) ->method('getTableIndexes') ->with('database', 't1') ->willReturn($keys); $column = new Column('fieldname', '', null, false, '', null, '', '', ''); $dbi->expects(self::exactly(2)) ->method('getColumns') ->with('database', 't1') ->willReturn([$column]); $exportHtmlword = $this->getExportHtmlword($dbi); $exportHtmlword->setExportOptions($request, new SettingsExport()); $relationParameters = RelationParameters::fromArray([ RelationParameters::REL_WORK => true, RelationParameters::COMM_WORK => true, RelationParameters::MIME_WORK => true, RelationParameters::DATABASE => 'database', RelationParameters::RELATION => 'rel', RelationParameters::COLUMN_INFO => 'col', ]); (new ReflectionProperty(Relation::class, 'cache'))->setValue(null, $relationParameters); $result = $exportHtmlword->getTableDef('database', 't1'); self::assertStringContainsString('ftable (ffield)', $result); self::assertStringContainsString('', $result); // case 3 $dbi = $this->createMock(DatabaseInterface::class); $dbi->expects(self::once()) ->method('getTableIndexes') ->with('database', 't1') ->willReturn($keys); $column = new Column('fieldname', '', null, false, '', null, '', '', ''); $dbi->expects(self::once()) ->method('getColumns') ->with('database', 't1') ->willReturn([$column]); $dbi->expects(self::never()) ->method('tryQuery'); $relationParameters = RelationParameters::fromArray([ RelationParameters::DATABASE => 'database', RelationParameters::RELATION => 'rel', RelationParameters::COLUMN_INFO => 'col', ]); (new ReflectionProperty(Relation::class, 'cache'))->setValue(null, $relationParameters); $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') ->withParsedBody(['htmlword_relation' => 'On', 'htmlword_mime' => 'On']); $exportHtmlword = $this->getExportHtmlword($dbi); $exportHtmlword->setExportOptions($request, new SettingsExport()); $result = $exportHtmlword->getTableDef('database', 't1'); self::assertSame( '' . '' . '' . '' . '' . '' . '' . '
', $result, ); } public function testGetTriggers(): void { $triggers = [ new Trigger( TriggerName::from('tna"me'), Timing::Before, Event::Update, TableName::from('table'), 'def', 'test_user@localhost', ), ]; $exportHtmlword = $this->getExportHtmlword(); $method = new ReflectionMethod(ExportHtmlword::class, 'getTriggers'); $result = $method->invoke($exportHtmlword, $triggers); self::assertStringContainsString( 'tna"me' . 'BEFORE' . 'UPDATE' . 'def', $result, ); } public function testExportStructure(): void { Config::getInstance()->selectedServer['DisableIS'] = true; $dbiDummy = $this->createDbiDummy(); $exportHtmlword = $this->getExportHtmlword($this->createDatabaseInterface($dbiDummy)); ob_start(); $dbiDummy->addSelectDb('test_db'); $exportHtmlword->exportStructure('test_db', 'test_table', 'create_table'); $dbiDummy->assertAllSelectsConsumed(); $result = ob_get_clean(); self::assertSame( '

Table structure for table test_table

' . '' . '' . '' . '' . '' . '' . '' . '' . '
', $result, ); ob_start(); $exportHtmlword->exportStructure('test_db', 'test_table', 'triggers'); $result = ob_get_clean(); self::assertSame( '

Triggers test_table

' . '' . '' . '' . '' . '
', $result, ); ob_start(); $dbiDummy->addSelectDb('test_db'); $exportHtmlword->exportStructure('test_db', 'test_table', 'create_view'); $dbiDummy->assertAllSelectsConsumed(); $result = ob_get_clean(); self::assertSame( '

Structure for view test_table

' . '' . '' . '' . '' . '' . '' . '' . '
', $result, ); ob_start(); $exportHtmlword->exportStructure('test_db', 'test_table', 'stand_in'); $result = ob_get_clean(); self::assertSame( '

Stand-in structure for view test_table

' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '
', $result, ); } public function testFormatOneColumnDefinition(): void { $method = new ReflectionMethod(ExportHtmlword::class, 'formatOneColumnDefinition'); $column = new Column('field', 'set(abc)enum123', null, true, 'PRI', null, '', '', ''); $uniqueKeys = ['field']; $exportHtmlword = $this->getExportHtmlword(); self::assertSame( '' . 'fieldset(abc)' . 'YesNULL', $method->invoke($exportHtmlword, $column, $uniqueKeys), ); $column = new Column('fields', '', null, false, 'COMP', 'def', '', '', ''); $uniqueKeys = ['field']; self::assertSame( 'fields' . '&nbsp;No' . 'def', $method->invoke($exportHtmlword, $column, $uniqueKeys), ); } public function testExportTableCallsExportStructureMethod(): void { $dbi = $this->createStub(DatabaseInterface::class); $exportHtmlword = $this->getExportHtmlword($dbi); $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') ->withParsedBody(['htmlword_structure_or_data' => 'structure']); $exportHtmlword->setExportOptions($request, new SettingsExport()); $export = new Export($dbi, new OutputHandler()); ob_start(); $export->exportTable( 'test_db', 'test_table', $exportHtmlword, null, '', '', '', [], ); $output = ob_get_clean(); self::assertStringContainsString('

Table structure for table test_table

', $output); } private function getExportHtmlword(DatabaseInterface|null $dbi = null): ExportHtmlword { $dbi ??= $this->createDatabaseInterface(); $config = new Config(); $relation = new Relation($dbi, $config); return new ExportHtmlword($relation, new OutputHandler(), new Transformations($dbi, $relation), $dbi, $config); } }