createDbiDummy(); $dbi = $this->createDatabaseInterface($dbiDummy); DatabaseInterface::$instance = $dbi; (new ReflectionProperty(RecentFavoriteTables::class, 'instances'))->setValue(null, []); $recentFavoriteTable = new RecentFavoriteTable( DatabaseName::from('test_db'), TableName::from('test_table'), ); $dbiDummy->addResult('SELECT 1 FROM `test_db`.`test_table` LIMIT 1;', [['1']], ['1']); $dbiDummy->addResult('SELECT `tables` FROM `pmadb`.`favorite` WHERE `username` = \'root\'', []); $dbiDummy->addResult("REPLACE INTO `pmadb`.`favorite` (`username`, `tables`) VALUES ('root', " . $dbi->quoteString(json_encode([$recentFavoriteTable])) . ')', true); $relationParameters = RelationParameters::fromArray([ 'db' => 'pmadb', 'favoritework' => 'favoritework', 'favorite' => 'favorite', ]); (new ReflectionProperty(Relation::class, 'cache'))->setValue(null, $relationParameters); $response = new ResponseStub(); $response->setAjax(true); $controller = new SyncFavoriteTablesController( $response, new Relation($dbi), ); // The user hash for test $user = 'dc76e9f0c0006e8f919e0c515c66dbba3982f785'; $favoriteTable = json_encode([$user => [['db' => 'test_db', 'table' => 'test_table']]]); $_SESSION['tmpval'] = ['favorites_synced' => [Current::$server => null]]; $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') ->withHeader('X-Requested-With', 'XMLHttpRequest') ->withParsedBody(['db' => 'test_db', 'favoriteTables' => $favoriteTable]); $response = $controller($request); $json = json_decode((string) $response->getBody(), true); self::assertIsArray($json); self::assertSame($favoriteTable, $json['favoriteTables'] ?? ''); self::assertArrayHasKey('list', $json); /** * @psalm-suppress TypeDoesNotContainType * @phpstan-ignore-next-line */ self::assertTrue($_SESSION['tmpval']['favorites_synced'][Current::$server]); $dbiDummy->assertAllQueriesConsumed(); } }