Replace the toggle-view approach and hidden DOM data carrier with a proper dedicated Charts page: - Move Charts out of Measurements view toggles into its own nav tab and route (GET /charts) - ChartsController serializes readout data as JSON (ordered by taken_at); the view embeds it in a <script type="application/json"> element instead of rendering a hidden copy of the measurements partial just to ferry data attributes to JS - buildCharts() reads from the JSON element directly — no DOM parsing, no sorting in JS (server already orders the data) - Turbo load handler detects the charts page via #charts-data presence - Add controller tests (authentication, data shape, ordering, data isolation between users) and system tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
27 lines
825 B
Ruby
27 lines
825 B
Ruby
require "application_system_test_case"
|
|
|
|
class ChartsTest < ApplicationSystemTestCase
|
|
setup do
|
|
@user = sign_in(user: users(:alice))
|
|
@quantity = @user.quantities.create!(name: 'Weight')
|
|
@unit = @user.units.create!(symbol: 'kg')
|
|
@user.readouts.create!(quantity: @quantity, unit: @unit, value: 82.5, taken_at: 1.day.ago)
|
|
@user.readouts.create!(quantity: @quantity, unit: @unit, value: 83.1, taken_at: Time.now)
|
|
visit charts_path
|
|
end
|
|
|
|
test "charts page is reachable from navigation" do
|
|
visit root_path
|
|
click_on t('charts.navigation')
|
|
assert_current_path charts_path
|
|
end
|
|
|
|
test "renders Plotly chart panel" do
|
|
assert_selector '#measurements-charts .chart-panel', wait: 5
|
|
end
|
|
|
|
test "chart legend shows quantity name with unit" do
|
|
assert_text 'Weight (kg)', wait: 5
|
|
end
|
|
end
|