Readouts gain a taken_at timestamp (distinct from created_at) that records
when the measurement was actually taken. Measurements are now ordered by
taken_at descending.
Quantities gain an optional default_unit association. When set, the unit
is pre-selected in the measurement form. A "Set as default" button on the
unit selector lets users update the default directly from the form.
- Migrations: add taken_at (datetime) to readouts,
add default_unit_id (fk → units) to quantities
- Readout: expose taken_at in ATTRIBUTES permit-list
- Quantity: add default_unit belongs_to, expose in ATTRIBUTES
- QuantitiesController: load @user_units for form actions
- Quantities views: add Default unit column and select to form
- Readouts form: pre-select default unit; add "Set as default" button
(readoutUnitChanged / setDefaultUnit wired up in a later commit)
- Measurements form: default taken_at input to current time
- ApplicationHelper: propagate :form option to html_options in builder
- config/environments/test.rb: allow Capybara's dynamic host
- Tests: system tests for default-unit UI on the Quantities page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
46 lines
1.4 KiB
Ruby
46 lines
1.4 KiB
Ruby
require "application_system_test_case"
|
|
|
|
class QuantitiesTest < ApplicationSystemTestCase
|
|
setup do
|
|
@user = sign_in(user: users(:alice))
|
|
@unit = @user.units.create!(symbol: 'kg')
|
|
@quantity = @user.quantities.create!(name: 'Weight')
|
|
visit quantities_path
|
|
end
|
|
|
|
test "update button turns red when default unit changes" do
|
|
click_on 'Weight'
|
|
|
|
button = find('button[name=button]')
|
|
initial_color = evaluate_script("getComputedStyle(arguments[0]).backgroundColor", button)
|
|
|
|
select 'kg', from: 'quantity[default_unit_id]'
|
|
|
|
changed_color = evaluate_script("getComputedStyle(arguments[0]).backgroundColor", button)
|
|
refute_equal initial_color, changed_color, "Button color should change when default unit is altered"
|
|
end
|
|
|
|
test "saving default unit pre-selects it in measurements form" do
|
|
click_on 'Weight'
|
|
select 'kg', from: 'quantity[default_unit_id]'
|
|
click_on t('helpers.submit.update')
|
|
assert_selector '.flash.notice'
|
|
|
|
@quantity.reload
|
|
assert_equal @unit.id, @quantity.default_unit_id
|
|
|
|
visit measurements_path
|
|
find(:link_or_button, t('measurements.index.new_measurement')).click
|
|
assert_selector '#measurement_form'
|
|
|
|
within '#quantity_select' do
|
|
check 'Weight'
|
|
end
|
|
find('button[formaction]').click
|
|
|
|
within 'tbody#readouts' do
|
|
assert_selector "option[value='#{@unit.id}'][selected]"
|
|
end
|
|
end
|
|
end
|