summaryrefslogtreecommitdiff
path: root/test/controllers/assets_controller_test.rb
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-06-26 01:59:57 +0200
committererdgeist <erdgeist@erdgeist.org>2026-06-26 01:59:57 +0200
commitc06723ee715512c2033c7786c48f15674585b56b (patch)
tree46d074bde9a4fc61f0a76cbc601007ed4412ec61 /test/controllers/assets_controller_test.rb
parent0818a3057b0a91e422158d828026c941b4e10622 (diff)
Stage 4: Rails 5.2 -> 6.1 on Ruby 2.7.2
- routing-filter 0.6.3 -> 0.7.0 (Rails 6.1 compatibility) - RSS named routes rss_xml/rss_rdf added - RouteWithParams workarounds: will_paginate_patch, content_path shim, safe_path helper - Paperclip removed, replaced with FileAttachment concern (preserves URL scheme) - Assets resource moved to /admin/assets (Sprockets middleware conflict) - ApplicationRecord base class added, all models migrated - Strong parameters added to Assets, Occurrences, Events, MenuItems controllers - update_attributes -> update throughout - render :nothing -> head :ok/:not_found throughout - language_selector rewritten (removes :overwrite_params) - Environment files updated for Rails 6.1 (eager_load, public_file_server, ActionMailer) - Arel::Visitors::DepthFirst and Integer/Float duration patches removed from test_helper - AssetsController tests added (10 tests covering upload, variants, destroy, auth) - ImageMagick geometry: 460x250! for headline crop (not # which is invalid in IM6) 129 runs, 311 assertions, 5 failures (all pre-existing), 0 errors
Diffstat (limited to 'test/controllers/assets_controller_test.rb')
-rw-r--r--test/controllers/assets_controller_test.rb170
1 files changed, 170 insertions, 0 deletions
diff --git a/test/controllers/assets_controller_test.rb b/test/controllers/assets_controller_test.rb
index d003d25..ea55c90 100644
--- a/test/controllers/assets_controller_test.rb
+++ b/test/controllers/assets_controller_test.rb
@@ -1,4 +1,174 @@
1require 'test_helper' 1require 'test_helper'
2 2
3class AssetsControllerTest < ActionController::TestCase 3class AssetsControllerTest < ActionController::TestCase
4
5 def setup
6 login_as :quentin
7 end
8
9 def teardown
10 # Clean up any files written to disk during tests
11 Dir.glob(Rails.root.join('public', 'system', 'uploads', 'test_*')).each do |dir|
12 FileUtils.rm_rf(dir)
13 end
14 # Remove uploads created for assets created during tests
15 Asset.where("upload_file_name IS NOT NULL").where("id > 1000000").each do |a|
16 FileUtils.rm_rf(Rails.root.join('public', 'system', 'uploads', a.id.to_s))
17 end
18 end
19
20 # --- index ---
21
22 test "get index" do
23 get :index
24 assert_response :success
25 end
26
27 # --- show ---
28
29 test "show existing asset" do
30 asset = Asset.create!(
31 name: 'Test asset',
32 upload_file_name: 'test_image.png',
33 upload_content_type: 'image/png',
34 upload_file_size: 49854,
35 upload_updated_at: Time.current
36 )
37 get :show, params: { id: asset.id }
38 assert_response :success
39 end
40
41 # --- new ---
42
43 test "get new" do
44 get :new
45 assert_response :success
46 end
47
48 # --- create with image ---
49
50 test "create asset with image upload generates variants" do
51 uploaded = Rack::Test::UploadedFile.new(
52 Rails.root.join('test', 'fixtures', 'files', 'test_image.png'),
53 'image/png'
54 )
55 assert_difference 'Asset.count', 1 do
56 post :create, params: { asset: { name: 'Logo', upload: uploaded } }
57 end
58 assert_response :redirect
59
60 asset = Asset.last
61 assert_equal 'test_image.png', asset.upload_file_name
62 assert_equal 'image/png', asset.upload_content_type
63 assert asset.upload_file_size > 0
64
65 # original and all three variants should exist on disk
66 %w[original medium thumb headline].each do |style|
67 path = Rails.root.join('public', 'system', 'uploads',
68 asset.id.to_s, style, 'test_image.png')
69 assert File.exist?(path), "Expected #{style} variant at #{path}"
70 end
71 end
72
73 # --- create with PDF ---
74
75 test "create asset with PDF upload generates only original" do
76 uploaded = Rack::Test::UploadedFile.new(
77 Rails.root.join('test', 'fixtures', 'files', 'test_document.pdf'),
78 'application/pdf'
79 )
80 assert_difference 'Asset.count', 1 do
81 post :create, params: { asset: { name: 'Document', upload: uploaded } }
82 end
83 assert_response :redirect
84
85 asset = Asset.last
86 assert_equal 'test_document.pdf', asset.upload_file_name
87 assert_equal 'application/pdf', asset.upload_content_type
88
89 # only original should exist, no image variants
90 original_path = Rails.root.join('public', 'system', 'uploads',
91 asset.id.to_s, 'original', 'test_document.pdf')
92 assert File.exist?(original_path), "Expected original at #{original_path}"
93
94 %w[medium thumb headline].each do |style|
95 path = Rails.root.join('public', 'system', 'uploads',
96 asset.id.to_s, style, 'test_document.pdf')
97 assert !File.exist?(path), "Expected no #{style} variant for PDF"
98 end
99 end
100
101 # --- edit ---
102
103 test "get edit" do
104 asset = Asset.create!(
105 name: 'Edit me',
106 upload_file_name: 'test_image.png',
107 upload_content_type: 'image/png',
108 upload_file_size: 49854,
109 upload_updated_at: Time.current
110 )
111 get :edit, params: { id: asset.id }
112 assert_response :success
113 end
114
115 # --- update ---
116
117 test "update asset name" do
118 asset = Asset.create!(
119 name: 'Old name',
120 upload_file_name: 'test_image.png',
121 upload_content_type: 'image/png',
122 upload_file_size: 49854,
123 upload_updated_at: Time.current
124 )
125 put :update, params: { id: asset.id, asset: { name: 'New name' } }
126 assert_response :redirect
127 assert_equal 'New name', asset.reload.name
128 end
129
130 # --- destroy ---
131
132 test "destroy asset removes record and files" do
133 # Create a real upload so there are files to delete
134 uploaded = Rack::Test::UploadedFile.new(
135 Rails.root.join('test', 'fixtures', 'files', 'test_image.png'),
136 'image/png'
137 )
138 post :create, params: { asset: { name: 'To be deleted', upload: uploaded } }
139 asset = Asset.last
140 upload_dir = Rails.root.join('public', 'system', 'uploads', asset.id.to_s)
141 assert Dir.exist?(upload_dir), "Upload directory should exist before destroy"
142
143 assert_difference 'Asset.count', -1 do
144 delete :destroy, params: { id: asset.id }
145 end
146 assert_response :redirect
147 assert !Dir.exist?(upload_dir), "Upload directory should be removed after destroy"
148 end
149
150 # --- URL helpers ---
151
152 test "upload url returns correct path for original" do
153 asset = Asset.create!(
154 name: 'URL test',
155 upload_file_name: 'logo.png',
156 upload_content_type: 'image/png',
157 upload_file_size: 1000,
158 upload_updated_at: Time.current
159 )
160 assert_equal "/system/uploads/#{asset.id}/original/logo.png", asset.upload.url
161 assert_equal "/system/uploads/#{asset.id}/thumb/logo.png", asset.upload.url(:thumb)
162 assert_equal "/system/uploads/#{asset.id}/medium/logo.png", asset.upload.url(:medium)
163 assert_equal "/system/uploads/#{asset.id}/headline/logo.png", asset.upload.url(:headline)
164 end
165
166 # --- login required ---
167
168 test "index requires login" do
169 session[:user_id] = nil
170 @controller.instance_variable_set(:@current_user, nil)
171 get :index
172 assert_response :redirect
173 end
4end 174end