diff --git a/apps/federation/lib/TrustedServers.php b/apps/federation/lib/TrustedServers.php index a62ddfa127506..a8573003bd658 100644 --- a/apps/federation/lib/TrustedServers.php +++ b/apps/federation/lib/TrustedServers.php @@ -116,12 +116,13 @@ public function getServer(int $id): ?array { $this->trustedServersCache = $this->dbHandler->getAllServer(); } - $server = array_filter($this->trustedServersCache, fn ($server) => $server['id'] === $id); - if (empty($server)) { - throw new \Exception('No server found with ID: ' . $id); + foreach ($this->trustedServersCache as $server) { + if ($server['id'] === $id) { + return $server; + } } - return $server[0]; + throw new \Exception('No server found with ID: ' . $id); } /** diff --git a/apps/federation/tests/TrustedServersTest.php b/apps/federation/tests/TrustedServersTest.php index c3f0368858bc3..098ecd1082afb 100644 --- a/apps/federation/tests/TrustedServersTest.php +++ b/apps/federation/tests/TrustedServersTest.php @@ -164,6 +164,66 @@ public function testGetServers(): void { ); } + public static function dataTestGetServer() { + return [ + [ + 15, + [ + 'id' => 15, + 'otherData' => 'first server', + ] + ], + [ + 16, + [ + 'id' => 16, + 'otherData' => 'second server', + ] + ], + [ + 42, + [ + 'id' => 42, + 'otherData' => 'last server', + ] + ], + [ + 108, + null + ], + ]; + } + + /** + * @dataProvider dataTestGetServer + */ + public function testGetServer(int $id, ?array $expectedServer): void { + $servers = [ + [ + 'id' => 15, + 'otherData' => 'first server', + ], + [ + 'id' => 16, + 'otherData' => 'second server', + ], + [ + 'id' => 42, + 'otherData' => 'last server', + ], + ]; + $this->dbHandler->expects($this->once())->method('getAllServer')->willReturn($servers); + + if ($expectedServer === null) { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('No server found with ID: ' . $id); + } + + $this->assertEquals( + $expectedServer, + $this->trustedServers->getServer($id) + ); + } public function testIsTrustedServer(): void { $this->dbHandler->expects($this->once())