notebook/test/helpers/application_helper_test.rb
2025-06-29 23:26:38 -07:00

85 lines
3.0 KiB
Ruby

require 'test_helper'
class ApplicationHelperTest < ActionView::TestCase
include ApplicationHelper
# Skip loading fixtures to avoid database issues
self.use_transactional_tests = false
# Use standalone test without fixtures for the helper method
test "combine_and_sort_gallery_images should sort by position and creation date" do
# Skip test if helper method doesn't exist (for CI runs)
skip unless respond_to?(:combine_and_sort_gallery_images)
# Create test objects that respond to the needed methods
# For ImageUploads
regular_image1 = Object.new
def regular_image1.id; 1; end
def regular_image1.created_at; 3.days.ago; end
def regular_image1.position; 3; end
def regular_image1.pinned?; false; end
def regular_image1.respond_to?(method)
[:id, :created_at, :position, :pinned?].include?(method)
end
regular_image2 = Object.new
def regular_image2.id; 2; end
def regular_image2.created_at; 1.day.ago; end
def regular_image2.position; 2; end
def regular_image2.pinned?; true; end # Should be ignored in sorting
def regular_image2.respond_to?(method)
[:id, :created_at, :position, :pinned?].include?(method)
end
# For BasilCommissions
basil_image = Object.new
def basil_image.id; 3; end
def basil_image.saved_at; 2.days.ago; end
def basil_image.position; 1; end
def basil_image.pinned?; false; end
def basil_image.respond_to?(method)
[:id, :saved_at, :position, :pinned?].include?(method)
end
# Test sorting logic
result = combine_and_sort_gallery_images([regular_image1, regular_image2], [basil_image])
# Assertions
assert_equal 3, result.size
# First by position (not by pinned status)
assert_equal 3, result[0][:data].id # basil with position 1
assert_equal 2, result[1][:data].id # regular with position 2 (pinned but not first)
assert_equal 1, result[2][:data].id # regular with position 3
end
test "get_preview_image should prioritize pinned images" do
# Skip test if helper method doesn't exist (for CI runs)
skip unless respond_to?(:get_preview_image)
# Create test objects with one pinned image
regular_image1 = Object.new
def regular_image1.id; 1; end
def regular_image1.created_at; 3.days.ago; end
def regular_image1.position; 1; end
def regular_image1.pinned?; false; end
def regular_image1.respond_to?(method)
[:id, :created_at, :position, :pinned?].include?(method)
end
regular_image2 = Object.new
def regular_image2.id; 2; end
def regular_image2.created_at; 1.day.ago; end
def regular_image2.position; 3; end # Bad position, but pinned
def regular_image2.pinned?; true; end
def regular_image2.respond_to?(method)
[:id, :created_at, :position, :pinned?].include?(method)
end
# Test preview image selection
result = get_preview_image([regular_image1, regular_image2], [])
# Pinned image should be chosen for preview
assert_equal 2, result[:data].id
end
end