23ac76555b
* Validate and normalize auto-postpone period to days - Add Entropy::AUTO_POSTPONE_PERIODS and validate auto_postpone_period against the allowed set - Introduce auto_postpone_period_in_days for forms and entropy update endpoints - Fall back to index 0 in knob partial when current value isn't in options - Remove entropy_auto_close_options helper in favor of model constant - Update tests to use allowed period values * Use auto_postpone_period_in_days for JSON entropy updates The JSON API was accepting auto_postpone_period (seconds) which bypassed the days normalization and validation. Switch to auto_postpone_period_in_days consistently and add explicit wrap_parameters so flat JSON params are wrapped correctly for the virtual attribute. * Default to account or 30-day fallback when knob value is invalid * Address PR review feedback for entropy validation - Fall back to first knob option (index 0) when persisted value isn't in the allowed set, preventing nil index errors for legacy values - Use integer division (1.day.to_i) for consistent day calculations * Default to account entropy period instead of first option for knob fallback * Test that default auto-postpone period is in the allowed periods * Return 422 instead of 500 for invalid entropy auto-postpone values Rescue ActiveRecord::RecordInvalid in entropy controllers so invalid auto_postpone_period_in_days values return 422 Unprocessable Entity instead of raising a 500. * Fix NoMethodError when board entropy falls back to account default Use container.account.entropy.auto_postpone_period_in_days instead of container.account.auto_postpone_period_in_days since Account doesn't delegate that method. * Test board entropy fallback to account default for invalid periods
46 lines
1.5 KiB
Ruby
46 lines
1.5 KiB
Ruby
require "test_helper"
|
|
|
|
class Boards::EntropiesControllerTest < ActionDispatch::IntegrationTest
|
|
setup do
|
|
sign_in_as :kevin
|
|
@board = boards(:writebook)
|
|
end
|
|
|
|
test "update" do
|
|
assert_no_difference -> { Current.account.entropy.reload.auto_postpone_period } do
|
|
put board_entropy_path(@board, format: :turbo_stream), params: { board: { auto_postpone_period_in_days: 90 } }
|
|
|
|
assert_equal 90.days, @board.entropy.reload.auto_postpone_period
|
|
|
|
assert_turbo_stream action: :replace, target: dom_id(@board, :entropy)
|
|
end
|
|
end
|
|
|
|
test "update as JSON" do
|
|
put board_entropy_path(@board), params: { board: { auto_postpone_period_in_days: 90 } }, as: :json
|
|
|
|
assert_response :no_content
|
|
assert_equal 90.days, @board.entropy.reload.auto_postpone_period
|
|
end
|
|
|
|
test "update requires board admin permission" do
|
|
logout_and_sign_in_as :jz
|
|
|
|
original_period = @board.entropy.auto_postpone_period
|
|
|
|
put board_entropy_path(@board, format: :turbo_stream), params: { board: { auto_postpone_period_in_days: 7 } }
|
|
|
|
assert_response :forbidden
|
|
assert_equal original_period, @board.entropy.reload.auto_postpone_period
|
|
end
|
|
|
|
test "update rejects invalid auto_postpone_period" do
|
|
original_period = @board.entropy.auto_postpone_period
|
|
|
|
put board_entropy_path(@board, format: :turbo_stream), params: { board: { auto_postpone_period_in_days: 1 } }
|
|
|
|
assert_response :unprocessable_entity
|
|
assert_equal original_period, @board.entropy.reload.auto_postpone_period
|
|
end
|
|
end
|