From a2e4a1a5d3e73504e78461e0e39a3d24815b76d4 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Tue, 21 Jul 2026 22:23:32 +0200 Subject: Make PDFs eligible for headline and allow searching assets by filename --- app/models/related_asset.rb | 2 +- test/controllers/related_assets_controller_test.rb | 25 ++++++++++++++++++++++ test/models/related_asset_test.rb | 16 +++++++++++--- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/app/models/related_asset.rb b/app/models/related_asset.rb index 62000cc..8f8d49c 100644 --- a/app/models/related_asset.rb +++ b/app/models/related_asset.rb @@ -12,6 +12,6 @@ class RelatedAsset < ApplicationRecord def headline_only_for_images return unless asset - errors.add(:headline, "can only be set on image assets") if headline? && !asset.image? + errors.add(:headline, "can only be set on image or PDF assets") if headline? && !(asset.image? || asset.pdf?) end end diff --git a/test/controllers/related_assets_controller_test.rb b/test/controllers/related_assets_controller_test.rb index 2384adc..ced4b74 100644 --- a/test/controllers/related_assets_controller_test.rb +++ b/test/controllers/related_assets_controller_test.rb @@ -134,4 +134,29 @@ class RelatedAssetsControllerTest < ActionController::TestCase assert_response :success assert_not related.reload.headline? end + + test "search includes PDF assets as headline-eligible candidates" do + login_as :quentin + node = Node.root.children.create!(:slug => "related_assets_search_pdf_test") + asset = Asset.create!(:name => "expert-opinion-searchable", :upload_content_type => "application/pdf") + + get :search, params: { :node_id => node.id, :search_term => "expert-opinion-searchable" } + + assert_response :success + ids = JSON.parse(response.body).map { |r| r["id"] } + assert_includes ids, asset.id + end + + test "search matches by filename as well as name" do + login_as :quentin + node = Node.root.children.create!(:slug => "related_assets_search_filename_test") + asset = Asset.create!(:name => "Untitled", :upload_content_type => "application/pdf", + :upload_file_name => "Stellungnahme_Patientendaten_Schutz.pdf") + + get :search, params: { :node_id => node.id, :search_term => "Patientendaten" } + + assert_response :success + ids = JSON.parse(response.body).map { |r| r["id"] } + assert_includes ids, asset.id + end end diff --git a/test/models/related_asset_test.rb b/test/models/related_asset_test.rb index 710b4cc..bb86ddb 100644 --- a/test/models/related_asset_test.rb +++ b/test/models/related_asset_test.rb @@ -11,15 +11,25 @@ class RelatedAssetTest < ActiveSupport::TestCase assert related.valid? end - test "headline cannot be set on a non-image asset" do + test "headline can be set on a PDF asset" do node = Node.root.children.create!(:slug => "related_asset_headline_pdf_test") - asset = Asset.create!(:name => "programme", :upload_content_type => "application/pdf") + asset = Asset.create!(:name => "expert opinion", :upload_content_type => "application/pdf") + node.draft.assets << asset + related = node.draft.related_assets.find_by(:asset_id => asset.id) + + related.headline = true + assert related.valid? + end + + test "headline cannot be set on a non-image, non-PDF asset" do + node = Node.root.children.create!(:slug => "related_asset_headline_text_test") + asset = Asset.create!(:name => "programme", :upload_content_type => "text/plain") node.draft.assets << asset related = node.draft.related_assets.find_by(:asset_id => asset.id) related.headline = true assert_not related.valid? - assert_includes related.errors[:headline], "can only be set on image assets" + assert_includes related.errors[:headline], "can only be set on image or PDF assets" end test "the headline validation does not raise when asset is missing" do -- cgit v1.3