diff --git a/app/controllers/admin/form_descriptions_controller.rb b/app/controllers/admin/form_descriptions_controller.rb index ac9edb8c..3d441506 100644 --- a/app/controllers/admin/form_descriptions_controller.rb +++ b/app/controllers/admin/form_descriptions_controller.rb @@ -55,6 +55,6 @@ def set_conference end def set_form_description - @form_description = FormDescription.where(conference: @conference).find(params[:id]) + @form_description = FormDescription.where(conference: @conference).find_by!(locale: params[:locale]) end end diff --git a/app/models/form_description.rb b/app/models/form_description.rb index d67c73a2..59f791ba 100644 --- a/app/models/form_description.rb +++ b/app/models/form_description.rb @@ -31,6 +31,10 @@ def to_dataset validate :validate_fallback_options_json + def to_param + locale + end + before_save :render_markdown def fallback_options diff --git a/config/routes.rb b/config/routes.rb index f93cfc9e..25029d3c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -18,7 +18,7 @@ resource :booth_assignment, only: %i(show update) - resources :form_descriptions, except: %i(index) + resources :form_descriptions, param: :locale, except: %i(index) resources :plans, except: %i(show) resources :sponsorships, except: %i(index new create) do diff --git a/spec/models/form_description_spec.rb b/spec/models/form_description_spec.rb index f04c1f4e..539e6ed6 100644 --- a/spec/models/form_description_spec.rb +++ b/spec/models/form_description_spec.rb @@ -3,6 +3,21 @@ RSpec.describe FormDescription, type: :model do let(:conference) { FactoryBot.create(:conference) } + describe '#to_param' do + it 'returns locale instead of id' do + form = FactoryBot.create(:form_description, conference:, locale: 'en') + expect(form.to_param).to eq('en') + end + + it 'returns different locales correctly' do + form_en = FactoryBot.create(:form_description, conference:, locale: 'en') + form_ja = FactoryBot.create(:form_description, conference:, locale: 'ja') + + expect(form_en.to_param).to eq('en') + expect(form_ja.to_param).to eq('ja') + end + end + describe '#render_markdown callback' do it 'renders markdown fields to HTML on save' do form = FactoryBot.create(:form_description, diff --git a/spec/routing/form_descriptions_routing_spec.rb b/spec/routing/form_descriptions_routing_spec.rb new file mode 100644 index 00000000..030819ae --- /dev/null +++ b/spec/routing/form_descriptions_routing_spec.rb @@ -0,0 +1,66 @@ +require 'rails_helper' + +RSpec.describe Admin::FormDescriptionsController, type: :routing do + describe 'routing' do + it 'routes to #new' do + expect(get: '/admin/conferences/rk2025/form_descriptions/new').to route_to( + controller: 'admin/form_descriptions', + action: 'new', + conference_slug: 'rk2025' + ) + end + + it 'routes to #create' do + expect(post: '/admin/conferences/rk2025/form_descriptions').to route_to( + controller: 'admin/form_descriptions', + action: 'create', + conference_slug: 'rk2025' + ) + end + + it 'routes to #show using locale parameter' do + expect(get: '/admin/conferences/rk2025/form_descriptions/en').to route_to( + controller: 'admin/form_descriptions', + action: 'show', + conference_slug: 'rk2025', + locale: 'en' + ) + end + + it 'routes to #edit using locale parameter' do + expect(get: '/admin/conferences/rk2025/form_descriptions/ja/edit').to route_to( + controller: 'admin/form_descriptions', + action: 'edit', + conference_slug: 'rk2025', + locale: 'ja' + ) + end + + it 'routes to #update via PUT using locale parameter' do + expect(put: '/admin/conferences/rk2025/form_descriptions/en').to route_to( + controller: 'admin/form_descriptions', + action: 'update', + conference_slug: 'rk2025', + locale: 'en' + ) + end + + it 'routes to #update via PATCH using locale parameter' do + expect(patch: '/admin/conferences/rk2025/form_descriptions/en').to route_to( + controller: 'admin/form_descriptions', + action: 'update', + conference_slug: 'rk2025', + locale: 'en' + ) + end + + it 'routes to #destroy using locale parameter' do + expect(delete: '/admin/conferences/rk2025/form_descriptions/ja').to route_to( + controller: 'admin/form_descriptions', + action: 'destroy', + conference_slug: 'rk2025', + locale: 'ja' + ) + end + end +end