diff --git a/app/Models/Plugin.php b/app/Models/Plugin.php index 33a29d5..3c279d7 100644 --- a/app/Models/Plugin.php +++ b/app/Models/Plugin.php @@ -235,15 +235,9 @@ class Plugin extends Model } } + // Default to JSON parsing try { - // Attempt to parse it into JSON - $json = $httpResponse->json(); - if($json !== null) { - return $json; - } - - // Response doesn't seem to be JSON, wrap the response body text as a JSON object - return ['data' => $httpResponse->body()]; + return $httpResponse->json() ?? []; } catch (Exception $e) { Log::warning('Failed to parse JSON response: '.$e->getMessage()); diff --git a/tests/Feature/PluginXmlResponseTest.php b/tests/Feature/PluginXmlResponseTest.php index 5811089..308d914 100644 --- a/tests/Feature/PluginXmlResponseTest.php +++ b/tests/Feature/PluginXmlResponseTest.php @@ -72,7 +72,7 @@ test('plugin parses XML responses and wraps under rss key', function (): void { expect($plugin->data_payload['rss']['channel']['item'])->toHaveCount(2); }); -test('plugin parses JSON-parsable response body as JSON', function (): void { +test('plugin handles non-XML content-type as JSON', function (): void { $jsonContent = '{"title": "Test Data", "items": [1, 2, 3]}'; Http::fake([ @@ -95,28 +95,6 @@ test('plugin parses JSON-parsable response body as JSON', function (): void { ]); }); -test('plugin wraps plain text response body as JSON', function (): void { - $jsonContent = 'Lorem ipsum dolor sit amet'; - - Http::fake([ - 'example.com/data' => Http::response($jsonContent, 200, ['Content-Type' => 'text/plain']), - ]); - - $plugin = Plugin::factory()->create([ - 'data_strategy' => 'polling', - 'polling_url' => 'https://example.com/data', - 'polling_verb' => 'get', - ]); - - $plugin->updateDataPayload(); - - $plugin->refresh(); - - expect($plugin->data_payload)->toBe([ - 'data' => 'Lorem ipsum dolor sit amet', - ]); -}); - test('plugin handles invalid XML gracefully', function (): void { $invalidXml = 'unclosed tag';