diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb
index 32bca350..b921f89c 100644
--- a/app/controllers/pages_controller.rb
+++ b/app/controllers/pages_controller.rb
@@ -29,6 +29,17 @@ class PagesController < ApplicationController
def changelog
@release_notes = github_provider.fetch_latest_release_notes
+ # Fallback if no release notes are available
+ if @release_notes.nil?
+ @release_notes = {
+ avatar: "https://github.com/maybe-finance.png",
+ username: "maybe-finance",
+ name: "Release notes unavailable",
+ published_at: Date.current,
+ body: "
Unable to fetch the latest release notes at this time. Please check back later or visit our GitHub releases page directly.
"
+ }
+ end
+
render layout: "settings"
end
diff --git a/app/views/pages/changelog.html.erb b/app/views/pages/changelog.html.erb
index e7192321..5a5345f2 100644
--- a/app/views/pages/changelog.html.erb
+++ b/app/views/pages/changelog.html.erb
@@ -5,17 +5,17 @@
- <%= image_tag @release_notes[:avatar], class: "rounded-full w-full h-full object-cover" %>
+ <%= image_tag @release_notes[:avatar], class: "rounded-full w-full h-full object-cover" if @release_notes[:avatar].present? %>
<%= @release_notes[:name] %>
- <%= @release_notes[:body].html_safe %>
+ <%= @release_notes[:body]&.html_safe %>
diff --git a/test/controllers/pages_controller_test.rb b/test/controllers/pages_controller_test.rb
index 47fdc936..49ee225b 100644
--- a/test/controllers/pages_controller_test.rb
+++ b/test/controllers/pages_controller_test.rb
@@ -16,4 +16,35 @@ class PagesControllerTest < ActionDispatch::IntegrationTest
assert_response :ok
end
end
+
+ test "changelog with nil release notes" do
+ # Mock the GitHub provider to return nil (simulating API failure or no releases)
+ github_provider = mock
+ github_provider.expects(:fetch_latest_release_notes).returns(nil)
+ Provider::Registry.stubs(:get_provider).with(:github).returns(github_provider)
+
+ get changelog_path
+ assert_response :ok
+ assert_select "h2", text: "Release notes unavailable"
+ assert_select "a[href='https://github.com/maybe-finance/maybe/releases']"
+ end
+
+ test "changelog with incomplete release notes" do
+ # Mock the GitHub provider to return incomplete data (missing some fields)
+ github_provider = mock
+ incomplete_data = {
+ avatar: nil,
+ username: "maybe-finance",
+ name: "Test Release",
+ published_at: nil,
+ body: nil
+ }
+ github_provider.expects(:fetch_latest_release_notes).returns(incomplete_data)
+ Provider::Registry.stubs(:get_provider).with(:github).returns(github_provider)
+
+ get changelog_path
+ assert_response :ok
+ assert_select "h2", text: "Test Release"
+ # Should not crash even with nil values
+ end
end