selectedServer['DisableIS'] = false; //$_SESSION $_POST['foreignDb'] = 'db'; $_POST['foreignTable'] = 'table'; $this->dbi = $this->createMock(DatabaseInterface::class); $this->response = new ResponseStub(); $this->template = new Template($config); } /** * Tests for getDropdownValueForTableAction() * * Case one: this case is for the situation when the target * table is a view. */ public function testGetDropdownValueForTableActionIsView(): void { $viewColumns = ['viewCol', 'viewCol2', 'viewCol3']; $tableMock = $this->createMock(Table::class); // Test the situation when the table is a view $tableMock->method('isView')->willReturn(true); $tableMock->method('getColumns')->willReturn($viewColumns); $this->dbi->method('getTable')->willReturn($tableMock); $ctrl = new RelationController( $this->response, $this->template, new Relation($this->dbi), $this->dbi, Config::getInstance(), ); $ctrl->getDropdownValueForTable(); $json = $this->response->getJSONResult(); self::assertSame($viewColumns, $json['columns']); } /** * Tests for getDropdownValueForTableAction() * * Case one: this case is for the situation when the target * table is not a view (real tabletable). */ public function testGetDropdownValueForTableActionNotView(): void { $indexedColumns = ['primaryTableCol']; $tableMock = $this->createMock(Table::class); // Test the situation when the table is a view $tableMock->method('isView')->willReturn(false); $tableMock->method('getIndexedColumns')->willReturn($indexedColumns); $this->dbi->method('getTable')->willReturn($tableMock); $ctrl = new RelationController( $this->response, $this->template, new Relation($this->dbi), $this->dbi, Config::getInstance(), ); $ctrl->getDropdownValueForTable(); $json = $this->response->getJSONResult(); self::assertSame($indexedColumns, $json['columns']); } /** * Tests for getDropdownValueForDbAction() * * Case one: foreign */ public function testGetDropdownValueForDbActionOne(): void { $resultStub = $this->createMock(DummyResult::class); $this->dbi->expects(self::exactly(1)) ->method('query') ->willReturn($resultStub); $resultStub->method('fetchAllColumn')->willReturn(['table']); $ctrl = new RelationController( $this->response, $this->template, new Relation($this->dbi), $this->dbi, Config::getInstance(), ); $ctrl->getDropdownValueForDatabase('INNODB', 'db', 'true'); $json = $this->response->getJSONResult(); self::assertSame( ['table'], $json['tables'], ); } /** * Tests for getDropdownValueForDbAction() * * Case two: not foreign */ public function testGetDropdownValueForDbActionTwo(): void { $this->dbi->expects(self::exactly(1)) ->method('getTables') ->willReturn(['table']); $ctrl = new RelationController( $this->response, $this->template, new Relation($this->dbi), $this->dbi, Config::getInstance(), ); $ctrl->getDropdownValueForDatabase('INNODB', 'db', 'false'); $json = $this->response->getJSONResult(); self::assertSame( ['table'], $json['tables'], ); } }