diff --git a/lib/REST/Miniflux/V1.php b/lib/REST/Miniflux/V1.php index 1ca0e79..9519865 100644 --- a/lib/REST/Miniflux/V1.php +++ b/lib/REST/Miniflux/V1.php @@ -820,7 +820,7 @@ class V1 extends \JKingWeb\Arsse\REST\AbstractHandler { return new Response([ 'id' => $icon['id'], 'data' => ($icon['type'] ?: "application/octet-stream").";base64,".base64_encode($icon['data']), - 'mime_type' => $icon['type'], + 'mime_type' => ($icon['type'] ?: "application/octet-stream"), ]); } diff --git a/tests/cases/REST/Miniflux/TestV1.php b/tests/cases/REST/Miniflux/TestV1.php index 7154dd9..8e6d13d 100644 --- a/tests/cases/REST/Miniflux/TestV1.php +++ b/tests/cases/REST/Miniflux/TestV1.php @@ -725,4 +725,27 @@ class TestV1 extends \JKingWeb\Arsse\Test\AbstractTest { $this->assertMessage(new ErrorResponse("404", 404), $this->req("DELETE", "/feeds/2112")); \Phake::verify(Arsse::$db)->subscriptionRemove(Arsse::$user->id, 2112); } + + /** @dataProvider provideIcons */ + public function testGetTheIconOfASubscription($out, ResponseInterface $exp): void { + if ($out instanceof \Exception) { + \Phake::when(Arsse::$db)->subscriptionIcon->thenThrow($out); + } else { + \Phake::when(Arsse::$db)->subscriptionIcon->thenReturn($this->v($out)); + } + $this->assertMessage($exp, $this->req("GET", "/feeds/2112/icon")); + \Phake::verify(Arsse::$db)->subscriptionIcon(Arsse::$user->id, 2112); + } + + public function provideIcons(): iterable { + self::clearData(); + return [ + [['id' => 44, 'type' => "image/svg+xml", 'data' => ""], new Response(['id' => 44, 'data' => "image/svg+xml;base64,PHN2Zy8+", 'mime_type' => "image/svg+xml"])], + [['id' => 47, 'type' => "", 'data' => ""], new Response(['id' => 47, 'data' => "application/octet-stream;base64,PHN2Zy8+", 'mime_type' => "application/octet-stream"])], + [['id' => 47, 'type' => null, 'data' => ""], new Response(['id' => 47, 'data' => "application/octet-stream;base64,PHN2Zy8+", 'mime_type' => "application/octet-stream"])], + [['id' => 47, 'type' => null, 'data' => null], new ErrorResponse("404", 404)], + [null, new ErrorResponse("404", 404)], + [new ExceptionInput("subjectMissing"), new ErrorResponse("404", 404)], + ]; + } }